MyBatis Mapper Demo
生活随笔
收集整理的這篇文章主要介紹了
MyBatis Mapper Demo
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<?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="com.critc.teachDemo.dao.TeachDemoDao"><!--緩存策略與commonDao一致,可配置多種緩存策略針對不同的業務進行選擇--><!-- 引用緩存:namespace:指定和哪個名稱空間下的緩存一樣 --><cache-ref namespace="com.critc.plat.common.dao.baseCommonDao"/><!--由于Emp字段與數據庫中列名并不完全匹配,使用resultMap的方式進行指定,真正開發的時候將這部分寫在文件開始處--><resultMap type="com.critc.teachDemo.model.Emp" id="EmpT1"><id column="empno" property="empNo"/><result column="ename" property="empName"/><result column="deptno" property="deptNo"/></resultMap><resultMap type="com.critc.teachDemo.model.Emp" id="EmpT2"><id column="empno" property="empNo"/><result column="ename" property="empName"/><result column="dname" property="deptName"/></resultMap><!--一個實體類中包含另一個實體類,級聯方式定義resultMap--><resultMap type="com.critc.teachDemo.model.EmpPlus" id="EmpPlus"><id column="empno" property="empNo"/><result column="ename" property="empName"/><result column="deptno" property="deptNo"/><!-- association定義關聯對象的封裝規則select:表明當前屬性是調用select指定的方法查出的結果,也可以指定其他mapper文件中的方法,我這里寫的是當前mapper文件中的方法因為使用接口式編程所以dao層接口中方法與mapper中的方法是動態代理的關系,所以使用其他mapper中的方法即指定其他dao層接口中的方法column:指定將哪一列的值傳給這個方法流程:使用select指定的方法(傳入column指定的這列參數的值)查出對象,并封裝給property指定的屬性--><association property="deptPojo"select="getDeptById"column="deptno"></association></resultMap><!--一個實體類中包含另一個實體類,非級聯方式定義resultMap--><resultMap type="com.critc.teachDemo.model.EmpPlus" id="EmpPlus2"><id column="empno" property="empNo"/><result column="ename" property="empName"/><result column="deptno" property="deptNo"/><result column="deptPojo_deptNo" property="com.critc.teachDemo.model.Dept.deptNo"/><result column="deptPojo_dName" property="com.critc.teachDemo.model.Dept.dName"/></resultMap><!--一個實體類中有一個相關聯一個集合--><!--嵌套結果集的方式,使用collection標簽定義關聯的集合類型的屬性封裝規則 --><resultMap type="com.critc.teachDemo.model.DeptPlus" id="DeptPlus"><id column="deptno" property="deptNo"/><result column="dname" property="dName"/><!--collection定義關聯集合類型的屬性的封裝規則ofType:指定集合里面元素的類型--><collection property="emps" ofType="com.critc.teachDemo.model.Emp"><!-- 定義這個集合中元素的封裝規則 --><id column="empno" property="empNo"/><result column="ename" property="empName"/></collection></resultMap><!--使用SQL標簽抽取sql語句的公共部分抽取可重用的sql片段。方便后面引用1、sql抽取:經常將要查詢的列名,或者插入用的列名抽取出來方便引用2、include來引用已經抽取的sql:3、include還可以自定義一些property,sql標簽內部就能使用自定義的屬性include-property:取值的正確方式${prop},#{不能使用這種方式}--><sql id="selectEmp">select empno empno,ename empName,deptno deptno from emp</sql><sql id="addEmp">insert into emp(empno,ename) values</sql><!--namespace:名稱空間;指定為接口的全類名id:唯一標識resultType:返回值類型--><select id="getBaseInfo" resultType="com.critc.teachDemo.model.Emp">select ename empName from emp where empno='7369'</select><!-- #{id}:從傳遞過來的參數中取出id值--><!--當是單個參數時--><!--注意這里指定的是resultMap--><select id="getEmpByNo" resultMap="EmpT1"><include refid="selectEmp"></include>where empno=#{id}</select><!--返回值是一個集合時--><select id="getNewEmpList" resultMap="EmpT1">select * from emp </select><!--當是多個參數且參數不為對象時--><select id="getEmpByNoAndName" resultMap="EmpT1">select * from emp<!--注意where標簽,正式開發過程中where條件全使用where標簽進行包裹--><where>empno=#{empNo} and ename = #{empName}</where></select><!--使用對象傳入多個參數,同時返回一個集合--><!--當是多個參數且參數不為對象時--><select id="getEmpList" resultMap="EmpT1">select * from emp<!--注意where標簽,正式開發過程中where條件全使用where標簽進行包裹--><where><!-- test:判斷表達式(OGNL)從參數中取值進行判斷遇見特殊符號應該去寫轉義字符:&&:--><if test="empNo!=null">empNo=#{empNo} and</if>ename like concat(concat('%',#{empName}),'%')</where></select><!--傳入一個集合,實例in查詢--><select id="getEmpListByIn" resultMap="EmpT1"><include refid="selectEmp"></include><where><!--collection:指定要遍歷的集合:list類型的參數會特殊處理封裝在map中,map的key就叫listitem:將當前遍歷出的元素賦值給指定的變量separator:每個元素之間的分隔符open:遍歷出所有結果拼接一個開始的字符close:遍歷出所有結果拼接一個結束的字符index:索引。遍歷list的時候是index就是索引,item就是當前值#{變量名}就能取出變量的值也就是當前遍歷出的元素--><foreach collection="ulist" item="emp" separator=","open=" empNo in(" close=")">#{emp.empNo}</foreach></where></select><!--一個實體類中包含另一個實體類,級聯方式--><select id="getEmpPlus" resultMap="EmpPlus">select empno empno,ename empName,emp.deptno deptno from emp<trim prefix="where" suffixOverrides="and"><if test="empNo!=null">empNo=#{empNo} and</if><if test="empName!=null">ename=#{empName} and</if></trim></select><select id="getDeptById" resultType="com.critc.teachDemo.model.Dept">select deptno,dname from dept where deptNo=#{deptno}</select><!--一個實體類中包含另一個實體類,非級聯方式--><select id="getEmpPlus2" resultMap="EmpPlus2">select empno empno,ename empName,emp.deptno deptno,dept.deptno deptPojo_deptNo,dept.dname deptPojo_dname fromemp,dept<trim prefix="where" suffixOverrides="and">emp.deptno=dept.deptno and<if test="empNo!=null">empNo=#{empNo} and</if><if test="empName!=null">ename=#{empName} and</if></trim></select><!--一個實體類中有一個實體集合--><select id="getDeptPlus" resultMap="DeptPlus">SELECT d.deptno deptNo,d.dname dName,e.empno empNo,e.ename empNameFROM dept dLEFT JOIN emp eON d.deptno=e.deptnoWHERE d.deptno=#{deptNo}</select><!-- parameterType:參數類型,可以省略,keyProperty;指定對應的主鍵屬性,也就是mybatis獲取到主鍵值以后,將這個值封裝給javaBean的哪個屬性--><insert id="addEmp" parameterType="com.critc.teachDemo.model.Emp"><include refid="addEmp"></include><trim prefix="(" suffix=")" suffixOverrides=","><if test="empNo!=null">#{empNo},</if><if test="empName!=null">#{empName},</if></trim></insert><!--批量新增,方式1--><!--Oracle中使用begin end包裹SQL語句完成多條SQL執行--><insert id="addEmps"><foreach collection="emps" item="emp" open="begin" close="end;"><include refid="addEmp"></include><trim prefix="(" suffix=")" suffixOverrides=","><if test="emp.empNo!=null">#{emp.empNo},</if><if test="emp.empName!=null">#{emp.empName},</if></trim>;</foreach></insert><!--批量新增,方式2--><insert id="addEmps2">insert into emp(empno,ename)<trim prefix="(" suffix=")"><foreach collection="emps" item="emp" separator="union"open="select empNo,ename from("close=")">select #{emp.empNo} empNo,#{emp.empName} ename from dual</foreach></trim></insert><!--修改一條信息--><update id="updateEmp">update empset ename=#{empName}where empno=#{empNo}</update><!--刪除一條信息--><delete id="deleteEmpByNo">delete from emp where empno=#{empNo}</delete><!--聯表查詢--><!--起好別名就可以不用resltMap直接用resultType指定實體就可以--><select id="getEmpAndDeptInfo" resultMap="EmpT2">select e.empno ,e.ename ,d.dname from emp e,dept dwhere e.deptno=d.deptno and empno=#{empNo}</select><select id="getAllEmps" resultMap="EmpT2">select e.empno ,e.ename ,d.dname from emp e,dept dwhere e.deptno=d.deptno</select><insert id="addTestDate" parameterType="com.critc.teachDemo.model.TestDate" >insert into testdate (onlyYMD,onlyHMS,allType) values (#{onlyYMD,jdbcType=DATE},#{onlyHMS},#{allType}) </insert><select id="getTestDate" resultType="com.critc.teachDemo.model.TestDate">select onlyYMD,onlyHMS,allType from testdate</select></mapper>
?
轉載于:https://www.cnblogs.com/pzx-java/p/8985870.html
總結
以上是生活随笔為你收集整理的MyBatis Mapper Demo的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么我从 npm 到 yarn 再到
- 下一篇: 基于struts2拦截器实现用户操作日志