優(yōu)化MyBatis配置文件中的配置_第1頁
優(yōu)化MyBatis配置文件中的配置_第2頁
優(yōu)化MyBatis配置文件中的配置_第3頁
優(yōu)化MyBatis配置文件中的配置_第4頁
優(yōu)化MyBatis配置文件中的配置_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、優(yōu)化MyBatis配置文件中的配置一、連接數(shù)據(jù)庫的配置單獨放在一個properties文件中之前,我們是直接將數(shù)據(jù)庫的連接配置信息寫在了MyBatis的conf.xml文件中,如下:復制代碼 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//DTD Config 3.0/EN" "/dtd/mybatis-3-config.dtd"> &l

2、t;configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <!- 配置數(shù)據(jù)庫連接信息 -> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc

3、.Driver" /> <property name="url" value="jdbc:mysql:/localhost:3306/mybatis" /> <property name="username" value="root" /> <property name="password" value="XDP" /> </dataSource> </environment> </enviro

4、nments> </configuration>復制代碼其實我們完全可以將數(shù)據(jù)庫的連接配置信息寫在一個properties文件中,然后在conf.xml文件中引用properties文件,具體做法如下:1、在src目錄下新建一個perties文件,如下圖所示:在perties文件編寫連接數(shù)據(jù)庫需要使用到的數(shù)據(jù)庫驅(qū)動,連接URL地址,用戶名,密碼,如下: driver=com.mysql.jdbc.Driver url=jdbc:mysql:/localhost:3306/mybatis name=root password=XDP2、在MyBatis的

5、conf.xml文件中引用perties文件,如下:復制代碼 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//DTD Config 3.0/EN" "/dtd/mybatis-3-config.dtd"><configuration> <!- 引用perties配置文件 -> <pro

6、perties resource="perties"/> <!- development : 開發(fā)模式 work : 工作模式 -> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <!- 配置數(shù)據(jù)庫連接信息 -> <dataSource type="POOLED&q

7、uot;> <!- value屬性值引用perties配置文件中配置的值 -> <property name="driver" value="$driver" /> <property name="url" value="$url" /> <property name="username" value="$name" /> <property name="password" value

8、="$password" /> </dataSource> </environment> </environments> </configuration>復制代碼二、為實體類定義別名,簡化sql映射xml文件中的引用之前,我們在sql映射xml文件中的引用實體類時,需要寫上實體類的全類名(包名+類名),如下:<!- 創(chuàng)建用戶(Create) -><insert id="addUser" parameterType="me.gacl.domain.User">

9、 insert into users(name,age) values(#name,#age)</insert>parameterType="me.gacl.domain.User"這里寫的實體類User的全類名me.gacl.domain.User,每次都寫這么一長串內(nèi)容挺麻煩的,而我們希望能夠簡寫成下面的形式<insert id="addUser2" parameterType="_User"> insert into users(name,age) values(#name,#age)</inser

10、t>parameterType="_User"這樣寫就簡單多了,為了達到這種效果,我們需要在conf.xml文件中為實體類="me.gacl.domain.User"定義一個別名為"_User",具體做法如下:在conf.xml文件中<configuration></configuration>標簽中添加如下配置:<typeAliases> <typeAlias type="me.gacl.domain.User" alias="_User"/&g

11、t;</typeAliases>這樣就可以為me.gacl.domain.User類定義了一個別名為_User,以后_User就代表了me.gacl.domain.User類,這樣sql映射xml文件中的凡是需要引用me.gacl.domain.User類的地方都可以使用_User來代替,這就達到了一個簡化實體類引用的目的。除了可以使用<typeAlias type="me.gacl.domain.User" alias="_User"/>這種方式單獨為某一個實體類設(shè)置別名之外,我們還可以使用如下的方式批量為某個包下的所有實體類設(shè)

12、置別名,如下:復制代碼<!- 配置實體類的別名,配置實體類別名的目的是為了在引用實體類時可以使用實體類的別名來代替實體類,達到簡寫的目的 -> <typeAliases> <!- 為實體類me.gacl.domain.User配置一個別名_User -> <!- <typeAlias type="me.gacl.domain.User" alias="_User"/> -> <!- 為me.gacl.domain包下的所有實體類配置別名,MyBatis默認的設(shè)置別名的方式就是去除類所在的包

13、后的簡單的類名 比如me.gacl.domain.User這個實體類的別名就會被設(shè)置成User -> <package name="me.gacl.domain"/> </typeAliases>解決字段名與實體類屬性名不相同的沖突在平時的開發(fā)中,我們表中的字段名和表對應(yīng)實體類的屬性名稱不一定都是完全相同的,下面來演示一下這種情況下的如何解決字段名與實體類屬性名不相同的沖突。一、準備演示需要使用的表和數(shù)據(jù)復制代碼CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order

14、_no VARCHAR(20), order_price FLOAT);INSERT INTO orders(order_no, order_price) VALUES('aaaa', 23);INSERT INTO orders(order_no, order_price) VALUES('bbbb', 33);INSERT INTO orders(order_no, order_price) VALUES('cccc', 22);復制代碼二、定義實體類復制代碼 package me.gacl.domain; /* * author gacl

15、* 定義orders表對應(yīng)的實體類 */ public class Order /* * CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), order_price FLOAT ); */ /Order實體類中屬性名和orders表中的字段名是不一樣的 private int id; /id=>order_id private String orderNo; /orderNo=>order_no private float price; /price=>orde

