mybatis學習二:mybatis配置詳解
MyBatis最關鍵的組成部分是SqlSessionFactory,我們可以從中獲取SqlSession, 並執行對映的SQL語句。
SqlSessionFactory物件可以通過基於XML的配置資訊或者JavaAPI建立。
注意:setting初期學習以連線為主,不輕易做修改
2.1 使用xml配置Mybatis
構建SqlSessionFactory最常見的方式是基於XML配置。下面的 mybatis-config.xml展示了一個典型的MyBatis配置檔案的樣子:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="application.properties"> <property name="username" value="db_user" /> <property name="password" value="verysecurepwd" /> </properties> <settings> <setting name="cacheEnabled" value="true" /> </settings> <typeAliases> <typeAlias alias="Student" type="com.briup.pojo.Student" /> <package name="com.briup.pojo" /> </typeAliases> <typeHandlers> <typeHandler handler="com.mybatis3.typehandlers.PhoneTypeHandler" /> <package name="com.briup.typehandlers" /> </typeHandlers> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> <environment id="production"> <transactionManager type="MANAGED" /> <dataSource type="JNDI"> <property name="data_source" value="java:comp/jdbc/MyBatisDemoDS" /> </dataSource> </environment> </environments> <mappers> <mapper resource="com/briup/mappers/StudentMapper.xml" /> <mapper url="file:///D:/mybatisdemo/mappers/StudentMapper.xml" /> <mapper class="com.briup.mappers.StudentMapper" /> </mappers> </configuration> 2.1.1 environments元素 environments是配置mybatis當前工作的資料庫環境的地方 MyBatis支援配置多個dataSource環境,可以將應用部署到不同的環境上,如DEV(開發環境),TEST(測試換將),QA(質量評估環境),UAT(使用者驗收環境),PRODUCTION(生產環境),可以通過將預設environments值設定成想要的environment的id值。 有時候,我們可能需要在相同的應用下使用多個數據庫,比如我們可能有shoppingcart資料庫來儲存所有的訂單明細;使用reports資料庫儲存訂單明細的合計,用作報告。(也就是如果系統在執行期間如果有切換資料庫環境的需求,mybatis中也可以很輕鬆的實現). 如果你的應用需要連線多個數據庫,你需要將每個資料庫配置成獨立的環境,並且為每一個數據庫建立一個SqlSessionFactory 例如: <environments default="shoppingcart"> <environment id="shoppingcart"> <transactionManager type="MANAGED" /> <dataSource type="JNDI"> <property name="data_source" value="java:comp/jdbc/ShoppingcartDS" /> </dataSource> </environment> <environment id="reports"> <transaction Managertype="MANAGED" /> <dataSource type="JNDI"> <property name="data_source" value="java:comp/jdbc/ReportsDS" /> </dataSource> </environment> </environments> 我們可以為以上每個環境建立一個SqlSessionFactory java程式碼: inputStream = Resources.getResourceAsStream("mybatis-config.xml"); //預設的環境 defaultSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //統計明細的環境 cartSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, "shoppingcart"); //統計報表的環境 reportSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, "reports"); 注意:對於environments,我們可以在其中配置多個environment子元素,同時還需要在environment中配置dataSource和transactionManager元素。 2.1.2 dataSource元素 dataSource表示的是資料來源:至少會包括該連線資料庫的各種資訊 <dataSource type="POOLED"> <property name="driver" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> dataSource的型別type屬性可以配置成其內建型別之一,如UNPOOLED,POOLED,JNDI。 如果將型別設定成UNPOOLED,MyBatis會為每一個數據庫操作建立一個新的連線,使用完了並關閉它, 該方式適用於只有小規模數量併發使用者的簡單應用程式上。 如果將屬性設定成POOLED,MyBatis會建立一個數據庫連線池,連線池中的一個連線將會被用作資料
庫操作。一旦資料庫操作完成,MyBatis會將此連線返回
給連線池。在開發或測試環境中,經常使用此種方式。
如果將型別設定成JNDI(Java Naming and Directory Interface , Java命名和目錄介面,
是SUN公司提供的一種標準的Java命名系統介面),MyBatis
從在應用伺服器向配置好的JNDI資料來源dataSource
獲取資料庫連線。在生產環境中,優先考慮這種方式。
2.1.3 transactionManager元素 :事務管理器 MyBatis支援兩種型別的事務管理器:JDBC 和 MANAGED. JDBC事務管理器的使用,是在【jdbc程式】負責管理資料庫連線的生命週期(提交、回退等等)的時候。如果將
TransactionManager 屬性設定成JDBC,MyBatis內部將使用JdbcTransactionFactory類建立TransactionManager。
例如,部署到ApacheTomcat的應用程式,需要應用程式自己管理事務。
MANAGED 事務管理器的使用,是在【應用伺服器】負責管理資料庫連線生命週期的時候。如果
將TransactionManager屬性設定成MANAGED時,MyBatis內部使用ManagedTransactionFactory 類建立事
務管理器TransactionManager。例如,當一個Java EE的應用程式部署在類似JBoss,
WebLogic,GlassFish應用伺服器上時,它們會使用EJB進行應用伺服器的事務管理能力。在這些管理
環境中,你可以使用MANAGED事務管理器。
注:Managed 是託管的意思,即我們編寫的應用程式本身不去管理事務,而是把事務管理交給應用所在的伺服器進行管理。
2.1.4 properties元素
屬性配置元素properties可以將配置值寫死到mybatis-config.xml中,也可以具體到一個屬性檔案中,並且使用屬性檔案的key名作為佔位符.
在上述的配置中,我們將資料庫連線屬性配置到了application.properties檔案中,並且為driver,URL等屬性使用了佔位符.
在applications.properties檔案中配置資料庫連線引數,如下所示:
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:XE
jdbc.username=test
jdbc.password=test
在mybatis-config.xml檔案中,為屬性使用application.properties檔案中定義的佔位符:
<!-- 讀取application.properties檔案中的資料key-value的形式 -->
<properties resource="application.properties">
<!-- 注意:是applications.properties檔案中的值優先順序高 -->
<property name="jdbc.username" value="briup" />
<property name="jdbc.password" value="briup" />
</properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
2.1.5 typeAliases元素: 類型別名
在SQLMapper配置檔案中,對於resultType和parameterType屬性值,我們需要使用JavaBean 的完全限定名。
例如:
<select id="findStudentById" parameterType="int"
resultType="com.briup.pojo.Student">
SELECT STUD_ID AS ID, NAME, EMAIL, DOB
FROM STUDENTS WHERE STUD_ID=#{Id}
</select>
<update id="updateStudent" parameterType="com.briup.pojo.Student">
UPDATE STUDENTS
SET NAME=#{name}, EMAIL=#{email}, DOB=#{dob}
WHERE STUD_ID=#{id}
</update>
注:parameterType表示將來呼叫這個sql語句的時候所傳的引數的型別(引數值或者引數物件裡面的屬性值 用來替換sql語句中的佔位符)
resultType表示將來呼叫這個sql語句的時候所返回的結果的型別(方便mybatis給我們自動封裝結果集)
這裡我們為resultType和parameterType屬性值設定為Student型別的完全限定名:com.briup.com.Student
我們可以為完全限定名取一個別名(alias),然後就可以在需要使用完全限定名的地方使用別名,
而不是到處使用完全限定名。如下例子所示,為完全限定名起一個別名:
<type Aliases>
<type Alias alias="Student" type="com.briup.pojo.Student" />
<type Alias alias="Teacher" type="com.briup.pojo.Teacher" />
</type Aliases>
然後在SQLMapper對映檔案中, 如下使用Student的別名:
<select id="findStudentById" parameterType="int" resultType="Student">
SELECT STUD_ID AS ID, NAME, EMAIL, DOB
FROM STUDENTS WHERE STUD_ID=#{id}
</select>
<update id="updateStudent" parameterType="Student">
UPDATE STUDENTS
SET NAME=#{name}, EMAIL=#{email}, DOB=#{dob}
WHERE STUD_ID=#{id}
</update>
你可以不用為每一個JavaBean單獨定義別名,你可以為配置出需要取別名的類的所在的包(package),MyBatis會自動掃描包內定義的類,然後分別為每個類
註冊一個小寫字母開頭的簡單類名形式的別名。如下所示:
<type Aliases>
<package name="com.briup.pojo" />
</type Aliases>
如果Student.java和 Teacher.java 定義在com.briup.pojo包中,則 com.briup.pojo.Student的別名會被註冊為student。而com.briup.pojo.Teacher別名
將會被註冊為teacher
還有另外一種方式為JavaBeans起別名,使用註解 @Alias:
@Alias("stu")
public class Student{
....
}
@Alias註解將會覆蓋配置檔案中的<typeAliases>定義。
2.1.6 typeHandlers元素: 型別處理器
當MyBatis將一個Java物件作為輸入引數執行INSERT語句操作時,它會建立一個
PreparedStatement物件,並且使用setXXX()方法對佔位符設定相應的
引數值 。這裡,XXX可以是Int,String,Date 等 Java物件屬性型別的任意一個。示例如下:
INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB)
VALUES(#{stud Id},#{name},#{email},#{dob})
為執行這個語句,MyBatis將採取以下一系列動作:
建立一個有佔位符的PreparedStatement介面,如下:
Prepared Statement ps = connection.prepare Statement
("INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB) VALUES(?,?,?,?)");
檢查Student物件的屬性studId的型別,然後使用合適setXXX方法去設定引數值。
這裡studId是integer型別,所以會使用setInt()方法:ps.setInt(1,student.getStudId());
類似地,對於name和email屬性都是String型別MyBatis使用setString()方法設定引數。
至於dob屬性, MyBatis會使用setDate()方法設定dob處佔位符位置的值。
MyBaits會將java.util.Date型別轉換為java.sql.Timestamp並設值:
ps.setTimestamp(4, new Timestamp((student.getDob()).getTime()));
但MyBatis是怎麼知道對於Integer型別屬性使用setInt()和String型別屬性使用setString()
方法呢?其實MyBatis是通過使用型別處理器typeHandlers來決定這麼做的。
MyBatis對於以下的型別使用內建的型別處理器:所有的基本資料型別、基本型別的包裹型別、
byte[]、java.util.Date、java.sql.Date、java,sql.Time、java.sql.Timestamp、java枚
舉型別等。所以當MyBatis發現屬性的型別屬於上述型別,他會使用對應的型別處理器將值設定到
PreparedStatement中,同樣地,當SQL結果集封裝成java類物件的時候,也有類似的過程。
那如果有一個自定義的型別,怎麼儲存儲存到資料庫呢?示例如下:假設表STUDENTS 有一個 PHONE 欄位,型別為 VARCHAR2(15),而 Student類有一個自定義型別屬性
alter table students add phone varchar2(15);
alter table students drop column phone;
java程式碼:
PhoneNumber 類定義型別的 phoneNumber 屬性。
public class PhoneNumber{
private String countryCode;
private String stateCode;
private String number;
public PhoneNumber(){
}
public PhoneNumber(String countryCode, String stateCode, String number) {
this.countryCode = countryCode;
this.stateCode = stateCode;
this.number = number;
}
public String getAsString() {
return countryCode + "-" + stateCode + "-" + number;
}
// Setters and getters
}
public class Student{
private Integer id;
private String name;
private String email;
private PhoneNumber phone;
// Setters and getters
}
xml配置:
<insert id="insertStudent" parameter Type="Student">
insert into students(name,email,phone)
values(#{name},#{email},#{phone})
</insert>
這裡,引數物件中的屬性phone的值需要傳遞給#{phone};而引數物件的屬性phone是
PhoneNumber型別。但是,MyBatis 並不知道該怎樣來處理這個型別的物件。
為了讓MyBatis明白怎樣處理這個自定義的Java物件型別,如PhoneNumber,我們可以建立
一個自定義的型別處理器,MyBatis提供了抽象類BaseTypeHandler ,我們可以繼承此類建立自定義型別處理器。
程式碼如下所示:
package com.briup.typehandlers;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import com.briup.pojo.PhoneNumber;
public class PhoneTypeHandler extends BaseTypeHandler<PhoneNumber>{
//遇到PhoneNumber引數的時候應該如何在ps中設定值
@Override
public void setNonNullParameter(PreparedStatement ps, int i, PhoneNumber parameter, JdbcType jdbcType)
throws SQLException {
ps.setString(i, parameter.getAsString());
}
//查詢中遇到PhoneNumber型別的應該如何封裝(使用列名封裝)
@Override
public PhoneNumber getNullableResult(ResultSet rs, String columnName) throws SQLException {
return new PhoneNumber(rs.getString(columnName));
}
//查詢中遇到PhoneNumber型別的應該如何封裝(使用列的下標)
@Override
public PhoneNumber getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return new PhoneNumber(rs.getString(columnIndex));
}
//CallableStatement使用中遇到了PhoneNumber型別的應該如何封裝
@Override
public PhoneNumber getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return new PhoneNumber(cs.getString(columnIndex));
}
}
注意:使用ps.setString()和rs.getString()方法是 :因為在資料庫的表中phone列是VARCHAR型別。
最後一旦我們實現了自定義的型別處理器,我們需要在mybatis-config.xml中註冊它:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="application.properties" />
<type Handlers>
<type Handler handler="com.briup.typehandlers.PhoneTypeHandler" />
</type Handlers>
</configuration>
註冊PhoneTypeHandler後, MyBatis就能夠將Phone型別的物件值儲存到VARCHAR型別的列上。
2.1.7 settings元素: 全域性引數設定
注意:大多數情況下,【這些引數使用它們的預設值即可】
為滿足應用特定的需求,MyBatis預設的全域性引數設定可以被覆蓋掉,如下所示:
<settings>
<setting name="cacheEnabled" value="true" />
<setting name="lazyLoadingEnabled" value="true" />
<setting name="multipleResultSetsEnabled" value="true" />
<setting name="useColumnLabel" value="true" />
<setting name="useGeneratedKeys" value="false" />
<setting name="autoMappingBehavior" value="PARTIAL" />
<setting name="defaultExecutorType" value="SIMPLE" />
<setting name="defaultStatementTimeout" value="25000" />
<setting name="safeRowBoundsEnabled" value="false" />
<setting name="mapUnderscoreToCamelCase" value="false" />
<setting name="localCacheScope" value="SESSION" />
<setting name="jdbcTypeForNull" value="OTHER" />
<setting name="lazyLoadTriggerMethods" value="equals,clone,hash Code ,to String" />
<setting name="proxyFactory" value="JAVASSIST" />
<setting name="aggressiveLazyLoading" value="true" />
<setting name="logImpl" value="LOG4J " />
<setting name="logPrefix" value="LOG4J " />
<setting name="callSettersOnNulls" value="false " />
</settings>
<settings>
<!-- 這個配置使全域性的對映器啟用或禁用快取 -->
<setting name="cacheEnabled" value="true" />
<!-- 全域性啟用或禁用延遲載入。當禁用時,所有關聯物件都會即時載入 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 允許或不允許多種結果集從一個單獨的語句中返回(需要適合的驅動) -->
<setting name="multipleResultSetsEnabled" value="true" />
<!-- 使用列標籤代替列名。不同的驅動在這方便表現不同。參考驅動文件或充分測試兩種方法來決定所使用的驅動 -->
<setting name="useColumnLabel" value="true" />
<!-- 允許JDBC支援生成的鍵。需要適合的驅動。 -->
<setting name="useGeneratedKeys" value="false" />
<!-- 指定MyBatis如何自動對映列到欄位/屬性。PARTIAL只會自動對映簡單、沒有巢狀的結果。FULL會自動對映任意複雜的結果(巢狀的或其他情況) -->
<setting name="autoMappingBehavior" value="PARTIAL" />
<!-- 配置預設的執行器。SIMPLE執行器沒有什麼特別之處。REUSE執行器重用預處理語句。BATCH執行器重用語句和批量更新 -->
<setting name="defaultExecutorType" value="SIMPLE" />
!-- 設定超時時間,它決定驅動等待一個數據庫響應的時間 -->
<setting name="defaultStatementTimeout" value="25000" />
<!-- 允許在巢狀語句中使用分頁(RowBounds)預設false -->
<setting name="safeRowBoundsEnabled" value="false" />
<!-- 是否開啟自動駝峰命名規則(camel case)對映,即從經典資料庫列名 A_COLUMN 到經典 Java 屬性名 aColumn 的類似對映。預設false -->
<setting name="mapUnderscoreToCamelCase" value="false" />
<!-- MyBatis 利用本地快取機制(Local Cache)防止迴圈引用(circular references)和加速重複巢狀查詢。 預設值為 SESSION,這種情況下會快取一個會話中執行的所有查詢。 若設定值為 STATEMENT,本地會話僅用在語句執行上,對相同 SqlSession 的不同調用將不會共享資料。 -->
<setting name="localCacheScope" value="SESSION" />
<!-- 當沒有為引數提供特定的 JDBC 型別時,為空值指定 JDBC 型別。 某些驅動需要指定列的 JDBC 型別,多數情況直接用一般型別即可,比如 NULL、VARCHAR 或 OTHER。 -->
<setting name="jdbcTypeForNull" value="OTHER" />
<!-- 指定物件的哪個方法觸發一次延遲載入。 -->
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode ,toString" />
<!-- CGLIB | JAVASSIST 預設JAVASSIST(MyBatis 3.3 or above) -->
<!-- 指定 Mybatis 建立具有延遲載入能力的物件所用到的代理工具。 -->
<setting name="proxyFactory" value="JAVASSIST" />
<!-- 當啟用時,對任意延遲屬性的呼叫會使帶有延遲載入屬性的物件完整載入;反之,每種屬性將會按需載入。 -->
<setting name="aggressiveLazyLoading" value="true" />
<!-- 指定 MyBatis 所用日誌的具體實現,未指定時將自動查詢。 -->
<setting name="logImpl" value="LOG4J " />
<!-- 指定 MyBatis 增加到日誌名稱的字首。值可以是任意字串 -->
<setting name="logPrefix" value="LOG4J " />
<!-- 指定當結果集中值為 null 的時候是否呼叫對映物件的 setter(map 物件時為 put)方法,這對於有 Map.keySet() 依賴或 null 值初始化的時候是有用的。注意基本型別(int、boolean等)是不能設定成 null 的。 預設false-->
<setting name="callSettersOnNulls" value="false " />
</settings>
2.1.8 mappers元素: SQL對映
SQLMapper檔案中包含的SQL對映語句將會被應用通過使用其標籤中的id值來執行。我們需要在mybatis-config.xml檔案中配置SQLMapper檔案的位置。
<mappers>
<mapper resource="com/briup/mappers/StudentMapper.xml" />
<mapper url="file:///D:/mybatisdemo/app/mappers/StudentMapper.xml" />
<mapper class="com.briup.mappers.StudentMapper" />
<package name="com.briup.mappers" />
</mappers>
以上每一個<mapper> 標籤都可以從不同型別的資源中載入對映mapper:
resource屬性用來指定在classpath中的mapper檔案。
url屬性用來通過完全檔案系統路徑或者web URL地址來指向mapper檔案
class屬性用來指向一個mapper介面
package屬性用來指向可以找到Mapper介面的包名
2.2 使用Java API配置MyBatis (屬於瞭解的內容,因為有了靈活的配置配置方法,這個方式幾乎不用)
MyBatis的SqlSessionFactory介面除了使用基於XML的配置建立外也可以通過JavaAPI程式設計式地被建立。每在XML中配置的元素,都可以程式設計式的建立。
因為mybatis框架讀取了我們配置的mybatis-config.xml中配置資訊之後,然後利用這些資訊去執行程式碼創建出我們需要的SqlSessionFactory,再從而進一步得到sqlSession,最後再進行各種資料庫操作。
所以其實我們完全可以不去配置任何資訊直接把資訊寫在程式碼中,然後在按著之前的順序創建出我們需要的SqlSessionFactory,再從而進一步得到sqlSession,最後再進行各種資料庫操作。只是這樣做再大多數時候都會降低程式碼的靈活性,所以我們基本上接觸的框架都是有相應的配置檔案的.
例如:使用Java API建立SqlSessionFactory物件,之前是讀取配置檔案之後再建立,現在是自己把資訊寫到程式碼中,然後再建立該物件
public static SqlSessionFactory getSqlSessionFactory() {
SqlSessionFactory sqlSessionFactory = null;
try {
DataSourcedata Source = DataSourceFactory.getDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.getTypeAliasRegistry().registerAlias("student",Student.class);
configuration.getTypeHandlerRegistry().register(PhoneNumber.class, PhoneTypeHandler.class);
configuration.addMapper(StudentMapper.class);
sqlSessionFactory = new SqlSessionFactoryBuilder().
build(configuration);
}
catch (Exception e) {
throw new RuntimeException(e);
}
return sqlSessionFactory;
}
類似的,每個在XML中配置的元素,都可以程式設計式的建立.
注:這裡就不一一介紹了,因為絕大多數情況下我們還是不會把配置資訊直接寫到程式碼中的
2.3 自定義MyBatis日誌
MyBatis使用其內部LoggerFactory作為真正的日誌類庫使用的門面。其內部的LaggerFactory會將日誌記錄任務委託給如下的所示某一個日誌實現,日誌記錄優先順序由上到下順序遞減:
SLF4J
Apache Commons Logging
Log4j2
Log4j
JDK logging
如果MyBatis未發現上述日誌記錄實現,則MyBatis的日誌記錄功能無效,如果你的執行環境中,在classpath中有多個可用的日誌類庫,並且你希望MyBaits使用某個特定的日誌實現,你可以通過呼叫以下其中一個方法:
org.apache.ibatis.logging.LogFactory.useSlf4jLogging();
org.apache.ibatis.logging.LogFactory.useLog4JLogging();
org.apache.ibatis.logging.LogFactory.useLog4J2Logging();
org.apache.ibatis.logging.LogFactory.useJdkLogging();
org.apache.ibatis.logging.LogFactory.useCommonsLogging();
org.apache.ibatis.logging.LogFactory.useStdOutLogging();
注:
如果你想自定義MyBatis日誌記錄,你應該在呼叫任何其它方法之前呼叫以上的其中一個方法
相關推薦
mybatis學習二:mybatis配置詳解
MyBatis最關鍵的組成部分是SqlSessionFactory,我們可以從中獲取SqlSession, 並執行對映的SQL語句。 SqlSessionFactory物件可以通過基於XML的配置資訊或者JavaAPI建立。 注意:setting初期學習以連線為
Mybatis學習(七)————— mybatis的逆向工程的配置詳解
一、什麼是逆向工程? 簡單點說,就是通過資料庫中的單表,自動生成java程式碼。 Mybatis官方提供了逆向工程,可以針對單表自動生成mybatis程式碼(mapper.java\mapper.xml\po類) 企業中,逆向工程是個很常用的工具,之前我們就學習了hi
mybatis學習二 全局配置文件解釋
auto java 命名 配置文件 pool action 取值 連接 詳細 全局配置文件的詳細解析可以參考mybatis的中文參考文檔 1.全局配置文件中內容1.1 <transactionManager/> type 屬性可取值1.1.1 JDBC,事
python爬蟲學習筆記二:Requests庫詳解及HTTP協議
Requests庫的安裝:https://mp.csdn.net/postedit/83715574 r=requests.get(url,params=None,**kwargs) 這個r是Response物件 url :擬獲取頁面的url連結 params:url中的額外引數
【專案管理】Mybatis-Generator之最完美配置詳解
小夥伴們注意了,全哥花了一些時間,重新整理了一個最完美的Mybatis Generator(簡稱MBG)配置檔案詳細說明,老闆再也不用擔心我的學習!!! 不用多說,直接上程式碼: <?xml
Mybatis最入門---Mapper檔案配置詳解(上)
[一步是咫尺,一步即天涯] 前文中,我們演示了最基本的HelloWorld程式,下面我們將介紹我們上面各項配置檔案的詳細解釋,以及我們正式開發過程中,各種配置的注意事項等。 慣例,先來看看我們的準備工作有: a.作業系統 :win7 x64 b.基本軟體:MySQ
Mybatis最入門---Mapper檔案配置詳解(下)
[一步是咫尺,一步即天涯] 上文我們詳細解釋了HelloWorld工程中的配置項,本文,我們再來介紹一些更加基礎,靈活的配置項。本文,我們先不演示具體的工程,後續的文章中會按照實際應用來配置相關的
Spring+mybatis+struts框架整合的配置詳解
學了很久的spring+mybatis+struts.一直都是單個的用他們,或者是兩兩組合用過,今天總算整合到一起了,配置起來有點麻煩,但是配置完一次之後,就輕鬆多了,那麼框架整合配置詳解如下。 1、匯入相應的jar包 因為我們建造的是maven的web專案,所有我們在pom.xml中需要匯入這些包。
logback(二): 常用配置詳解
logback 常用配置詳解(二) <appender> <appender>: <appender>是<configuration>的子節點,是負責寫日誌的元件。 <appender>有兩個必要屬性nam
MyBatis學習二:mapper.xml屬性
XXMapper.xml檔案 1、id:標識對映檔案中的sql; 將sql語句封裝到mapped statement物件中,所以將id稱為statement的id。 2、parameterType:指定輸入引數型別 3、parameterMap:同parameterType
深入淺出Mybatis系列(三)---配置詳解之properties與environments(mybatis原始碼篇)
上篇文章《深入淺出Mybatis系列(二)---配置簡介(mybatis原始碼篇)》我們通過對mybatis原始碼的簡單分析,可看
Hadoop學習筆記:MapReduce框架詳解
object 好的 單點故障 提高 apr copy 普通 exce 代表性 開始聊mapreduce,mapreduce是hadoop的計算框架,我學hadoop是從hive開始入手,再到hdfs,當我學習hdfs時候,就感覺到hdfs和mapreduce關系的緊密。這個
Python學習一:序列基礎詳解
list ava author 萬裏 單個 使用下標 不能 get 分別是 作者:NiceCui 本文謝絕轉載,如需轉載需征得作者本人同意,謝謝。 本文鏈接:http://www.cnblogs.com/NiceCui/p/7858473.html 郵箱:moyi
Java學習02-web.xml配置詳解
log 用戶授權 相對 lte 聯合 page int config 定制 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSche
mybatis 學習筆記:mybatis SQL註入問題
spa onf concat http 控制臺 throws 檢查 src lec SQL 註入攻擊 首先了解下概念,什麽叫SQL 註入: SQL註入攻擊,簡稱SQL攻擊或註入攻擊,是發生於應用程序之數據庫層的安全漏洞。簡而言之,是在輸入的字符串之中註入SQL指令,在設計
Struts學習之Message Resources配置詳解
目錄 一、概述 二、用法 三、建立資源包 四、配置 五、資原始檔放在哪裡 六、Tags 七、Actions 八、國際化 九、JSTL 十、結論 一、概述 Message Resources訊息
Docker(3):Dockerfile配置詳解
FROM : 指定base映象 MAINTAINER :設定映象的作者,可以是任意的字串 COPY :將檔案從build context 複製到映象 COPY 支援兩種形式:CO
一起來學SpringBoot | 第二篇:SpringBoot配置詳解
文章目錄 自定義屬性配置 自定義檔案配置 多環境化配置 外部命令引導 總結 說點什麼 SpringBoot 是為了簡化 Spring 應用的建立、執行、除錯、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配
Spring Cloud之Zuul(三):路由配置詳解
主題 路由配置詳解 前言 現實中可能只想讓Zuul代理部分微服務,又或者需要對URL進行更加精確的控制。Zuul的路由配置非常靈活、簡單,本部落格通過幾個例項,詳細講解Zuul的路由配置。 內容 1.自定義指定微服務的訪問路徑 說明:配置zuul.routes.指定微服務
hihoCoder題二:A + B詳解
using System; using System.Collections.Generic; using System.Text.RegularExpressions; namespace ConsoleApp3 { class Program1 { sta