Mybatis框架

Posted 挽你何用

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis框架相关的知识,希望对你有一定的参考价值。

对数据库的增删改查:

映射文件...Mapper.xml:

<mapper namespace="TeacherMapper">

<!-- 查询 -->

    <select id="selectTeacher" parameterType="Integer" resultMap="teacherList">
        select t.tno,t.tname,t.tsex,t.tbirthday,t.prof,t.depart from teacher t where t.tno=#{tno}
    </select>
    
<!-- 增添 -->

    <insert id="insertTeacher" parameterType="tea" useGeneratedKeys="true" keyProperty="tno" keyColumn="TNO">
        insert into teacher values(#{tno}, #{tname}, #{tsex}, #{tbirthday}, #{prof}, #{depart})
    </insert>

<!-- 修改 -->

    <update id="updateTeacher" parameterType="Map">
        update teacher t set t.tsex=#{teatsex},t.prof=#{teaprof} 
        where t.tno=#{teatno}
    </update>

<!-- 删除 -->

    <delete id="deleteTeacher" parameterType="Integer">
           delete teacher t Where t.tno=#{tno};
    </delete>


</mapper>

java文件...Test.java:

 

    public void test() {
        //查询
//        Teacher s = ss.selectOne("TeacherMapper.selectTeacher", 831);
//        System.out.println(s);
        
        //添加
//        Teacher t = new Teacher(843, "刘毅", "男", new Date(), "副教授", "计算机系");
//        int a = ss.insert("TeacherMapper.insertTeacher", t);
//        System.out.println(a);
//        System.out.println(t.getTno());
        
        //修改
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("teatno", 804);
        map.put("teaprof", "教授");
        map.put("teadepart", "计算机系");
        int c = ss.update("TeacherMapper.updateTeacher", map);
        System.out.println(c); 
        
        //删除
//        Teacher n = ss.selectOne("TeacherMapper.selectTeacher", 831);
//        int i = ss.delete("TeacherMapper.deleteTeacher", n);
    }

}

 

一对一,一对多的查询:

一对一查询:(映射文件)

   <!-- 对象及联 -->
<!--   <resultMap type="Employee" id="empList">
           <id property="ids" column="IDS" />
           <result property="ename" column="ENAME" />
           <result property="esex" column="ESEX" />
           <result property="birthday" column="BIRTHDAY" />
           <result property="address" column="ADDRESS" />
           <result property="dept.id" column="ID" />
           <result property="dept.dname" column="DNAME" />
           <result property="dept.createtime" column="CREATETIME" />
     </resultMap>     -->       
     <!-- 关联 -->
<!--     <resultMap type="Employee" id="empList2">
           <id property="ids" column="IDS" />
           <result property="ename" column="ENAME" />
           <result property="esex" column="ESEX" />
           <result property="birthday" column="BIRTHDAY" />
           <result property="address" column="ADDRESS" />
           <association property="dept" resultMap="deptList"></association>
     </resultMap>    
     <resultMap type="dept" id="deptList">
           <result property="id" column="ID" />
           <result property="dname" column="DNAME" />
           <result property="createtime" column="CREATETIME" />
     </resultMap>     --> 
     
     <!-- 关联查询 -->
       
     <resultMap type="Employee" id="empList3">
           <association property="dept" column="DEPTID"     
           select="com.hanqi.maya.mapper.DeptMapper.selectDeptById" /> 
     </resultMap>     
     
     <select id="selectAllEmployee" resultMap="empList3">
          select * from employee 
     </select>

一对多:(映射文件)

 

     <resultMap type="Dept" id="deptList">
           <id property="id" column="ID"></id> <!-- 不加它取出的ID主键为空 -->
           <collection property="employees" column="ID" 
           select="com.hanqi.maya.mapper.EmployeeMapper.selectEmpsByDeptid"></collection>    
     </resultMap>
      
     <select id="selectDeptById" parameterType="Integer" resultMap="deptList">
           select * from dept t where t.id=#{id}
     </select>

 

动态SQL语句:

映射文件...Mapper.xml:

 

