Mybatis-plus常用方法总结(便携查看)
1. 单表增删改查
class GgktDemoApplicationTests {
//注入mapper
@Autowired
private UserMapper userMapper;
//1.查询
@Test
public void findAll(){
List<User> users = userMapper.selectList(null);
for (User user:users
) {
System.out.println(user);
}
}
//2.插入
@Test
public void addUser(){
User user=new User();
user.setName("xiaoming");
user.setAge(10);
user.setEmail("23232930.com");
//加入的行数
int rows=userMapper.insert(user);
System.out.println("rows:"+rows);
//添加成功之后生成id值,回传到user对象里面
System.out.println(user);
}
//3.修改操作
@Test
public void updateUser(){
//根据id查询
User user = userMapper.selectById(2);
//设置修改值
user.setName("zhangkai");
//调用方法修改
int rows=userMapper.updateById(user);
System.out.println(rows);
}
//5 id删除
@Test
public void deleteId(){
int rows = userMapper.deleteById(2);
System.out.println("id删除行数"+rows);
}
//6 批量删除
@Test
public void deleteBatchIds(){
int rows = userMapper.deleteBatchIds(Arrays.asList(1, 3));
System.out.println("批删除行数"+rows);
}
}
2. 分页查询(使用较多)
class GgktDemoApplicationTests {
//注入mapper
@Autowired
private UserMapper userMapper;
//4分页查询
@Test
public void findPage(){
//创建Page对象,传递两个参数
//当前页----- 每页显示记录数(1当前,3每页)
Page<User> page = new Page<>(1, 3);
//调用mp方法事项分页
userMapper.selectPage(page,null);
//IPage<User> page1 = userMapper.selectPage(page, null);
List<User> list = page.getRecords();
System.out.println(list);
System.out.println(page.getCurrent());
System.out.println(page.getPages());
System.out.println(page.getSize());
System.out.println(page.getTotal());
System.out.println(page.hasNext());
System.out.println(page.hasPrevious());
}
}
3. 主键生成策略
1.ID_WORKER
MyBatis-Plus默认的主键策略是:ID_WORKER 全局唯一ID
2.自增策略
//data注解对应lombok使用get,set方法
@Data
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
//逻辑删除标志 0--1,添加注解,注解是以Mybatis-plus封装的TableLogic
@TableLogic
private Integer deleted;
}
//其他主键
public enum IdType {
//数据库ID自增 IdType.AUTO(0)
AUTO(0),
//该类型为未设置主键类型
NONE(1),
//用户输入ID IdType.INPUT(0)
//该类型可以通过自己注册自动填充插件进行填充
INPUT(2),
//全局唯一ID (纯数字,比UUID更方便排序)
ASSIGN_ID(3),
//全局唯一ID (UUID)
ASSIGN_UUID(4),
/** @deprecated */
@Deprecated
ID_WORKER(3),
/** @deprecated */
@Deprecated
ID_WORKER_STR(3),
/** @deprecated */
@Deprecated
UUID(4);
private final int key;
private IdType(int key) {
this.key = key;
}
public int getKey() {
return this.key;
}
}
4.逻辑删除
实体类需要添加注解依赖
//data注解对应lombok使用get,set方法
@Data
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
//逻辑删除标志 0--1,添加注解,注解是以Mybatis-plus封装的TableLogic
@TableLogic
private Integer deleted;
}
application.properties配置文件中配置,有默认,一样的话不需要配置
5.Mybatis-plus对service层的封装
原始注入controller->service->mapper
@Service
public class UserServiceImpl implements UserService {
//注入mapper
//@Autowired
//private UserMapper userMapper;
}
public interface UserService {
}
Mybatis-plus对service层的封装
public interface UserService extends IService<User> {
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User>implements UserService {
//注入mapper
//@Autowired
//private UserMapper userMapper;
}
逻辑删除,删除后数据库表中对应的delete列变成1,并且findAll()方法不会再查询出来该条信息内容,但是信息仍在表里。
//5 id删除
@Test
public void deleteId(){
int rows = userMapper.deleteById(2);
System.out.println("id删除行数"+rows);
}
6. 条件查询(使用较多,重要)
下面列出一些常用方法
eq --> equal等于
ne--> not equal不等于
gt --> greater than大于
lt --> less than小于
ge --> greater than or equal 大于等于
le --> less than or equal 小于等于
in --> in 包含(数组)
isNull --> 等于null
between --> 在2个条件之间(包括边界值)
like-->%XX%、likeLeft-->%XX、likeRight-->XX%
orderByDesc-->降序、orderByAsc-->升序
部分方法代码
@Test
public void query1(){
//首先需要创建QueryWrapper对象
QueryWrapper<User> wrapper = new QueryWrapper<>();
//ge、gt、le、lt
//ge两个参数:第一个参数为表字段名称,第二个参数是大于小于。。。的值age>10
wrapper.ge("age",20);
List<User> userList = userMapper.selectList(wrapper);
System.out.println(userList);
}
//3.queryWrapper--like:%To%、likeLeft:%To、likeRight:To%**
@Test
public void query3(){
//首先需要创建QueryWrapper对象
QueryWrapper<User> wrapper = new QueryWrapper<>();
//like、likeLeft、likeRight
//like两个参数:第一个参数为表字段列名称,第二个参数值--模糊值
wrapper.like("name","To");
List<User> userList = userMapper.selectList(wrapper);
System.out.println("执行结果>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
System.out.println(userList);
}
//4.queryWrapper--orderByDesc降序、orderByAsc升序**
@Test
public void query4(){
//首先需要创建QueryWrapper对象
QueryWrapper<User> wrapper = new QueryWrapper<>();
//orderByDesc、orderByAsc
//orderByDesc一个参数:第一个参数为表字段列名称,
wrapper.orderByDesc("name");
List<User> userList = userMapper.selectList(wrapper);
System.out.println("执行结果>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
System.out.println(userList);
}
LambdaQueryWrapper基本和QueryWrapper用法一致,只是写法不同
//5.LambdaqueryWrapper
@Test
public void LambdaQueryWrapper(){
//首先需要创建LambdaQueryWrapper对象
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
//wrapper.eq(User::getName,"Tom");
//wrapper.ge(User::getAge,20);
wrapper.likeLeft(User::getName,"om");
//查询调用
List<User> userList = userMapper.selectList(wrapper);
System.out.println("执行结果>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
System.out.println(userList);
}
r.ge(User::getAge,20);
wrapper.likeLeft(User::getName,"om");
//查询调用
List<User> userList = userMapper.selectList(wrapper);
System.out.println("执行结果>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
System.out.println(userList);
}