文章目录
Mybatis-plus通用CRUD
插入操作
insert
- 方法源码
/**
* 插入一条记录
*
* @param entity 实体对象
*/
int insert(T entity);
- 测试
@Test
public void testInsert(){
User user=new User();
user.setAge(20);
user.setName("liuchun");
user.setUserName("lc");
user.setEmail("107546184@qq.com");
user.setPassword("ababa");
int result = userMapper.insert(user); //返回的result为受影响的行数
System.out.println(result);
System.out.println(user.getId()); // 生成的id会返回user中
}
- 结果
2021-11-28 09:49:35.217 DEBUG 15160 --- [ main] ltd.lccyj.mapper.UserMapper.insert : ==> Preparing: INSERT INTO tb_user ( id, user_name, password, name, age, email ) VALUES ( ?, ?, ?, ?, ?, ? )
2021-11-28 09:49:35.316 DEBUG 15160 --- [ main] ltd.lccyj.mapper.UserMapper.insert : ==> Parameters: 1464773431795281921(Long), lc(String), ababa(String), liuchun(String), 20(Integer), 107546184@qq.com(String)
2021-11-28 09:49:35.345 DEBUG 15160 --- [ main] ltd.lccyj.mapper.UserMapper.insert : <== Updates: 1
发现此处主键ID为自动生成的唯一值而非数据库自增长
MD的id生成策略
/** * 生成ID类型枚举类 * * @author hubin * @since 2015-11-10 */ @Getter public enum IdType { /** * 数据库ID自增 * <p>该类型请确保数据库设置了 ID自增 否则无效</p> */ AUTO(0), /** * 该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT) */ NONE(1), /** * 用户输入ID * <p>该类型可以通过自己注册自动填充插件进行填充</p> */ INPUT(2), /* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */ /** * 分配ID (主键类型为number或string), * 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花算法) * * @since 3.3.0 */ ASSIGN_ID(3), /** * 分配UUID (主键类型为 string) * 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace("-","")) */ ASSIGN_UUID(4); private final int key; IdType(int key) { this.key = key; } }
使用@TableId指定id生成策略
/** * tb_user表实体类 * @author 刘淳 */ @Data @AllArgsConstructor @NoArgsConstructor @TableName("tb_user") public class User { @TableId(type = IdType.AUTO) // 指定Id生成策略为自增长 private Long id; private String userName; private String password; private String name; private int age; private String email; }
@TableField
该注解可以指定字段的一些属性
对象中的属性名和字段名不一致且非驼峰不一致
@TableFiled(value="email") //解决字段名不一致 private String mail
对象中的属性名在表中不存在
@TableFiled(exist=false) private String address // 数据库表中不存在该字段
设置不参与查询的字段
@TableFiled(select=false) // 使该字段不参与查询 private String password
更新操作
updateById
- 方法源码
/**
* 根据 ID 修改
*
* @param entity 实体对象
*/
int updateById(@Param(Constants.ENTITY) T entity);
- 测试
@Test
public void testUpdateById(){
User user=new User();
user.setId(1L);
user.setAge(100);
int result = userMapper.updateById(user);
System.out.println(result);
}
- 结果
2021-11-28 10:13:34.402 DEBUG 2564 --- [ main] ltd.lccyj.mapper.UserMapper.updateById : ==> Preparing: UPDATE tb_user SET age=? WHERE id=?
2021-11-28 10:13:34.502 DEBUG 2564 --- [ main] ltd.lccyj.mapper.UserMapper.updateById : ==> Parameters: 100(Integer), 1(Long)
2021-11-28 10:13:34.513 DEBUG 2564 --- [ main] ltd.lccyj.mapper.UserMapper.updateById : <== Updates: 1
update
- 方法源码
/**
* 根据 whereEntity 条件,更新记录
*
* @param entity 实体对象 (set 条件值,可以为 null)
* @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
*/
int update(@Param(Constants.ENTITY) T entity, @Param