MyBatis-Plus初解

MyBatis-Plus

使用步骤

  1. 创建实体类

  2. 创建mapper接口xml配置

    //BaseMapper会自动将mapper与实体类关联,需要在配置类中使用@MapperScan扫描
    @Repository //加Repository会交给IoC管理
    public interface UserMapper extends BaseMapper<User> {
    }
    
  3. 在配置类上开启@MapperScan扫描,指定mapper接口的位置

  4. 使用mapper接口操作数据库

    @SpringBootTest
    class MybatisPlusApplicationTests {
        @Autowired
        public UserMapper userMapper;
        @Test
        void contextLoads() {
            List<User> users = userMapper.selectList(null);
            System.out.println(users);
        }
    
    }
    

配置输出日志

#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

主键类型

当不设置主键时,会为数据库插入id值默认为:全局唯一id。还会将MyBatis-Plus生成id赋值给实体类。

策略详见

  1. 自动增长,当一张表记录达到一定数据量,进行分表操作,分表操作需要知道上一张表的最后一个id值。
  2. UUID:生成通用唯一识别码。随机生成,无法排序。
  3. redis生成
  4. 自带生成snowflake算法,生成19位的值

指定主键类型

 @TableId(value = "id",type = IdType.ASSIGN_ID)

type的值

描述
AUTO 数据库ID自增
NONE 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
INPUT insert前自行set主键值
ASSIGN_ID 分配ID(主键类型为Number(Long和Integer)或String)(since 3.3.0)
ASSIGN_UUID 分配UUID,主键类型为String(since 3.3.0)

自动填充

不用通过对象的setter方法对值进行设置,通过实现接口对值进行填充。例如设置创建修改时间。

  1. 在实体类上使用TableFiled注解指定属性fill及什么时候触发fill。

    @TableField(fill = FieldFill.INSERT)//该字段首次insert时触发
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)//insert和更新时都会触发
    private Date updateTime;
    
  2. 需要实现MetaObjectHandle接口来实现fill的具体操作。

    @Component //交给容器才会生效?
    public class MyMetaObjectHandler implements MetaObjectHandler {
        //insert时触发的操作,metaObject表示表的元信息如字段名等
        @Override
        public void insertFill(MetaObject metaObject) {
            this.setFieldValByName("createTime",new  Date(),metaObject);
            this.setFieldValByName("updateTime",new  Date(),metaObject);
        }
    	//update时触发的操作
        @Override
        public void updateFill(MetaObject metaObject) {
            this.setFieldValByName("updateTime",new  Date(),metaObject);
        }
    }
    
    
上一篇:Python第八课:第三方库 ——turtle


下一篇:CSS :is()和 :where() 即将出现在浏览器中