一、getMapper()接口
解析:getMapper()接口 IDept.class定義一個接口,
掛載一個沒有實現(xiàn)的方法,特殊之處,借樓任何方法,必須和小配置中id屬性是一致的
通過代理:生成接口的實現(xiàn)類名稱,在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 mapperPUBLIC "-//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);相當于實現(xiàn)類,getMapper是一個強類型
// 01查看全部信息getMapper()接口類的方法名要和小配置的id一樣@Testpublic 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幫我們在內(nèi)存中代理出一個接口的實現(xiàn)類======相當于強類型//mapper是一個實現(xiàn)類對象IDeptDao mapper = session.getMapper(IDeptDao.class);List<Dept> list = mapper.getAllDept();for (Dept dept : list) {System.out.println(dept.getDeptName());} 第四步:全文統(tǒng)一用一個大配置
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//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><!--映射文件:描述某個實體和數(shù)據(jù)庫表的對應關(guān)系 --><mappers><mapper resource="cn/resultMap/enetity/Emp.xml" /></mappers></configuration>
二、resultMap標簽
解析:使用的場景是當實體類的屬性與數(shù)據(jù)庫不匹配的時候需要用到resultMap實體類和數(shù)據(jù)庫的屬性必須一致。(之前用的是實體類)
Eg檢索所有員工,以及隸屬部門
第一步:創(chuàng)建一個接口
package cn.resultMap.dao;import java.util.List;import cn.resultMap.enetity.Emp;public interface IEmpDao {//檢索所有員工,以及隸屬部門public List<Emp> getAllEmps();} 第二步:配置小配置里面的屬性
解析: 員工角度 多的一方,嵌入一的一方的各個屬性請使用association 是關(guān)聯(lián)(如果去掉association的話就是基礎的resultMap)
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//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 dwhere e.deptNo=d.deptNo</select></mapper>
第三步:測試類
//resultMap:實體的屬性名和表的字段名保證一致用resultMap//如果報NullException查看小配置的映射關(guān)聯(lián)resultMap是否配置@Testpublic 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();}第四步:在大配置引入小配置
三、提取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 dwhere e.deptNo=d.deptNo</select>
四、Alias別名
解析:在大配置上寫,這樣的話在小配置就可以引用別名了
<!-- Alias別名 小配置里面的type的屬性值改成別名--><typeAliases><typeAlias type="cn.resultMap.enetity.Emp" alias="emp"/></typeAliases>
五、動態(tài)操作
解析:用于實現(xiàn)動態(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 {//檢索所有員工,以及隸屬部門public List<Emp> getAllEmps();}第二步:小配<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//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 dwhere e.deptNo=d.deptNo</select><!--查詢動態(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>第三步:測試
//動態(tài)查詢@Testpublic 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 mapperPUBLIC "-//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 ewhere d.deptNo=e.deptNo and d.deptNo=#{deptNo}</select><!--修改動態(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> 第三步:測試
/*** 動態(tài)修改* */@Testpublic 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列、動態(tài)操作,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網(wǎng)網(wǎng)站的支持!
新聞熱點
疑難解答