Mybatisplus方法和注解

方法

查询

在这里插入图片描述

修改

在这里插入图片描述

● updateById():默认只修改实体对象entity中不为null的字段。如果类的成员变量添加了@TableField,@TableLogic,则不一定
● update():

  • update(entity,null):全量修改,SQL语句中没有where条件,会将entity中的不为空的字段全局修改
Class User{
  int id;
	String name;
	int age;
}
private UserMapper userMapper;
public void test(){
  User user=new User();
	user.setName("张三");
	userMapper.update(user,null);//SQL:update user set name='张三'。没有where条件,也不会修改age字段
}
  • update(null,updateWrapper)
Class User{
	String name;
	int age;
}
private UserMapper userMapper;
public void test(){
  UpdateWrapper<User>updateWrapper=new UpdateWrapper();
  updateWrapper.set("name","张三");//set方法对应update中的set name="张三"
  updateWrapper.eq("id",1);//eq方法设置where条件中id=1
	userMapper.update(null,updateWrapper);//SQL:update user set name='张三' where id=1
}
  • update(entity,updateWrapper)
Class User{
    int id;
	String name;
	int age;
}
private UserMapper userMapper;
public void test(){
  User user=new User();
  user.setName("张三");//对应update语句中的set name="张三"。实体对象中的主键字段不会出现在set中,也不会出现在where条件中
  UpdateWrapper<User>updateWrapper=new UpdateWrapper();
  updateWrapper.set("age",11);//对应update语句中的set age=11
  updateWrapper.eq("id",1);//对应udpate语句中的where id=1
  //SQL:update user set name='张三',age=11 where id=1
	userMapper.update(user,updateWrapper);

删除

在这里插入图片描述

● deleteById():

deleteById(1):
    对应delete from 表名 where 主键=1

● deleteBatchIds()

List<Integer> ids=new ArrayList<>();
ids.add(2);
ids.add(3);
userMapper.deleteBatchIds(ids);
//SQL:DELETE FROM user wher id in (2,3);

● delete(QueryWrapper queryWrapper)

QueryWrapper<AgentInfo> agentInfoWrapper=new QueryWrapper<>();
agentInfoWrapper.eq("agent_id",4);
agentInfoMapper.delete(agentInfoWrapper);

//SQL:DELETE from user where agent_id=4;

添加

在这里插入图片描述

Class User{
    int id;
    String name;
    int age;
}
private UserMapper userMapper;
public void test(){
    User user=new User();
    user.setName(’zhangsan");
    user.setAge(11);
    userMapper.insert(user);//SQL:INSERT INTO user(name,age) values("zhangsan",11);
}

重点:

执 行inset之前,user对象的id属性没有值。执行完insert方法后,Mybatisplus会将添加后该记录的主键id赋值给user对象。即执行完inset后,便可以通过user.getId()获取对象的id

其他

@TableLogic注解

  1. 源码
/**
* 表字段逻辑处理注解(逻辑删除)
*
* @author hubin
* @since 2017-09-09
*/
	@Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
    public @interface TableLogic {

 /**
* 默认逻辑未删除值(该值可无、会自动获取全局配置)
*/
        String value() default "";

/**
 1. 默认逻辑删除值(该值可无、会自动获取全局配置)
*/
        String delval() default "";
    }
  1. 理解
    通常表中的数据不会完全在数据库中物理删除,而是逻辑删除。此时需要有一个字段(如deleted)表示该记录已删除了。该注解即使用在deleted字段上。如下
public class User{
	int id;
	String name;
	int age;
	@TableLogic(val="0",delval="1")
	String deleted;
}
  1. 该字段带来的影响
  • 查询:使用查询方法时,会将deleted自动拼接到where条件中
private UserMapper userMapper;

public void test(){
    QueryWrapper<User>queryWrapper=new QueryWrapper();
    queryWrapper.eq("name","zhangsan");
    userMapper.selectList(queryWrapper);
    //SQL:SELECT 字段列表 from user  WHERE deleted='0' AND( name="zhangsan");
	//虽然queryWrapper中没有写eq("deleted","0"),但是依然有
  • 修改:
    • 会将deleted自动拼接到where条件中。
    • 不能通过update方法修改deleted字段。
private UserMapper userMapper;
public void test(){
  UpdateWrapper<User>updateWrapper=new UpdateWrapper();
  updateWrapper.set("name","张三");//set方法对应update中的set name="张三"
  updateWrapper.eq("id",1);//eq方法设置where条件中id=1
  userMapper.update(null,updateWrapper);
    //SQL:update user set name='张三' where  deleted='0' AND ( id=1);
}
  • 删除:
    • 执行各种delete方法时,实际执行的是update子句,将deleted字段设置为1(delval=“1”)
userMapper.deleteById(1);
//SQL:UPDATE user SET deleted='1' WHERE deleted='0' AND (id = 1)
  • 添加
    • 添加时没有其他效果,不会自动将deleted字段设置为0,需要写代码或者数据库设置默认值

@TableField之updateStrategy

● 源码解释:
在这里插入图片描述

● 个人解释:

public class User{
	int id;
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private String name;
	int age;
	@TableLogic(val="0",delval="1")
	String deleted;
}

updateStrategy规定了Mybatisplus在执行Update操作时,如何处理该字段。

  • NOT_NULL(默认):
    在对象的字段类型是引用类型的前提下,如果不是String的对象,当对象为null时不更新该字段。如果是String对象,当对象为null时不更新,如果对象是"",则更新
public class User{
	Integer id;
    @TableField(updateStrategy = FieldStrategy.NOT_NULL)
    private String name;
    @TableField(updateStrategy = FieldStrategy.NOT_NULL)
	Integer age;
	@TableLogic(val="0",delval="1")
	String deleted;
}
private UserMapper userMapper;
public void test(){
    User user = new User();
    user.setId(1);
    user.setName("张三");
    userMapper.updateById(user);
    //SQL:UPDATE user set name="张三" where deleted="0" AND id=1;
    //user对象中age=null,所以不会更新age字段
}
public void test1(){
    User user = new User();
    user.setId(1);
    user.setAge(11);
    user.setName(null);
    userMapper.updateById(user);
    //SQL:UPDATE user set age=11 where deleted="0" AND id=1;
    //user对象中name=null,所以不会更新name字段
}
public void test2(){
    User user = new User();
    user.setId(1);
    user.setAge(11);
    user.setName("");
    userMapper.updateById(user);
    //SQL:UPDATE user set age=11,name="" where deleted="0" AND id=1;
    //user对象中name!=null,而是name="",所以会更新name字段
}
  • NOT_EMPTY:
    NOT_EMPTY:如果该实体对象的成员变量是引用类型,字段的值是null或者是空串"",那么执行upate操作时会忽略该字段
    ○ 也就是,当情况是test2()时,不会更新name字段。

  • IGNORED
    IGNORED:该字段始终会出现拼接在update语句中的set语句中。

public class User{
	Integer id;
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private String name;
    @TableField(updateStrategy = FieldStrategy.IGNORED)
	Integer age;
	@TableLogic(val="0",delval="1")
	String deleted;
}
private UserMapper userMapper;
public void test(){
    User user = new User();
    user.setId(1);
    user.setName("");
    user.setAge(null);
    userMapper.updateById(user);
    //SQL:UPDATE user set name="" ,age=null where deleted="0" AND id=1;
    //user对象中虽然age=null,name="",但是update语句中依然有set name="",age=null,依然更新age和name字段
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值