@Repository public interface UserMapper extends BaseMapper {
}
在启动类上添加@MapperScan
@SpringBootApplication // 扫描mapper所在的包 @MapperScan("com.chen.mapper") public class MybatisPlusApplication { public static void main(String[] args) { SpringApplication.run(MybatisPlusApplication.class, args); }
}
3.3、编写测试类
MybatisPlusTest
@SpringBootTest public class MybatisPlusTest {
@Autowired private UserMapper userMapper;
@Test public void testSelectList() { // 通过条件构造器查询一个list集合,若有条件,则可以设置为null List list = userMapper.selectList(null); list.forEach(System.out::println); } }
@Test public void testInsert() { // 实现新增用户信息 // INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? ) User user = new User(); user.setName("张三"); user.setAge(18); user.setEmail("zhangsan@atguigu.com"); int result = userMapper.insert(user); System.out.println("result:" + result); System.out.println("id:" + user.getId()); }
4.2、BaseMapper的删除方法测试
@Test public void testDelete() { // 通过ID删除一个用户 // DELETE FROM user WHERE id=? /*int result = userMapper.deleteById(1499047219186933761L); System.out.println(result);*/
// 根据map集合中的所设置的条件删除用户信息 // DELETE FROM user WHERE name = ? AND age = ? /*Map<String, Object> map = new HashMap<>(); map.put("name","张三"); map.put("age",18); int result = userMapper.deleteByMap(map); System.out.println(result);*/
// 通过多个id实现批量删除 // DELETE FROM user WHERE id IN ( ? , ? ) List list = Arrays.asList(1499047368323870722L, 1499047451270430721L); int result = userMapper.deleteBatchIds(list); System.out.println(result); }
4.3、BaseMapper的更新方法测试
@Test public void testUpdate() { // 通过id来更新用户的信息 // UPDATE user SET name=?, age=? WHERE id=? User user = new User(); user.setId(1499050741030797314L); user.setName("张三"); user.setAge(23); int result = userMapper.updateById(user); System.out.println(result); }
4.4、BaseMapper的查询方法测试
@Test public void testSelect() { // 通过id查询用户信息 // SELECT id,name,age,email FROM user WHERE id=? User user = userMapper.selectById(1L); System.out.println(user);
// 通过多个id实现批量查询用户的信息 // SELECT id,name,age,email FROM user WHERE id IN ( ? , ? , ? ) List list = Arrays.asList(1L, 2L, 3L); List userList = userMapper.selectBatchIds(list); userList.forEach(System.out::println);
// 根据map集合中的条件来查询用户信息 // SELECT id,name,age,email FROM user WHERE id = ? AND age = ? Map<String, Object> map = new HashMap<>(); map.put("id",1L); map.put("age",18); List users = userMapper.selectByMap(map); users.forEach(System.out::println);
// 查询所有数据的 // SELECT id,name,age,email FROM user List userList = userMapper.selectList(null); userList.forEach(System.out::println); }
4.5、自定义功能
Mapper
@Repository public interface UserMapper extends BaseMapper {
@Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
// Service 接口 public interface UserService extends IService { }
测试Service接口查询总数
@SpringBootTest public class MybatisPlusServiceTest {
@Autowired private UserService userService;
@Test public void testGetCount() { // 查询总记录数的 // SELECT COUNT( * ) FROM user long count = userService.count(); System.out.println(count); }
}
Service测试批量添加数据
@Test public void testInsertMore() { // Service接口实现批量添加 // INSERT INTO user ( id, name, age ) VALUES ( ?, ?, ? ) List list = new ArrayList<>(); for (int i = 0; i <= 10; i++) { User user = new User(); user.setName("ch" + i); user.setAge(20 + i); list.add(user); }
boolean b = userService.saveBatch(list); System.out.println(b); }
@Test public void testSelectWrapper() { // 查询用户名包含a,年龄在20到30之间,邮箱信息不为null的用户信息 // SELECT id,name,age,email FROM user WHERE (name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL) QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like("name","a") .between("age", 20, 30) .isNotNull("email"); List userList = userMapper.selectList(queryWrapper); userList.forEach(System.out::println); }
组装排序条件并测试
@Test public void test02() { // 查询用户信息,按照年龄的降序排序,若年龄相同,则按照id升序排序 // SELECT id,name,age,email FROM user ORDER BY age DESC,id ASC QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.orderByDesc("age") .orderByAsc("id"); List list = userMapper.selectList(queryWrapper); list.forEach(System.out::println); }
组装删除条件并测试
@Test public void test03() { // 删除邮箱地址null的用户信息 // DELETE FROM user WHERE (email IS NULL) QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.isNull("email"); int i = userMapper.delete(queryWrapper); System.out.println(i); }
组装修改功能并测试
@Test public void test04() { // 将(年龄大于20并且用户名中包含有a)或邮箱为null的用户信息修改 // UPDATE user SET name=?, email=? WHERE (age > ? AND name LIKE ? OR email IS NULL) QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.gt("age", 20) .like("name", "a") .or() .isNull("email"); User user = new User(); user.setName("小明"); user.setEmail("test@atguigu.com"); int result = userMapper.update(user, queryWrapper); System.out.println(result); }
条件优先级的测试
@Test public void test05() { // 将用户名中包含a并且(年龄大于20或邮箱为null)的用户信息修改 // Lambda中的条件优先执行 // UPDATE user SET name=?, email=? WHERE (name LIKE ? AND (age > ? OR email IS NULL)) QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like("name", "a") .and(i -> i.gt("age", 20) .or() .isNull("email")); User user = new User(); user.setName("小红"); user.setEmail("tset@atguigu.com"); int result = userMapper.update(user, queryWrapper); System.out.println(result); }
组装select语句
@Test public void test06() { // 查询用户的用户名,年龄,邮箱信息 // SELECT name,age,email FROM user QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("name", "age", "email"); List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper); maps.forEach(System.out::println); }
组装子查询并测试
@Test public void test07() { // 查询id小于等于100的用户信息 // SELECT id,name,age,email FROM user WHERE (id IN (select id from user where id <= 100)) QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.inSql("id", "select id from user where id <= 100"); List list = userMapper.selectList(queryWrapper); list.forEach(System.out::println); }
使用UpdateWrapper实现修改功能
@Test public void test08() { // 将用户名中包含a并且(年龄大于20或邮箱为null)的用户信息修改 // UPDATE user SET name=?,email=? WHERE (name LIKE ? AND (age > ? OR email IS NULL)) UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.like("name", "a") .and(i -> i.gt("age", 20) .or() .isNull("email")); updateWrapper.set("name", "小黑"); updateWrapper.set("email", "abc@atguigu.com"); int result = userMapper.update(null, updateWrapper); System.out.println(result); }
模拟开发中的组装条件
@Test public void test09() { String username = ""; Integer ageBegin = 20; Integer ageEnd = 30; QueryWrapper queryWrapper = new QueryWrapper<>(); if (StringUtils.isNotBlank(username)) { // 判断某个字符串是否不为空字符串,不为null,不为空白符 // SELECT id,name,age,email FROM user WHERE (age >= ? AND age <= ?) queryWrapper.like("name", username); }
if (ageBegin != null) { queryWrapper.ge("age", ageBegin); } if (ageEnd != null) { queryWrapper.le("age", ageEnd);
} List list = userMapper.selectList(queryWrapper); list.forEach(System.out::println); }
使用condition动态组装条件
@Test public void test() { String username = "a"; Integer ageBegin = null; Integer ageEnd = 30; QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(username), "name", username) .ge(ageBegin != null, "age", ageBegin) .lt(ageEnd != null, "age", ageEnd); List list = userMapper.selectList(queryWrapper); list.forEach(System.out::println);
}
LambdaQueryWrapper
@Test public void test11() { // SELECT id,name,age,email FROM user WHERE (name LIKE ? AND age < ?) String username = "a"; Integer ageBegin = null; Integer ageEnd = 30;
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(username), User::getName, username) .ge(ageBegin != null, User::getAge, ageBegin) .lt(ageEnd != null, User::getAge, ageEnd); List list = userMapper.selectList(queryWrapper); list.forEach(System.out::println); }
LambdaUpdateWrapper
@Test public void test12() { // 将用户名中包含a并且(年龄大于20或邮箱为null)的用户信息修改 LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.like(User::getName, "a") .and(i -> i.gt(User::getAge, 20) .or() .isNull(User::getEmail)); updateWrapper.set(User::getName, "小黑").set(User::getName, "abc@atguigu.com"); int result = userMapper.update(null, updateWrapper); System.out.println(result); }
7、插件
7.1、分页插件
Mybatis-plus自带分页插件,自己需要简单的配置计科实现分页功能
添加配置
可以把启动类上的扫描mapper的注解放在MyBatisPlusConfig上
@Configuration // 扫描mapper所在的包 @MapperScan("com.chen.mapper") public class MyBatisPlusConfig {
@Bean // 配置MybatisPlus中的插件 public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; }
} @Test public void testPage() { Page page = new Page<>(1, 3); userMapper.selectPage(page, null); System.out.println(page); }
获取分页相关的数据
@Test public void testPage() { Page page = new Page<>(2, 3); userMapper.selectPage(page, null); System.out.println(page.getRecords()); System.out.println(page.getPages()); System.out.println(page.getTotal()); System.out.println(page.hasNext()); System.out.println(page.hasPrevious()); }
@SpringBootTest public class MybatisPlusEnumTest {
@Autowired private UserMapper userMapper;
@Test public void test() { User user = new User(); user.setName("admin"); user.setAge(33); user.setSex(SexEnum.MALE); int insert = userMapper.insert(user); System.out.println(insert); }