MyBatis-Plus实现数据库的curd(增删改查)操作
1、创建数据库 创建数据库表
2、创建工程 springBoot
3、在项目中引入mp和相关依赖 统一2.2.1版本
4、配置数据库信息 applicatiion.properties
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
5、编写核心代码
//修改数据
@Test
public void testUpdate(){
//修改数据根据id修改 UPDATE user SET name=? WHERE id=?
User user = new User();
user.setId(1383696365028196354L);
user.setName("lucymaiy");
int i = userMapper.updateById(user);
System.out.println(i);
}
//添加数据
@Test
public void testAdd(){
User user = new User();
user.setName("lucy");
user.setAge(20);
user.setEmail("[email protected]");
userMapper.insert(user);
}
//查询所有数据
@Test
public void findAll() {
List<User> users = userMapper.selectList(null);
System.out.println(users);
}
准备工作
在表里添加两个datetime类型的字段 create_time、update_time
在表对应的实体类中添加对应属性
private Date createTime; //create_time
private Date updateTime; //update_time
在实体类要进行自动填充属性添加注解
@TableField(fill = FieldFill.INSERT)
private Date createTime; //create_time
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime; //update_time
创建一个类,实现接口的两个方法,一个方法添加的时候执行,一个方法修改的时候执行,设置添加什么值
package com.atguigu.demomptest.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
//mp执行添加操作时,这个方法执行
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
//mp执行修改操作时,这个方法执行
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
1、在表中添加int型新字段version,在表对应的实体类中添加版本号属性
2、在实体类里进行版本号操作的属性上面加上一个注解@Version
@Version
private Integer version;
3、配置乐观锁插件
@Configuration
@MapperScan("com.atguigu.demomptest.mapper")
public class MybatisPlusConfig {
/**
* 乐观锁插件
*/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
}
4、测试乐观锁
//测试乐观锁
@Test
public void testOptimisticLocker(){
//1、根据id查询
User user = userMapper.selectById(1383958729568858114L);
//2、修改
user.setName("张三");
userMapper.updateById(user);
}
//多个id批量查询
@Test
public void testSelectId(){
List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
System.out.println(users);
}
//简单条件查询
@Test
public void testSelect2(){
Map<String, Object> columnMap = new HashMap<>();
columnMap.put("name","jack");
columnMap.put("age",20);
List<User> users = userMapper.selectByMap(columnMap);
System.out.println(users);
}
1、配置分页插件
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
2、编写分页的代码
//分页查询
@Test
public void testSelectPage(){
Page<User> page = new Page(1,3); //参数1:当前页 参数2:每页记录数
Page<User> userPage = userMapper.selectPage(page, null);
//返回对象得到分页所有数据
long pages = userPage.getPages(); //总页数
long current = userPage.getCurrent(); //当前页
List<User> records = userPage.getRecords(); //查询数据集合
long total = userPage.getTotal(); //总记录数
boolean hasNext = userPage.hasNext(); //判断是否有下一页
boolean hasPrevious = userPage.hasPrevious(); //判断是否有上一页
System.out.println(pages);
System.out.println(current);
System.out.println(records);
System.out.println(total);
System.out.println(hasNext);
System.out.println(hasPrevious);
}
//根据id删除
@Test
public void testDeleteId(){
int rows = userMapper.deleteById(1383976766296563714L);
System.out.println(rows);
}
//批量删除
@Test
public void testDeleteBatchIds(){
int rows = userMapper.deleteBatchIds(Arrays.asList(2, 3, 4));
System.out.println(rows);
}
//简单条件删除@Testpublic void testDeleteByMap(){ Map columnMap = new HashMap<>(); columnMap.put("name","jack"); columnMap.put("age",20); int rows = userMapper.deleteByMap(columnMap); System.out.println(rows);}
1、在表中添加int型字段deleted,对应实体类添加属性,作为逻辑删除标志
2、在实体类逻辑删除属性上面添加注解@TableLogic
//mp复杂查询操作
@Test
public void testSelect(){
//创建条件查询构造器
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//ge大于等于 gt大于 le小于等于 lt小于 isNull isNotNull
// queryWrapper.ge("age",21);
//eq等于 ne不等于
// queryWrapper.eq("name","Tom");
//between在..范围 notBetween不在..范围
// queryWrapper.between("age",24,28);
//like模糊查询 notLike likeLeft %张 likeRight 张%
// queryWrapper.like("name","张");
//orderBy orderByDesc降序排列 orderByAsc升序排列
// queryWrapper.orderByDesc("id");
List<User> users = userMapper.selectList(queryWrapper);
System.out.println(users);
}