詳解MyBatis的getMapper()接口、resultMap標(biāo)簽、Alias別名、 盡量提取sql列、動(dòng)態(tài)操作
一、getMapper()接口
解析:getMapper()接口 IDept.class定義一個(gè)接口,
掛載一個(gè)沒(méi)有實(shí)現(xiàn)的方法,特殊之處,借樓任何方法,必須和小配置中id屬性是一致的
通過(guò)代理:生成接口的實(shí)現(xiàn)類名稱,在MyBatis底層維護(hù)名稱$$Dept_abc,selectDeptByNo()
相當(dāng)于是一個(gè)強(qiáng)類型
Eg
第一步:在cn.happy.dao中定義一個(gè)接口
package cn.happy.dao; import java.util.List; import cn.happy.entity.Dept; public interface IDeptDao { //查看全部---------getAllDept要和小配置里面的id一樣 public List<Dept> getAllDept(); }
第二步:IDept.xml配置小配置
解析:select里面的Id屬性要和接口里面的接口方法名一樣;mapper的namespace屬性包名是cn.happy.dao.IDeptDao接口
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.happy.dao.IDeptDao"> <select id="getAllDept" resultType="cn.happy.entity.Dept"> select * from Dept </select> </mapper>
第三步:測(cè)試類
解析:查看全部信息有兩種方法
1)session.selectList("cn.happy.dao.IDeptDao.getAllDept");-------實(shí)體類.小配置里面的Id名稱============字符串
2)IDeptDao mapper = session.getMapper(IDeptDao.class);相當(dāng)于實(shí)現(xiàn)類,getMapper是一個(gè)強(qiáng)類型
// 01查看全部信息getMapper()接口類的方法名要和小配置的id一樣 @Test public void testSelectAll() { SqlSession session = factory.openSession(); //用的是弱類型========實(shí)體類.小配置里面的Id名稱============字符串 /*List<Dept> list = session.selectList("cn.happy.dao.IDeptDao.getAllDept"); for (Dept dept : list) { System.out.println(dept.getDeptName()); }*/ // 用getMapper方法HIbernate幫我們?cè)趦?nèi)存中代理出一個(gè)接口的實(shí)現(xiàn)類======相當(dāng)于強(qiáng)類型 //mapper是一個(gè)實(shí)現(xiàn)類對(duì)象 IDeptDao mapper = session.getMapper(IDeptDao.class); List<Dept> list = mapper.getAllDept(); for (Dept dept : list) { System.out.println(dept.getDeptName()); }
第四步:全文統(tǒng)一用一個(gè)大配置
<?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> <!-- Alias別名 小配置里面的type的屬性值改成別名--> <typeAliases> <typeAlias type="cn.resultMap.enetity.Emp" alias="emp"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="oracle.jdbc.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" /> <property name="username" value="sa" /> <property name="password" value="1" /> </dataSource> </environment> </environments> <!--映射文件:描述某個(gè)實(shí)體和數(shù)據(jù)庫(kù)表的對(duì)應(yīng)關(guān)系 --> <mappers> <mapper resource="cn/resultMap/enetity/Emp.xml" /> </mappers> </configuration>
二、resultMap標(biāo)簽
解析:使用的場(chǎng)景是當(dāng)實(shí)體類的屬性與數(shù)據(jù)庫(kù)不匹配的時(shí)候需要用到resultMap實(shí)體類和數(shù)據(jù)庫(kù)的屬性必須一致。(之前用的是實(shí)體類)
Eg檢索所有員工,以及隸屬部門(mén)
第一步:創(chuàng)建一個(gè)接口
package cn.resultMap.dao; import java.util.List; import cn.resultMap.enetity.Emp; public interface IEmpDao { //檢索所有員工,以及隸屬部門(mén) public List<Emp> getAllEmps(); }
第二步:配置小配置里面的屬性
解析: 員工角度 多的一方,嵌入一的一方的各個(gè)屬性請(qǐng)使用association 是關(guān)聯(lián)(如果去掉association的話就是基礎(chǔ)的resultMap)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.resultMap.dao.IEmpDao"> <resultMap type="cn.resultMap.enetity.Emp" id="empMap"> <id property="empId" column="EMPID"/> <result property="empName" column="EMPNAME"/> <result property="empCity" column="EMPCITY"/> <!-- 員工角度 多的一方,嵌入一的一方的各個(gè)屬性請(qǐng)使用association --> <association property="dept" javaType="cn.resultMap.enetity.Dept"> <result property="deptName" column="DEPTNAME"/> <result property="deptNo" column="DEPTNO"/> </association> </resultMap> <select id="getAllEmps" resultMap="empMap"> select e.*,d.* from Emp e,Dept d where e.deptNo=d.deptNo </select> </mapper>
第三步:測(cè)試類
//resultMap:實(shí)體的屬性名和表的字段名保證一致用resultMap //如果報(bào)NullException查看小配置的映射關(guān)聯(lián)resultMap是否配置 @Test public void testAllEmp(){ SqlSession session=factory.openSession(); IEmpDao mapper = session.getMapper(IEmpDao.class); List<Emp> allEmps = mapper.getAllEmps(); for (Emp emp : allEmps) { System.out.println(emp.getEmpName()+"\t隸屬部門(mén)"+emp.getDept().getDeptName()); } session.close(); }
第四步:在大配置引入小配置
三、提取sql列
解析:Sql標(biāo)簽簡(jiǎn)化代碼量在小配置里面寫(xiě)
<!-- SQl標(biāo)簽的使用 --> <sql id="columns"> d.deptNo,d.deptName </sql> <!-- SQl標(biāo)簽的使用 --> <select id="getAllEmps" resultMap="empMap"> select e.*,<include refid="columns"/>from Emp e,Dept d where e.deptNo=d.deptNo </select>
四、Alias別名
解析:在大配置上寫(xiě),這樣的話在小配置就可以引用別名了
<!-- Alias別名 小配置里面的type的屬性值改成別名--> <typeAliases> <typeAlias type="cn.resultMap.enetity.Emp" alias="emp"/> </typeAliases>
五、動(dòng)態(tài)操作
解析:用于實(shí)現(xiàn)動(dòng)態(tài)SQL的元素主要有:
if choose(when,otherwise) where set
Eg 查看在北京城市的人員
第一步:接口
package cn.resultMap.dao; import java.util.List; import cn.resultMap.enetity.Emp; public interface IEmpDao { //檢索所有員工,以及隸屬部門(mén) public List<Emp> getAllEmps(); }
第二步:小配<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.resultMap.dao.IEmpDao"> <resultMap type="cn.resultMap.enetity.Emp" id="empMap"> <id property="empId" column="EMPID"/> <result property="empName" column="EMPNAME"/> <result property="empCity" column="EMPCITY"/> <!-- 員工角度 多的一方,嵌入一的一方的各個(gè)屬性請(qǐng)使用association --> <association property="dept" javaType="cn.resultMap.enetity.Dept"> <result property="deptName" column="DEPTNAME"/> <result property="deptNo" column="DEPTNO"/> </association> </resultMap> <select id="getAllEmps" resultMap="empMap"> select e.*,d.* from Emp e,Dept d where e.deptNo=d.deptNo </select> <!--查詢動(dòng)態(tài)查詢 --> <select id="testAllEmpBuSelect" parameterType="cn.resultMap.enetity.Emp" resultType="cn.resultMap.enetity.Emp"> select * from Emp <where> <if test="empId!=null"> and empId=#{empId} </if> <if test="empName!=null"> and empName=#{empName} </if> <if test="empCity!=null"> and empCity=#{empCity} </if> </where> </select> </mapper>
第三步:測(cè)試
//動(dòng)態(tài)查詢 @Test public void testSelect(){ SqlSession session=factory.openSession(); Emp emp=new Emp(); //emp.setEmpName("331"); emp.setEmpCity("sh"); List<Emp> list = session.selectList("cn.resultMap.dao.IEmpDao.testAllEmpBuSelect",emp); for (Emp emps : list) { System.out.println(emps.getEmpName()); } session.close(); }
第四步:在大配置引入小配置
Eg 修改部門(mén)信息
第一步:接口
第二步:小配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.resultMap.dao.IDeptDao"> <resultMap type="cn.happy.entity.Dept" id="deptResultMap"> <id property="deptNo" column="deptNo"/> <result property="deptName" column="deptName"/> </resultMap> <select id="getAllDept" resultMap="deptResultMap"> select d.*,e.* from Dept d,Emp e where d.deptNo=e.deptNo and d.deptNo=#{deptNo} </select> <!--修改動(dòng)態(tài)查詢 --> <select id="testUpdate" parameterType="int" resultType="cn.resultMap.enetity.Dept"> update dept <set> <if test="deptNo!=null"> deptNo=#{deptNo}, </if> <if test="deptName!=null"> deptName=#{deptName}, </if> </set> where deptNo=#{deptNo} </select> </mapper>
第三步:測(cè)試
/** * 動(dòng)態(tài)修改 * */ @Test public void testUpdate(){ SqlSession session=factory.openSession(); Dept dept=new Dept(); dept.setDeptName("財(cái)務(wù)部"); dept.setDeptNo(1); int count = session.update("cn.resultMap.dao.IDeptDao.testUpdate",dept); session.commit(); System.out.println(count); session.close(); }
以上所述是小編給大家介紹的詳解MyBatis的getMapper()接口、resultMap標(biāo)簽、Alias別名、 盡量提取sql列、動(dòng)態(tài)操作,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- MyBatis直接執(zhí)行SQL的工具SqlMapper
- 詳解 MapperScannerConfigurer之sqlSessionFactory注入方式
- Mybatis中SqlMapper配置的擴(kuò)展與應(yīng)用詳細(xì)介紹(1)
- 使用XSD校驗(yàn)Mybatis的SqlMapper配置文件的方法(2)
- 使用XSD校驗(yàn)Mybatis的SqlMapper配置文件的方法(1)
- MyBatis MapperProvider MessageFormat拼接批量SQL語(yǔ)句執(zhí)行報(bào)錯(cuò)的原因分析及解決辦法
- Mapper sql語(yǔ)句字段和實(shí)體類屬性名字有什么關(guān)系
相關(guān)文章
SSH框架網(wǎng)上商城項(xiàng)目第25戰(zhàn)之使用java email給用戶發(fā)送郵件
這篇文章主要為大家詳細(xì)介紹了SSH框架網(wǎng)上商城項(xiàng)目第25戰(zhàn)之使用java email給用戶發(fā)送郵件,感興趣的小伙伴們可以參考一下2016-06-06mybatis?mapper.xml中如何根據(jù)數(shù)據(jù)庫(kù)類型選擇對(duì)應(yīng)SQL語(yǔ)句
這篇文章主要介紹了mybatis?mapper.xml中如何根據(jù)數(shù)據(jù)庫(kù)類型選擇對(duì)應(yīng)SQL語(yǔ)句,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01log4j2動(dòng)態(tài)修改日志級(jí)別及拓展性使用詳解
這篇文章主要介紹了log4j2動(dòng)態(tài)修改日志級(jí)別及拓展性使用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11詳解Java項(xiàng)目中讀取properties文件
本篇文章主要介紹了Java項(xiàng)目中讀取properties文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-12-12