詳解MyBatis的getMapper()接口、resultMap標簽、Alias別號、 盡可能提取sql列、靜態操作。本站提示廣大學習愛好者:(詳解MyBatis的getMapper()接口、resultMap標簽、Alias別號、 盡可能提取sql列、靜態操作)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解MyBatis的getMapper()接口、resultMap標簽、Alias別號、 盡可能提取sql列、靜態操作正文
1、getMapper()接口
解析:getMapper()接口 IDept.class界說一個接口,
掛載一個沒有完成的辦法,特別的地方,借樓任何辦法,必需和小設置裝備擺設中id屬性是分歧的
經由過程署理:生成接口的完成類稱號,在MyBatis底層保護稱號$$Dept_abc,selectDeptByNo()
相當因而一個強類型
Eg
第一步:在cn.happy.dao中界說一個接口
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>
第三步:測試類
解析:檢查全體信息有兩種辦法
1)session.selectList("cn.happy.dao.IDeptDao.getAllDept");-------實體類.小設置裝備擺設外面的Id稱號============字符串
2)IDeptDao mapper = session.getMapper(IDeptDao.class);相當於完成類,getMapper是一個強類型
// 01檢查全體信息getMapper()接口類的辦法名要和小設置裝備擺設的id一樣 @Test public void testSelectAll() { SqlSession session = factory.openSession(); //用的是弱類型========實體類.小設置裝備擺設外面的Id稱號============字符串 /*List<Dept> list = session.selectList("cn.happy.dao.IDeptDao.getAllDept"); for (Dept dept : list) { System.out.println(dept.getDeptName()); }*/ // 用getMapper辦法HIbernate幫我們在內存中署理出一個接口的完成類======相當於強類型 //mapper是一個完成類對象 IDeptDao mapper = session.getMapper(IDeptDao.class); List<Dept> list = mapper.getAllDept(); for (Dept dept : list) { System.out.println(dept.getDeptName()); }
第四步:全文同一用一個年夜設置裝備擺設
<?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> <!--映照文件:描寫某個實體和數據庫表的對應關系 --> <mappers> <mapper resource="cn/resultMap/enetity/Emp.xml" /> </mappers> </configuration>
2、resultMap標簽
解析:應用的場景是當實體類的屬性與數據庫不婚配的時刻須要用到resultMap實體類和數據庫的屬性必需分歧。(之前用的是實體類)
Eg檢索一切員工,和附屬部分
第一步:創立一個接口
package cn.resultMap.dao; import java.util.List; import cn.resultMap.enetity.Emp; public interface IEmpDao { //檢索一切員工,和附屬部分 public List<Emp> getAllEmps(); }
第二步:設置裝備擺設小設置裝備擺設外面的屬性
解析: 員工角度 多的一方,嵌入一的一方的各個屬性請應用association 是聯系關系(假如去失落association的話就是基本的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"/> <!-- 員工角度 多的一方,嵌入一的一方的各個屬性請應用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>
第三步:測試類
//resultMap:實體的屬性名和表的字段名包管分歧用resultMap //假如報NullException檢查小設置裝備擺設的映照聯系關系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附屬部分"+emp.getDept().getDeptName()); } session.close(); }
第四步:在年夜設置裝備擺設引入小設置裝備擺設
3、提取sql列
解析:Sql標簽簡化代碼量在小設置裝備擺設外面寫
<!-- SQl標簽的應用 --> <sql id="columns"> d.deptNo,d.deptName </sql> <!-- SQl標簽的應用 --> <select id="getAllEmps" resultMap="empMap"> select e.*,<include refid="columns"/>from Emp e,Dept d where e.deptNo=d.deptNo </select>
4、Alias別號
解析:在年夜設置裝備擺設上寫,如許的話在小設置裝備擺設便可以援用別號了
<!-- Alias別號 小設置裝備擺設外面的type的屬性值改成別號--> <typeAliases> <typeAlias type="cn.resultMap.enetity.Emp" alias="emp"/> </typeAliases>
5、靜態操作
解析:用於完成靜態SQL的元素重要有:
if choose(when,otherwise) where set
Eg 檢查在北京城市的人員
第一步:接口
package cn.resultMap.dao; import java.util.List; import cn.resultMap.enetity.Emp; public interface IEmpDao { //檢索一切員工,和附屬部分 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"/> <!-- 員工角度 多的一方,嵌入一的一方的各個屬性請應用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> <!--查詢靜態查詢 --> <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>
第三步:測試
//靜態查詢 @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 修正部分信息
第一步:接口
第二步:小設置裝備擺設
<?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> <!--修正靜態查詢 --> <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>
第三步:測試
/** * 靜態修正 * */ @Test public void testUpdate(){ SqlSession session=factory.openSession(); Dept dept=new Dept(); dept.setDeptName("財政部"); dept.setDeptNo(1); int count = session.update("cn.resultMap.dao.IDeptDao.testUpdate",dept); session.commit(); System.out.println(count); session.close(); }
以上所述是小編給年夜家引見的詳解MyBatis的getMapper()接口、resultMap標簽、Alias別號、 盡可能提取sql列、靜態操作,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!