程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 詳解MyBatis的getMapper()接口、resultMap標簽、Alias別號、 盡可能提取sql列、靜態操作

詳解MyBatis的getMapper()接口、resultMap標簽、Alias別號、 盡可能提取sql列、靜態操作

編輯:關於JAVA

詳解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列、靜態操作,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved