zoukankan      html  css  js  c++  java
  • mybatis使用全注解的方式案例(包含一对多关系映射)

    前面我写过ssh:ssh(Spring+Spring mvc+hibernate)简单增删改查案例 和ssm:ssm(Spring+Spring mvc+mybatis)的案例,需要了解的可以去看看,今天我写了一下ssm(spring+springmvc+mybatis)全注解的方式又重新写了一遍两表增删改查的案例,其中别的地方都一样,就是有几个文件不一样,
    1.其中:
    mybatis-config.xml中:

    <?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>
    <settings>
         <!-- 打印查询语句 -->
         <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>
    <typeAliases>
      <typeAlias alias="Emp" type="org.entity.Emp"/>
      <typeAlias alias="Dept" type="org.entity.Dept"/>
    </typeAliases>
      <mappers>
        <mapper class="org.dao.IEmpMapper"/>
         <mapper class="org.dao.IDeptMapper"/>
      </mappers>
    </configuration>

    注意看, ,mapper后面是class,不是resource,一定要注意
    2.还有:我们不需要EmpMapper.xml和DeptMapper.xml文件,直接删掉就可以了
    3.修改我们的IEmpMapper接口为:

    package org.dao;
    
    import java.util.List;
    
    import org.apache.ibatis.annotations.Delete;
    import org.apache.ibatis.annotations.Insert;
    import org.apache.ibatis.annotations.One;
    import org.apache.ibatis.annotations.Result;
    import org.apache.ibatis.annotations.Results;
    import org.apache.ibatis.annotations.Select;
    import org.apache.ibatis.annotations.Update;
    import org.entity.Emp;
    
    public interface IEmpMapper {
        //根据编号删除.
        @Delete("delete from emp where eid = #{eid} ")
        int deleteByPrimaryKey(Integer eid);
        //添加
        @Insert("insert into emp (eid, ename, eage,  edate, did) " +
                "values (#{eid,jdbcType=INTEGER}," +
                " #{ename,jdbcType=VARCHAR}, " +
                "#{eage,jdbcType=INTEGER},  " +
                "#{edate,jdbcType=TIMESTAMP}," +
                " #{did,jdbcType=INTEGER})")
        int insert(Emp record);
        //根据编号查询
        @Select("select * from emp where eid = #{eid}")
        @Results({
            @Result(id=true,property="eid",column="eid"),
            @Result(property="ename",column="ename"),
            @Result(property="eage",column="eage"),
            @Result(property="dept",column="did",javaType=org.entity.Dept.class,
            one=@One(select="org.dao.IDeptMapper.selectByPrimaryKey"))
        })
        Emp selectByPrimaryKey(Integer eid);
        //修改
        @Update("pdate emp " +
                " set ename = #{ename,jdbcType=VARCHAR}, " +
                " eage = #{eage,jdbcType=INTEGER}, " +
                " edate = #{edate,jdbcType=TIMESTAMP}, " +
                "  did = #{did,jdbcType=INTEGER} " +
                "where eid = #{eid,jdbcType=INTEGER}")
        int updateByPrimaryKey(Emp record);
        //查询全部
        @Select("select * from emp")
        @Results({
            @Result(id=true,property="eid",column="eid"),
            @Result(property="ename",column="ename"),
            @Result(property="eage",column="eage"),
            @Result(property="dept",column="did",javaType=org.entity.Dept.class,
            one=@One(select="org.dao.IDeptMapper.selectByPrimaryKey"))
        })
        List<Emp> findEmpAll();
    
        //根据部门编号查询员工信息
        @Select("select * from emp where did = #{dids}")
        @Results({
            @Result(id=true,property="eid",column="eid"),
            @Result(property="ename",column="ename"),
            @Result(property="eage",column="eage"),
            @Result(property="dept",column="did",javaType=org.entity.Dept.class,
            one=@One(select="org.dao.IDeptMapper.selectByPrimaryKey"))
        })
        List<Emp> findEmpByDept(int did);
    
    }

    4.修改我们的IDeptMapper接口为:

    package org.dao;
    
    import java.util.List;
    
    import org.apache.ibatis.annotations.Delete;
    import org.apache.ibatis.annotations.Insert;
    import org.apache.ibatis.annotations.Many;
    import org.apache.ibatis.annotations.Result;
    import org.apache.ibatis.annotations.Results;
    import org.apache.ibatis.annotations.Select;
    import org.apache.ibatis.annotations.Update;
    import org.entity.Dept;
    
    public interface IDeptMapper {
        @Delete("delete from dept where id = #{id}")
        int deleteByPrimaryKey(Integer id);
    
        @Insert("insert into dept (id, name, loc )" +
                " values (#{id,jdbcType=INTEGER}, " +
                "#{name,jdbcType=VARCHAR}, " +
                "#{loc,jdbcType=VARCHAR})")
        int insert(Dept record);
    
        @Select("select * from dept where id  = #{id}")
        @Results({
            @Result(id=true,property="id",column="id"),
            @Result(property="name",column="name"),
            @Result(property="loc",column="loc"),
            @Result(property="empList",column="id",javaType=List.class,
            many=@Many(select="org.dao.IEmpMapper.findEmpByDept"))
        })
        Dept selectByPrimaryKey(Integer id);
    
        @Update("update dept " +
                "set name = #{name,jdbcType=VARCHAR}, " +
                " loc = #{loc,jdbcType=VARCHAR} " +
                "where id = #{id,jdbcType=INTEGER}")
        int updateByPrimaryKey(Dept record);
    
        @Select("select * from dept")
        List<Dept> findDeptAll();
    }

    然后就可以正常的主外键关联,包括查询显示,如图:
    显示员工信息

    需要注意的是主外键映射,我总结了以下的方法,大家可以进行看一下:

    
    
    一:
    @Select("select * from dept where id  = #{id}")
        @Results({
            @Result(id=true,property="id",column="id"),
            @Result(property="name",column="name"),
            @Result(property="loc",column="loc"),
            @Result(property="实体类里面的属性",
            column="id",javaType=List.class,
            many=@Many(select="多方的接口.根据一方的编号查询多方的集合"))
        })
        Dept selectByPrimaryKey(Integer id);
    
    
    多:
      //根据编号查询
        @Select("select * from emp where eid = #{eid}")
        @Results({
            @Result(id=true,property="eid",column="eid"),
            @Result(property="ename",column="ename"),
            @Result(property="eage",column="eage"),
             @Result(property="实体中的对象",column="外键列",javaType=一方类.class,
            one=@One(select="一方接口.根据一方编号查询信息"))
        })
        Emp selectByPrimaryKey(Integer eid);
    
    
         //查询全部
        @Select("select * from emp")
        @Results({
            @Result(id=true,property="eid",column="eid"),
            @Result(property="ename",column="ename"),
            @Result(property="eage",column="eage"),
            @Result(property="实体中的对象",column="外键列",javaType=一方类.class,
            one=@One(select="一方接口.根据一方编号查询信息"))
        })
        List<Emp> findEmpAll();
    
        //根据部门编号查询员工信息
        @Select("select * from emp where did = #{dids}")
        @Results({
            @Result(id=true,property="eid",column="eid"),
            @Result(property="ename",column="ename"),
            @Result(property="eage",column="eage"),
            @Result(property="实体中的对象",column="外键列",javaType=一方类.class,
            one=@One(select="一方接口.根据一方编号查询信息"))
        })
        List<Emp> findEmpByDept(int did);

    按照这个方法配置保证阿弥陀佛了!!!
    下面就是源码:
    控制器:
    DeptController
    EmpController
    Dao层:
    IDeptMapper
    IEmpMapper
    DaoImpl层:
    DeptMapperImpl
    EmpMapperImpl
    实体类层:
    Dept
    Emp
    Service层:
    IDeptService
    IEmpService
    ServiceImpl层:
    DeptServiceImpl
    EmpServiceImpl
    配置文件:
    applicationContext-servlet.xml
    applicationContext.xml
    mybatis-config.xml
    web.xml
    前台页面:
    index.jsp
    saveDept.jsp
    saveEmp.jsp
    showDept.jsp
    showEmp.jsp
    updateDept.jsp
    updateEmp.jsp

    微信公众号

  • 相关阅读:
    BZOJ1085 SCOI2005 骑士精神【IDA* 启发式迭代加深】
    BZOJ1690 Usaco2007 Dec 奶牛的旅行 【01分数规划】
    SPOJ104 Highways 【矩阵树定理】
    BZOJ1597土地购买 【斜率优化DP】
    【模板】NTT
    【模板】FFT
    BZOJ3196 Tyvj1730 二逼平衡树 【树套树】 【线段树套treap】
    POJ3696 The Windy's 【网络流】
    POJ2728 Desert King 【最优比率生成树】
    BZOJ5298 CQOI2018 交错序列 【DP+矩阵快速幂优化】*
  • 原文地址:https://www.cnblogs.com/a1111/p/12816066.html
Copyright © 2011-2022 走看看