16、r_price public int getId() return id; public void setId(int id) this.id = id; public String getOrderNo() return orderNo; public void setOrderNo(String orderNo) this.orderNo = orderNo; public float getPrice() return price; public void setPrice(float price) this.price = price; Override public String t

17、oString() return "Order id=" + id + ", orderNo=" + orderNo + ", price=" + price+ "" 復制代碼三、編寫測試代碼3.1、編寫SQL的xml映射文件1、創(chuàng)建一個orderMapper.xml文件,orderMapper.xml的內(nèi)容如下:復制代碼 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC

18、"-//DTD Mapper 3.0/EN" "/dtd/mybatis-3-mapper.dtd"> 3 <!- 為這個mapper指定一個唯一的namespace,namespace的值習慣上設(shè)置成包名+sql映射文件名,這樣就能夠保證namespace的值是唯一的 4 例如namespace="me.gacl.mapping.orderMapper"就是me.gacl.mapping(包名)+orderMapper(orderMapper.xml文件去除后綴)

19、5 -> 6 <mapper namespace="me.gacl.mapping.orderMapper"> 7 8 <!- 9 根據(jù)id查詢得到一個order對象,使用這個查詢是查詢不到我們想要的結(jié)果的,10 這主要是因為實體類的屬性名和數(shù)據(jù)庫的字段名對應(yīng)不上的原因,因此無法查詢出對應(yīng)的記錄11 ->12 <select id="getOrderById" parameterType="int" 13 resultType="me.gacl.domain.Order">

20、14 select * from orders where order_id=#id15 </select>16 17 <!- 18 根據(jù)id查詢得到一個order對象,使用這個查詢是可以正常查詢到我們想要的結(jié)果的,19 這是因為我們將查詢的字段名都起一個和實體類屬性名相同的別名,這樣實體類的屬性名和查詢結(jié)果中的字段名就可以一一對應(yīng)上20 ->21 <select id="selectOrder" parameterType="int" 22 resultType="me.gacl.domain.Order&quo

21、t;>23 select order_id id, order_no orderNo,order_price price from orders where order_id=#id24 </select>25 26 <!- 27 根據(jù)id查詢得到一個order對象,使用這個查詢是可以正常查詢到我們想要的結(jié)果的,28 這是因為我們通過<resultMap>映射實體類屬性名和表的字段名一一對應(yīng)關(guān)系 ->29 <select id="selectOrderResultMap" parameterType="int&quo

22、t; resultMap="orderResultMap">30 select * from orders where order_id=#id31 </select>32 <!-通過<resultMap>映射實體類屬性名和表的字段名對應(yīng)關(guān)系 ->33 <resultMap type="me.gacl.domain.Order" id="orderResultMap">34 <!- 用id屬性來映射主鍵字段 ->35 <id property="id&q

23、uot; column="order_id"/>36 <!- 用result屬性來映射非主鍵字段 ->37 <result property="orderNo" column="order_no"/>38 <result property="price" column="order_price"/>39 </resultMap>40 41 </mapper>復制代碼2、在conf.xml文件中注冊orderMapper.xml映射

24、文件<mappers> <!- 注冊orderMapper.xml文件, orderMapper.xml位于me.gacl.mapping這個包下,所以resource寫成me/gacl/mapping/orderMapper.xml-> <mapper resource="me/gacl/mapping/orderMapper.xml"/></mappers>3.2、編寫單元測試代碼復制代碼 1 package me.gacl.test; 2 3 import me.gacl.domain.Order; 4 import m

25、e.gacl.util.MyBatisUtil; 5 import org.apache.ibatis.session.SqlSession; 6 import org.junit.Test; 7 8 public class Test2 9 10 Test11 public void testGetOrderById()12 SqlSession sqlSession = MyBatisUtil.getSqlSession();13 /*14 * 映射sql的標識字符串,15 * me.gacl.mapping.orderMapper是orderMapper.xml文件中mapper標簽的n

26、amespace屬性的值,16 * getOrderById是select標簽的id屬性值,通過select標簽的id屬性值就可以找到要執(zhí)行的SQL17 */18 String statement = "me.gacl.mapping.orderMapper.getOrderById"/映射sql的標識字符串19 /執(zhí)行查詢操作,將查詢結(jié)果自動封裝成Order對象返回20 Order order = sqlSession.selectOne(statement,1);/查詢orders表中id為1的記錄21 /使用SqlSession執(zhí)行完SQL之后需要關(guān)閉SqlSessi

27、on22 sqlSession.close();23 System.out.println(order);/打印結(jié)果:null,也就是沒有查詢出相應(yīng)的記錄24 25 26 Test27 public void testGetOrderById2()28 SqlSession sqlSession = MyBatisUtil.getSqlSession();29 /*30 * 映射sql的標識字符串,31 * me.gacl.mapping.orderMapper是orderMapper.xml文件中mapper標簽的namespace屬性的值,32 * selectOrder是select標簽

28、的id屬性值,通過select標簽的id屬性值就可以找到要執(zhí)行的SQL33 */34 String statement = "me.gacl.mapping.orderMapper.selectOrder"/映射sql的標識字符串35 /執(zhí)行查詢操作,將查詢結(jié)果自動封裝成Order對象返回36 Order order = sqlSession.selectOne(statement,1);/查詢orders表中id為1的記錄37 /使用SqlSession執(zhí)行完SQL之后需要關(guān)閉SqlSession38 sqlSession.close();39 System.out.println(order);/打印結(jié)果:Order id=1, orderNo=aaaa, price=23.040 41 42 Test43 public void testG

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論