<mapper namespace="com.hanqi.maya.mapper.EmployeeMapper">
     
     <!-- 使用Map参数查询 -->
     <select id="selectEmpByMapParam" parameterType="Map" resultType="Employee">
           select * from employee e
           <if test="sex!=null">
               where e.esex=#{sex}
           </if>
     </select>
    
     <!-- 使用多个参数查询 -->
     <select id="selectEmpByMultipleParam" resultType="Employee">
          select * from employee e where e.ename like #{param1} and e.esex like #{param2}
     </select>
     
     <!-- 以实体类作为参数 -->
     <select id="selectEmpByModelParam" parameterType="Employee" resultType="Employee">
          select * from employee e where 1=1
          <if test="ename!=null">
               and e.ename like #{ename}
          </if>
          <if test="esex!=null">
               and e.esex like #{esex}
          </if>
     </select>
     
     <!-- <choose><when> 分支标签, 只判断其中一个值 -->
     <select id="selectEmpByChoose" parameterType="Map" resultType="Employee">
          select * from employee e where 1=1
          <choose>
              <when test="ename!=null">
                   and e.ename like #{ename}
              </when>
              <when test="esex!=null">
                   and e.esex like #{esex}
              </when>
              <otherwise>
                   and e.address = "山东淄博"
              </otherwise> 
          </choose>
     </select>
     
     <!-- where标签 -->
     <select id="selectEmpByWhere"  parameterType="Map" resultType="Employee">
          select * from employee e where 1=1
          <if test="ename!=null">
                and e.ename like #{ename}
          </if>
          <if test="address!=null">
                and e.address like #{address}
          </if>
     </select>
     
     <!-- Trim标签 -->
     <select id="selectEmpByTrim" resultType="Employee">        
        select * from Employee e
        <trim prefix="where" prefixOverrides="and|or">
            <if test="name!=null">
                and e.ename like #{name}
            </if>
            <if test="address!=null">
                and e.address like #{address}
            </if>
        </trim>
    </select>
    
    <!-- Foreach标签  方式一-->
    <select id="selectEmpByForeach1" resultType="Employee">
        select * from employee e where e.ids in 
        <foreach collection="idsList" item="mids" open="(" close=")" separator=",">
            #{mids}
        </foreach>
    </select>
    <!-- Foreach标签  方式二-->
    <select id="selectEmpByForeach2" resultType="Employee">
        select * from employee e where e.ids in 
        <foreach collection="list" item="mdis" open="(" close=")" separator=",">
            #{mdis}
        </foreach>
    </select>
    <!-- Foreach标签  方式三-->
    <select id="selectEmpByForeach3" resultType="Employee">
        select * from employee e where e.ids in 
        <foreach collection="array" item="mids" open="(" close=")" separator="," index="index">
            #{mids}
        </foreach>
    </select>
    
    <!-- set标签 -->
    <update id="updateEmpBySet" parameterType="Employee">
        update employee e
        <set>
            <if test="ename!=null">
                e.ename=#{ename},
            </if>
            <if test="esex!=null">
                e.esex=#{esex},
            </if>
            <if test="birthday!=null">
                e.birthday=#{birthday},
            </if>
            <if test="address!=null">
                e.address=#{address},
            </if>
        </set>
        where e.ids=#{ids}
    </update>
    
    <!-- Sql标签 -->
    <sql id="pageSqlPre">
        select * from (
    </sql>
    <sql id="pageSqlSuf">
        where rownum <![CDATA[<=]]> 9) r where r.rnum>6
    </sql>
    <select id="selectEmployeeBySql" resultType="Employee">
        <include refid="pageSqlPre"></include>
        select e.*, rownum rnum from employee e
        <include refid="pageSqlSuf"></include>
    </select>
    
    <!-- selectKey标签 -->
     <insert id="insertEmployee" parameterType="Employee">
           <selectKey keyProperty="ids" order="BEFORE" resultType="int">
               select test.nextval from dual
           </selectKey>
           insert into Employee
           values(#{ids},#{ename},#{esex},#{birthday},#{address},null)
     </insert>

 

接口...Mapper.xml:

 

public interface EmployeeMapper {
    //使用Map参数查询
    List<Employee> selectEmpByMapParam(Map<String,Object> map);
    //使用多个参数查询
    List<Employee> selectEmpByMultipleParam(String name,String sex);
    //以实体类为参数
    List<Employee> selectEmpByModelParam(Employee emp);
    // <choose><when> 分支标签, 只判断其中一个值
    List<Employee> selectEmpByChoose(Map<String,Object> map);
    //where标签
    List<Employee> selectEmpByWhere(Map<String,Object> map);
    //Trim标签
    List<Employee> selectEmpByTrim(Map<String,Object> map);
    //Foreach标签 方式一
    List<Employee> selectEmpByForeach1(Map<String,Object> map);
    //Foreach标签 方式二
    List<Employee> selectEmpByForeach2(List<Integer> idsList);
    //Foreach标签 方式三
    List<Employee> selectEmpByForeach3(Integer[] idsList);
    //set标签
    int updateEmpBySet(Employee emp);
    //Sql标签
    List<Employee> selectEmployeeBySql();
    //selectKey标签
    int insertEmployee(Employee emp);
   
}

 

测试类:

 

    @Test
    public void test() {
        //使用Map参数查询
//        Map<String,Object> mapParam = new HashMap<String,Object>();
//        mapParam.put("sex", "男");
//        List<Employee> elist = em.selectEmpByMapParam(mapParam);
        
        //使用多个参数查询
//        List<Employee> elist = em.selectEmpByMultipleParam("%小%", "男");
        
        //以实体类为参数
//        Employee emp = new Employee("%小%","男");
//        List<Employee> elist = em.selectEmpByModelParam(emp);
        
        // <choose><when> 分支标签, 只判断其中一个值
//        Map<String,Object> mapParam = new HashMap<String,Object>();
//        mapParam.put("ename", "%小%");
//        mapParam.put("esex", "男");
//        List<Employee> elist = em.selectEmpByChoose(mapParam);
        
        //where标签
//        Map<String,Object> mapParam = new HashMap<String,Object>();
//        mapParam.put("ename", "%小%");
//        mapParam.put("address", "%淄博");
//        List<Employee> elist = em.selectEmpByWhere(mapParam);
        
        //Trim标签
//        Map<String,Object> mapParam = new HashMap<String,Object>();
//        mapParam.put("ename", "%小%");
//        mapParam.put("address", "%淄博");
//        List<Employee> elist = em.selectEmpByTrim(mapParam);
        
        //Foreach标签 方法一
//        Map<String,Object> mapParam = new HashMap<String,Object>();
//        List<Integer> idsList = new ArrayList<Integer>();
//        idsList.add(3);
//        idsList.add(6);
//        idsList.add(7);
//        mapParam.put("idsList", idsList);
//        List<Employee> elist = em.selectEmpByTrim(mapParam);
        
        //Foreach标签 方法二
//        Map<String,Object> mapParam = new HashMap<String,Object>();
//         List<Integer> idsList = new ArrayList<Integer>();
//        idsList.add(3);
//        idsList.add(6);
//        idsList.add(7);
//        List<Employee> elist = em.selectEmpByForeach2(idsList);
        
        //Foreach标签 方法三
//        Map<String,Object> mapParam = new HashMap<String,Object>();
//        Integer[] idsList = {3,6,7};
//        List<Employee> elist = em.selectEmpByForeach3(idsList);
        
        //set标签
//        Employee emp = new Employee(4, "李丽", "女", new Date(), "山东淄博7", null);
//        int a = em.updateEmpBySet(emp);
//        System.out.println(a);
        
        //Sql标签
//        List<Employee> elist = em.selectEmployeeBySql();
        
        //selectkey标签
        
        Employee emp = new Employee(4, "李丽1111", "", new Date(), "山东淄博7", null);
        int a = em.updateEmpBySet(emp);
        System.out.println(a);

        
//        for(Employee e : elist) {
//            System.out.println(e);
//        }

 

以上是关于Mybatis框架的主要内容,如果未能解决你的问题,请参考以下文章

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段

Mybatis框架第二篇

markdown [mybatis参考]关于mybatis #mybatis的一些片段

mybatis第二天

MyBatis动态SQL

mybatis学习(39):动态sql片段