zoukankan      html  css  js  c++  java
  • 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

    完美!

  • 相关阅读:
    Django(03):Django 创建第一个项目
    Django(02):Django安装
    Django(01):Django简介
    对程序员来说,看透生死远远没有操作0和1那么简单
    一个中年程序员遇到突发情况的一些胡言乱语
    gradle查看项目属性列表
    有道云笔记到简书的迁移工具
    pygame.mixer.Channel--音频通道
    pygame.mixer.Sound音频
    pygame--图像变换
  • 原文地址:https://www.cnblogs.com/newAndHui/p/13939452.html
Copyright © 2011-2022 走看看