【Mybatis从入门到实战教程】第十章 Mybatis 注解开发

十、Mybatis 注解开发

10.1 什么是注解开发

    Mybatis最初配置信息是基于XML,映射语句(SQL)也是定义在 XML 中的。而到了 MyBatis 3提供了新的基于注解的配置。使用注解开发方式,可以减少编写 Mapper 映射文件。

10.2 常用注解说明

注解描述
@Insert配置新增
@Update配置更新
@Delete配置删除
@Select配置查询
@Options配置主键返回,关闭二级缓存等功能
@Result结果集封装
@Results与@Result 一起使用,封装多个结果集
@ResultMap引用@Results 定义的封装
@One一对一结果集封装
@Many一对多结果集封装
@SelectProvider动态 SQL 映射
@CacheNamespace二级缓存
@Param输入多参数
@Mapper把mapper这个DAO交給Spring管理,整合用到

10.3 实体类

10.3.1 部门类

public class Dept {

    private Integer deptno;
    private String dname;
    private String loc;

    public Integer getDeptno() {
        return deptno;
    }

    public void setDeptno(Integer deptno) {
        this.deptno = deptno;
    }

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }

    public String getLoc() {
        return loc;
    }

    public void setLoc(String loc) {
        this.loc = loc;
    }

    @Override
    public String toString() {
        return "Dept{" +
                "deptno=" + deptno +
                ", dname='" + dname + '\'' +
                ", loc='" + loc + '\'' +
                '}';
    }
}

10.3.2 员工类

public class Emp {

    private Integer empno;
    private String ename;
    private String job;
    private Integer mgr;
    private Date hiredate;
    private Double sal;
    private Double comm;
    private Integer deptno;
    private Dept dept;

    public Integer getEmpno() {
        return empno;
    }

    public void setEmpno(Integer empno) {
        this.empno = empno;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public Integer getMgr() {
        return mgr;
    }

    public void setMgr(Integer mgr) {
        this.mgr = mgr;
    }

    public Date getHiredate() {
        return hiredate;
    }

    public void setHiredate(Date hiredate) {
        this.hiredate = hiredate;
    }

    public Double getSal() {
        return sal;
    }

    public void setSal(Double sal) {
        this.sal = sal;
    }

    public Double getComm() {
        return comm;
    }

    public void setComm(Double comm) {
        this.comm = comm;
    }

    public Integer getDeptno() {
        return deptno;
    }

    public void setDeptno(Integer deptno) {
        this.deptno = deptno;
    }

    public Dept getDept() {
        return dept;
    }

    public void setDept(Dept dept) {
        this.dept = dept;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "empno=" + empno +
                ", ename='" + ename + '\'' +
                ", job='" + job + '\'' +
                ", mgr=" + mgr +
                ", hiredate=" + hiredate +
                ", sal=" + sal +
                ", comm=" + comm +
                ", deptno=" + deptno +
                ", dept=" + dept +
                '}';
    }
}

10.4 单表增删改差

10.4.1 mapper接口

public interface DeptMapper {
    @Select("select deptno,dname,loc from dept")
    List<Dept> select();

    @Select("select deptno,dname,loc from dept where deptno = #{deptno}")
    Dept selectById(Integer deptno);

    @Insert("insert into dept(dname,loc) values (#{dname}, #{loc})")
    @Options(useGeneratedKeys = true, keyProperty = "deptno", keyColumn = "deptno")
    void insert(Dept dept);

    @Update("update dept set dname = #{dname},loc=#{loc} where deptno = #{deptno}")
    void update(Dept dept);

    @Delete("delete from dept where deptno=#{deptno}")
    void delete(Integer deptno);
}

10.4.2 测试

public class AnnotationTest {

    @Test
    public void testSelect() {
        SqlSession sqlSession = MybatisUtil.getSession();

        DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
        List<Dept> list = deptMapper.select();
        for (Dept dept : list) {
            System.out.println(dept);
        }

        sqlSession.close();
    }

    @Test
    public void testSelectById() {
        SqlSession sqlSession = MybatisUtil.getSession();

        DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
        Dept dept = deptMapper.selectById(10);
        System.out.println(dept);

        sqlSession.close();
    }

    @Test
    public void testInsert() {
        SqlSession sqlSession = MybatisUtil.getSession();

        DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
        Dept dept = new Dept();
        dept.setDname("aa");
        dept.setLoc("aa");
        deptMapper.insert(dept);
        sqlSession.commit();
        System.out.println("主键:" + dept.getDeptno());

        sqlSession.close();
    }

    @Test
    public void testUpdate() {
        SqlSession sqlSession = MybatisUtil.getSession();

        DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
        Dept dept = new Dept();
        dept.setDeptno(41);
        dept.setDname("bb");
        dept.setLoc("bb");
        deptMapper.update(dept);
        sqlSession.commit();

        sqlSession.close();
    }

    @Test
    public void testDelete() {
        SqlSession sqlSession = MybatisUtil.getSession();

        DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
        deptMapper.delete(41);
        sqlSession.commit();

        sqlSession.close();
    }
}

10.5 一对一关系映射

10.5.1 mapper接口

public interface EmpMapper {
    /*
     * 手动映射resultMap标签
     * @Results + @Result注解替代
     * @Results = resultMap标签
     * @Result = resultMap标签的子标签id和result
     */
    @Select("select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp")
    @Results(id = "selectResultMap",
             value = {
                 @Result(id = true, column = "empno", property = "empno"),
                 @Result(column = "ename", property = "ename"),
                 @Result(column = "job", property = "job"),
                 @Result(column = "mgr", property = "mgr"),
                 @Result(column = "hiredate", property = "hiredate"),
                 @Result(column = "sal", property = "sal"),
                 @Result(column = "comm", property = "comm"),
                 @Result(column = "deptno", property = "deptno"),
                 @Result(column = "deptno", property = "dept", javaType = Dept.class,
                         one = @One(select = "com.newcapec.dao.DeptDao.selectById", fetchType = FetchType.LAZY))
             })
    List<Emp> select();

    @Select("select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp where empno=#{empno}")
    @ResultMap("selectResultMap")
    Emp selectById(Integer empno);
}

10.5.2 测试

@Test
public void testSelectEmp() {
    SqlSession sqlSession = MybatisUtil.getSession();

    EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);

    List<Emp> empList = empMapper.select();
    for (Emp emp : empList) {
        System.out.println(emp);
    }
    sqlSession.close();
}

@Test
public void testSelectEmpById() {
    SqlSession sqlSession = MybatisUtil.getSession();

    EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);

    Emp emp = empMapper.selectById(7369);
    System.out.println(emp);
    sqlSession.close();
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是波哩个波

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值