Mybatis-Plus系统化学习之注解的使用

1.背景

注解的使用

大多数请求下我们默认为有如下对应关系

1.数据库中的表名 ---> java中的实体类名 (下划线与驼峰转换)

2.数据中的id为主键

3.数据库中的字段名---> java中的实体的成员变量

但是但是.....

难道必须一一对应没,我不对应行吗?

当然行,数据库中我们经常会根据业务划分表,在表名前加一个前缀

如user表名为 sys_user,其中sys_表示系统业务相关的表

因此在实际的java实体类中我不需要命名为SysUser

只需要使用注解即可

2.注解使用

官方文档:https://baomidou.com/guide/

 2.1.表名注解@TableName

   /**
     * 测试将数据sys_user表名前面加一个前缀 为 mp_sys_user
     *
     * 实体上加标签 @TableName("mp_sys_user") 即可正常使用
     * ==>  Preparing: SELECT id,version,age,gender,name,position,account,password,status,type,create_time,update_time FROM mp_sys_user WHERE id=?
     * ==> Parameters: 20(Integer)
     */
    @Test
    public void test() {
        SysUser sysUser = sysUserMapper.selectById(20);
        System.out.println("sysUser="+sysUser);
    }

2.2.表主键注解@TableId

/**
     * 默认情况下id是组件,但是如果没有id的表了,或者组件不是id呢,
     * 比如在接下来的演示中我在数据库中把id代码my_id作为主键
     *
     * 实体上就得在myId上加@TableId的注解
     * 
     * ==>  Preparing: SELECT my_id,version,age,gender,name,position,account,password,status,type,create_time,update_time FROM mp_sys_user WHERE my_id=?
     * ==> Parameters: 20(Integer)
     *
     */
    @Test
    public void testTableId() {
        SysUser sysUser = sysUserMapper.selectById(20);
        System.out.println("sysUser="+sysUser);
    }

2.3.字段注解@TableField

 /**
     * 如果普通的字段与数据库不一致怎么办
     * 假设实体是myGender 而数据库是 gender
     * 需要使用注解 @TableField
     *
     *==>  Preparing: SELECT my_id,version,age,gender AS myGender,name,position,account,password,status,type,create_time,update_time FROM mp_sys_user WHERE my_id=?
     * ==> Parameters: 20(Integer)
     */
    @Test
    public void testTableField() {
        SysUser sysUser = sysUserMapper.selectById(20);
        System.out.println("sysUser="+sysUser);
    }

如果实体中的字段不需要对应数据库中的字段怎么办

假设实体中的一个totalAll 是数据库中不需要的字段

需要使用注解 @TableField(exist = false)

 

/**
     * 如果实体中的字段不需要对应数据库中的字段怎么办
     * 假设实体中的一个totalAll 是数据库中不需要的字段
     * 需要使用注解 @TableField(exist = false)
     * <p>
     * ==>  Preparing: INSERT INTO mp_sys_user ( age, name ) VALUES ( ?, ? )
     * ==> Parameters: 99(Integer), 张四峰(String)
     * 从sql语句可以看出 totalAll 并没有映射到sql语句上
     */
    @Test
    public void testTableFieldExist() {
        int row = sysUserMapper.insert(new SysUser().setName("张四峰").setAge(99).setTotalAll(200));
        System.out.println("受影响行数=" + row);
    }

mybatis-plus系统化学习教程:https://www.cnblogs.com/newAndHui/p/14141950.html

完美!

posted @ 2020-12-15 06:31  李东平|一线码农  阅读(572)  评论(0编辑  收藏  举报