mybatis-config.xml
:java
configuration(配置)
properties(屬性)
settings(設置)
typeAliases(類型別名)
typeHandlers(類型處理器)
objectFactory(對象工廠)
plugins(插件)
environments(環境配置)
environment(環境變量)
transactionManager(事務管理器)
dataSource(數據源)
databaseIdProvider(數據庫廠商標識)
mappers(映射器)
{% endnote %}mysql
MyBatis
能夠配置成適應多種環境git
不過要記住:spring
儘管能夠配置多個環境,但每一個 SqlSessionFactory 實例只能選擇一種環境。學會使用配置多套運行環境!sql
MyBatis默認的事務管理器就是JDBC
,鏈接池:POOLED
數據庫
咱們能夠經過properties屬性
來實現引用配置文件mybatis
這些屬性都是可外部配置且可動態替換的,既能夠在典型的 Java 屬性文件
中配置,亦可經過 properties 元素
的子元素來傳遞。app
建立一個db.properties
文件:ide
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8 jdbc.username=root #數據庫帳號 jdbc.password=root #數據庫密碼
<properties resource="db.properties"> </properties> <!-- 和spring整合後 environments配置將廢除 --> <environments default="development"> <environment id="development"> <!-- 使用jdbc事務管理,事務控制由mybatis --> <transactionManager type="JDBC" /> <!-- 數據庫鏈接池,由mybatis管理 --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments>
能夠直接引入外部文件
,能夠在其中增長一些屬性配置
url
若是兩個文件有同一字段
,優先使用外部
配置文件的!
類型別名
是爲 Java 類型設置一個短的名字。 存在的意義僅在於用來減小
類徹底限定名的冗餘
。
當經過設置MyBatis
的配置文件
中的 typeAliases
屬性後,就能夠爲 sql 映射文件
中的輸入 / 輸出參數設置類型別名
,而後在sql 映射配置文件
中使用該別名。
配置文件:
<typeAliases> <typeAlias type="pojo.user" alias="user"/> </typeAliases>
sql 映射配置文件,示例代碼以下:
<select id="getUserList" resultType="user" > select * from mybatis.user </select>
建立的包裏可能也會存在其餘多個 JavaBean
對象類,這時候一個一個配置別名很麻煩,就須要批量定義別名
,批量指定很簡單,只要指定包名
便可,其定義別名的規範就是對應包的類名首字母
變爲小寫
。
配置文件:
<typeAliases> <package name="pojo"/> </typeAliases>
這時設置的包下的類就都有了別名,別名就是類名(首字母小寫)。
經過註解
的方式來配置別名,在須要配置別名的類前經過 @Alias
註解便可,參數就是別名名稱
。
示例代碼:
@Alias("user") public class user{ //其餘代碼 }
<mappers > <mapper resource="xxx/xxx/xxxxMapper.xml"/> </mappers>
<mappers > <mapper class="xxx.xxxx.xxx.xxxxMapper"/> </mappers>
注意:接口和它的Mapper文件必須同名
,且在同一個包
下
<mappers > <package name="xxx.xxx.dao"/> </mappers>
注意:接口和它的Mapper文件必須同名
,且在同一個包
下
數據庫:
實體類:
能夠從上圖看出,數據庫中的pwd
和實體類中的password
不一樣,會致使如下結果:
起別名,在字段名後用as
對應屬性名,pwd as password
<mapper namespace="com.Dao.UserDao"> <select id="getUserList" resultType="pojo.user" > select id,name,pwd as password from mybatis.user </select> </mapper>
<resultMap id="user" type="pojo.user"> <!--column數據庫中的字段,property實體類中的屬性--> <id column="id" property="id"/> <result column="name" property="name" /> <result column="pwd" property="password" /> </resultMap> <select id="getUserList" resultMap="user" > select * from mybatis.user </select>
Test時,會出現bug:
- 首先是:
2 字節的 UTF-8 序列的字節 2 無效
- 這個問題是由於在
xml文件
中的中文註釋的問題,將xml文件
的中文註釋刪除,解決- 將
xml文件
頂部的encoding=UTF-8
改成encoding=UTF8
能夠解決問題- 第二個是:
數據庫鏈接問題
- 設置setTimeZone=UTC,沒有解決
- 設置set-on-borrow=true,沒有解決重啓mysql,沒有解決
- 最終發現,
mysql版本問題
,而Maven導入的依賴包和mysql版本不一樣
最重要最強大
的元素設計思想
是,對於簡單的語句根本不須要配置顯式的結果映射,而對於複雜一點的語句只須要描述它們的關係就好了。