- 新建一个spring boot项目
- 导入相关依赖,spring boot 2.2.1
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
<!--mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--lombok用来简化实体类-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
- 配置
# 应用名称
spring:
application:
name: mybatisPlusApplication
datasource:
url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
mapper-locations: classpath*:/mapper/**/*.xml
#mybatis日志
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
logic-delete-value: 1 #逻辑删除 注意:被删除前,数据的deleted 字段的值必须是 0,才能被选取出来执行逻辑删除的操作
logic-not-delete-value: 0
- 新建配置类MybatisPlusConfig
package com.wang.config;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.wang.mapper")
public class MybatisPlusConfig {
/**
* 乐观锁插件
*/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
- 实体类User
package com.wang.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.Version;
import lombok.Data;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT)
private Date createTime; //create_time
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime; //update_time
@Version
@TableField(fill = FieldFill.INSERT_UPDATE)
private Integer version;
@TableLogic
private Integer deleted;
}
- mapper
package com.wang.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wang.entity.User;
import org.springframework.stereotype.Repository;
@Repository
public interface UserMapper extends BaseMapper<User> {
}
自动填充MyMetaObjectHandler类
package com.wang.entity;
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);
this.setFieldValByName("version",1,metaObject);
}
//mp执行修改操作,这个方法执行
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime",new Date(),metaObject);
this.setFieldValByName("version",1,metaObject);
}
}
- 测试类
package com.wang;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wang.entity.User;
import com.wang.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@SpringBootTest
class MyBatisPlusApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void findUsers(){
List<User> users = userMapper.selectList(null);
System.out.println(users);
}
//修改操作,通过id更新
@Test
public void TestUpdate(){
User user = new User();
user.setId(1L);
user.setName("lucymary");
int count = userMapper.updateById(user);
System.out.println(count);
}
@Test
public void testAdd(){
User user = new User();
user.setName("张三");
user.setAge(20);
user.setEmail("lucymary@gmail.com");
int insert = userMapper.insert(user);
System.out.println(insert);
}
@Test
public void testDelete(){
User user = new User();
user.setId(1L);
int count = userMapper.deleteById(user.getId());
System.out.println(count);
}
//测试乐观锁
@Test
public void OptimisticLocker(){
//查询
User user = new User();
user.setId(1576148994537553922L);
User user1 = userMapper.selectById(user.getId());
//修改
user1.setName("测试");
int i = userMapper.updateById(user1);
System.out.println(i);
}
//多个id批量查询selectBatchIds
@Test
public void testSelectByIds(){
List<User> userList = userMapper.selectBatchIds(Arrays.asList(2, 3, 4, 5));
System.out.println(userList);
}
//简单条件查询
@Test
public void testSelectByMap(){
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("name", "test");
hashMap.put("age", 20);
List<User> selectByMap = userMapper.selectByMap(hashMap);
System.out.println(selectByMap);
}
//分页查询
@Test
public void testPagination(){
Page page = new Page(1, 3);
Page selectPage = userMapper.selectPage(page, null);
//得到所有的分页数据
long pages = selectPage.getPages();//总页数
long current= selectPage.getCurrent();//当前页
List<User> list = selectPage.getRecords();//查询数据集合
long total = selectPage.getTotal();//总数据条数
boolean hasNext = selectPage.hasNext();//下1页
boolean hasPrevious = selectPage.hasPrevious();//上一页
System.out.println(pages);
System.out.println(current);
System.out.println(list);
System.out.println(hasNext);
System.out.println(hasPrevious);
}
//根据id删除记录
@Test
public void testDeleteById(){
int byId = userMapper.deleteById(3L);
System.out.println(byId);
}
//根据id删除记录批量
@Test
public void testDeleteByIds(){
List<User> ids = userMapper.selectBatchIds(Arrays.asList(2, 3));
System.out.println(ids);
}
//简单的条件删除
@Test
public void testDeleteByMap(){
HashMap<String, Object> map = new HashMap<>();
map.put("name","1136");
map.put("age",20);
int byMap = userMapper.deleteByMap(map);
System.out.println(byMap);
}
//测试逻辑删除后的查询
//MyBatis Plus中查询操作也会自动添加逻辑删除字段的判断
@Test
public void testDeleteSelect(){
List<User> userList = userMapper.selectList(null);
userList.forEach(System.out::println);
}
//条件操作
@Test
public void testQuery(){
QueryWrapper<User> query = new QueryWrapper<>();
query.isNull("name")
.ge("age",20)
.isNotNull("email");
List<User> userList = userMapper.selectList(query);
userList.forEach(System.out::println);
}
@Test
public void testSelectOne(){
QueryWrapper<User> queryWrapper=new QueryWrapper<>();
queryWrapper.eq("name", "Sandy");
User user = userMapper.selectOne(queryWrapper);//只能返回一条记录
System.out.println(user);
}
@Test
public void testSelectCount(){
QueryWrapper<User> queryWrapper= new QueryWrapper<>();
queryWrapper.between("age",20,35);
Integer count= userMapper.selectCount(queryWrapper);
System.out.println(count);
}
@Test
public void testSelectMaps(){
QueryWrapper<User> queryWrapper= new QueryWrapper<>();
queryWrapper.select("name","age")
.like("name","S")
.likeRight("email","t");
java.util.List<Map<String, Object>> user= userMapper.selectMaps(queryWrapper);//返回值是map列表
user.forEach(System.out::println);
}
@Test
public void testSelectListOrderBy(){
QueryWrapper<User> queryWrapper= new QueryWrapper<>();
queryWrapper.orderByAsc("age");
List<User> userList= userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
}