Mybatis-Plus实现简单的增删改查 实体类上的注解(一)

简介: Mybatis-Plus实现简单的增删改查 实体类上的注解(一)

1 注解

1.1 @TableName

 之前在入门案例中我们分析过:使用mp底层方法生成的SQL语句中,表名为mapper或者service接口传入的泛型首字母小写,表中字段名为泛型类的封装属性,如果表名与泛型名不对应的话,这个时候就需要在实体类上使用@TableName注解来修改实体类绑定的表


@TableName("对应的表名")


 有些时候我们会将一个项目所用的所有表在命名上使用一个公共前缀,使用配置文件设置之后就会在所有的实体类所对应的的表名上拼接该前缀


mybatis-plus:
  global-config:
    db-config:
      table-prefix: 表名的公共前缀


1.2 @TableId

 mp中会默认将实体类中命名为id的属性作为主键与表的id主键相对应,但是如果实体类属性与表中的主键命名一致但不是id而是cid或者uid等的话,就会因为找不到主键而无法实现功能报错。于是就需要在实体类的属性上使用@TableId注解标注该属性对应的表中字段为该表的主键


@TableId


 现在有这么一个情况,如果实体类中的属性与表中主键不一样的话,就该在实体类的属性上使用@TableId注解的value属性将两者对应起来


@TableId(value = "该属性在表中对应的字段名")


 通过上一篇博客对mapper接口的insert方法测试发现,通过insert方法插入的记录,如果不设置id主键值的情况下,mp默认使用雪花算法(下面有拓展)生成一个id号插入到表中。如果想要将生成的id设置成根据表中主键值进行自增插入的话,首先应该将表中的主键字段设置成自增,然后将实体类的属性上使用@TableId注解的value属性设置


@TableId(type = IdType.AUTO)


 除了使用注解单个设置实体类的主键生成策略之外,还可以通过配置文件设置所有实体类的主键生成策略


mybatis-plus:
  global-config:
    db-config:
      id-type: auto


雪花算法

 雪花算法是由Twitter公布的分布式主键生成算法,它能够保证不同表主键的不重复性,以及相同表主键的有序性。通过雪花算法生成的id长度共64bit(一个long型)。

image.png

最高1bit是符号位正0负1,id一般是正数

41bit时间截(毫秒级)

10bit作为机器的ID

12bit作为毫秒内的流水号

优点:整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞,并且效率较高


1.3 @TableField

 mp会默认将表中的字段名里的下划线转换成驼峰命名,也就是将实体类中的userName属性与数据库中的user_name字段相对应。主键不对应的话使用@TableId注解,普通字段对应不上的话,就可以在实体类的属性上使用@TableField注解


@TableField("表中对应的字段名")


1.4 @TableLogic

 @TableLogic注解就是设置字段为伪删除,也就是在执行删除方法的时候将该字段对应的值设置为1,再查询记录时不显示该字段为1的记录。

 首先应该在数据库的表中创建一个字段用来标记是否删除(默认值为0即不删除),实体类创建相应的属性上用注解标注:


@TableLogic
private Integer isDeleted;


使用@TableLogic注解之后,所有的删除操作都是伪删除,就是将标记字段的值改为1


@Test
public void deleteBatchIdsTest() {
    List<Long> list = Arrays.asList(26L, 27L, 28L);
    // UPDATE user SET is_deleted=1 WHERE cid IN ( ? , ? , ? ) AND is_deleted=0
    int result = mapper.deleteBatchIds(list);
    System.out.println("受影响的行数: " + result);
}


查询的时候会加入一个判断条件,就是标记字段的值要是0才显示


@Test
public void selectListTest() {
    // SELECT cid AS uid,name,age,email,is_deleted FROM user WHERE is_deleted=0
    List<User> users = mapper.selectList(null);
    users.forEach(System.out::println);
}


 在MP中mapper和service定义了很多的CRUD方法,可以像使用常见类API的方式直接调用使用,这些方法有很多按照方法参数的不同主要分为两大类,一种参数是wrapper放在下一章中进行讲解,另一种是接下来讲解的参数不是wrapper的方法


2 mapper层的CRUD方法

 mapper层接口继承BaseMapper接口并传入需要操作的实体类泛型


// spring框架创建mapper接口相对应的接口实现类

@

Mapper
public interface UserMapper extends BaseMapper<User> {
}


2.1 增(insert)

@Test
public void insertTest() {
   User user = new User();
   user.setName("张三");
   user.setAge(20);
   // sql语句:INSERT INTO user ( id, name, age ) VALUES ( ?, ?, ? )
   int result = mapper.insert(user);
   System.out.println("受影响的行数 " + result);
}


主键id不设置的话默认使用雪花算法生成


2.2 删(delete)

根据主键删除单条记录(deleteById)


@Test 
public void deleteByIdTest() {
   // DELETE FROM user WHERE id=?
   int result = mapper.deleteById(1502966571370401793L);
   System.out.println("受影响的行数: " + result); 
}


根据主键删除多条记录(deleteBatchIds)


@Test 
public void deleteBatchIdsTest() {
    List<Long> list = Arrays.asList(1L, 2L, 3L);
    // DELETE FROM user WHERE id IN ( ? , ? , ? )
    int result = mapper.deleteBatchIds(list);
    System.out.println("受影响的行数: " + result); 
}


多条件删除(deleteByMap)


@Test 
public void deleteByMapTest() {
   HashMap<String, Object> map = new HashMap<>();
   map.put("name", "张三");
   map.put("age", 23);
   // DELETE FROM user WHERE name = ? AND age = ?
   int result = mapper.deleteByMap(map);
   System.out.println("受影响的行数: " + result);   
}


相关文章
|
2月前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
2月前
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
98 5
|
2月前
|
Java 数据库连接 mybatis
Mybatis使用注解方式实现批量更新、批量新增
Mybatis使用注解方式实现批量更新、批量新增
65 3
|
2月前
|
SQL 存储 数据库
深入理解@TableField注解的使用-MybatisPlus教程
`@TableField`注解在MyBatis-Plus中是一个非常灵活和强大的工具,能够帮助开发者精细控制实体类与数据库表字段之间的映射关系。通过合理使用 `@TableField`注解,可以实现字段名称映射、自动填充、条件查询以及自定义类型处理等高级功能。这些功能在实际开发中,可以显著提高代码的可读性和维护性。如果需要进一步优化和管理你的MyBatis-Plus应用程
228 3
|
2月前
|
Java 数据库连接 mybatis
Mybatis使用注解方式实现批量更新、批量新增
Mybatis使用注解方式实现批量更新、批量新增
225 1
|
3月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
176 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
3月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
112 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
3月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
764 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
3月前
|
SQL Java 数据库连接
mybatis使用二:springboot 整合 mybatis,创建开发环境
这篇文章介绍了如何在SpringBoot项目中整合Mybatis和MybatisGenerator,包括添加依赖、配置数据源、修改启动主类、编写Java代码,以及使用Postman进行接口测试。
54 0
mybatis使用二:springboot 整合 mybatis,创建开发环境
|
3月前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
254 1