MyBatisPlus
MyBatis Plus 是一个基于 MyBatis 的增强工具库,它简化了 MyBatis 框架的使用,提供了很多便捷的功能和增强的特性,能够大幅度提高开发效率。MyBatis Plus 主要面向的是 Java 开发者,用于简化对关系型数据库的操作。
MyBatis Plus 的主要特性包括:
1.简化的 CRUD 操作:MyBatis Plus 提供了一系列简化的 API,可以通过简单的方法调用实现常见的增删改查操作,避免了繁琐的 SQL 编写。
2.条件构造器:通过条件构造器,可以以一种面向对象的方式构建查询条件,避免手写繁杂的 SQL 语句,并支持灵活的条件组合。
3.分页查询:MyBatis Plus 提供了方便的分页查询支持,可以轻松地进行分页查询操作。
4.自动生成代码:MyBatis Plus 提供了代码生成器,可以根据数据库表结构自动生成实体类、Mapper 接口以及 XML 映射文件,减少了手动编写重复代码的工作量。
5.通用的 CRUD 接口:MyBatis Plus 提供了通用的 CRUD 接口,无需编写常规的增删改查方法,可以直接使用已封装好的方法进行数据库操作。
6.Lambda 表达式支持:MyBatis Plus 支持使用 Lambda 表达式进行查询条件的构建,使得代码更加简洁和易于理解。
除了以上主要特性之外,MyBatis Plus 还提供了缓存支持、多数据源支持、乐观锁、逻辑删除等功能,以及一些其他的实用工具类和插件,可以进一步提升开发效率。
总之,MyBatis Plus 是一个功能强大且易于使用的 MyBatis 增强工具库,它简化了数据库操作,提供了丰富的功能和便捷的 API,并提高了开发效率。
MyBatisPlus的十个练习题
1.查询id信息为1,3,4,5,6用户数据
sql: select * from user where id in (1,2,3,4,5,6);
思考:id可以利用数组进行接收 利用数组查询数据
@Test
void testSelectById() {
Collection<Serializable> idList = new ArrayList<>();
idList.add(1);
idList.add(3);
idList.add(4);
idList.add(5);
idList.add(6);
List<User> userList = userDao.selectBatchIds(idList);
for (User user : userList) {
System.out.println(user.toString()); // 打印每个用户对象的信息
}
}
2: 根据name="黑熊精" age="3000"查询数据信息
SelectByMap:根据具体的字段查询用户信息.
sql语句: select * from user where name="黑熊精" and age=3000
规则:默认使用and连接符.
@Test
void testSelectByMap(){
Map<String, Object> columnMap = new HashMap<>();
columnMap.put("name", "黑熊精");
columnMap.put("age", 3000);
List<User> resultList = userDao.selectByMap(columnMap);
for (User user : resultList) {
System.out.println(user.toString()); // 打印每个用户对象的信息
}
}
3.name属性中包含"精"的数据,并且为女性
sql: SELECT * FROM USER WHERE NAME LIKE "%精%" AND sex = "女"
queryWrapper: 条件构造器
作用 动态拼接sql的where条件
逻辑运算符: >gt , <lt, =eq, >=ge, <= le
@Test
void testQueryWrapper(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "精"); // 匹配名字中包含“精”的部分
queryWrapper.eq("sex", "女"); // 性别等于女性
List<User> resultList = userDao.selectList(queryWrapper);
for (User user : resultList) {
System.out.println(user.toString()); // 打印每个用户对象的信息
}
}
4.查询年龄在18-35之间的女性用户.
* sql: SELECT * FROM USER WHERE age BETWEEN 18 AND 35 AND sex ="女";
@Test
void testQueryWrapper1(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.between("age", 18, 35);// 年龄在18-35之间
queryWrapper.eq("sex", "女"); // 性别为女性
List<User> resultList = userDao.selectList(queryWrapper);
for (User user : resultList) {
System.out.println(user.toString()); // 打印每个用户对象的信息
}
}
5.条件: 查询年龄大于100岁的,并且按照年龄降序排列,
* 如果年龄相同按照Id降序排列.
* sql:SELECT * FROM USER WHERE age > 100 ORDER BY age DESC,id DESC;
@Test
void testQueryWrapper2(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 100); // 年龄大于100岁
queryWrapper.orderByDesc("age"); // 按照年龄降序排列
queryWrapper.orderByDesc("id"); // 如果年龄相同,按照ID降序排列
List<User> resultList = userDao.selectList(queryWrapper);
for (User user : resultList) {
System.out.println(user.toString()); // 打印每个用户对象的信息
}
}
6.* 条件: 查询名称以"乔"结尾的,并且性别为女,并且age小于30岁.按照年龄降序排列.
* SQL:
* SELECT * FROM USER WHERE (NAME LIKE "%乔" AND sex="女"AND age < 30) ORDER BY age DESC;
@Test
void testQueryWrapper3(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.likeRight("name", "乔"); // 名称以"乔"结尾
queryWrapper.eq("sex", "女"); // 性别为女性
queryWrapper.lt("age", 30); // 年龄小于30岁
queryWrapper.orderByDesc("age"); // 按照年龄降序排列
List<User> resultList = userDao.selectList(queryWrapper);
for (User user : resultList) {
System.out.println(user.toString()); // 打印每个用户对象的信息
}
}
7. * 查询age < 100岁的用户,并且性别与name="孙尚香"的性别相同的的用户数据.
* 分析: age<100 sex=男/女
* sql:SELECT * FROM USER WHERE age < 100 AND sex in(ELECT sex FROM USER WHERE NAME = "孙尚香")
@Test
void testQueryWrapper4(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lt("age", 100); // 年龄小于100岁
queryWrapper.inSql("sex", "SELECT sex FROM USER WHERE name = '孙尚香'"); // 性别与名字为"孙尚香"的用户相同
List<User> resultList = userDao.selectList(queryWrapper);
for (User user : resultList) {
System.out.println(user.toString()); // 打印每个用户对象的信息
}
}
8.需求: 有时可能不需要查询全部的数据库的表字段
* 查询age为18岁的用户的名称和id.
* select:挑选字段的属性.
* 查询结果:User(id=12, name=貂蝉, age=null, sex=null)
@Test
void testQueryWrapper5(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age",18);
queryWrapper.select("id","name","age","sex");
List<User> resultList = userDao.selectList(queryWrapper);
for (User user : resultList) {
System.out.println(user.toString()); // 打印每个用户对象的信息
}
}
9. * 条件判断
* 以name和sex不为null的数据当做where条件.
* condition作用:
* 判断参数是否拼接为where条件
* 结果true,动态拼接参数
* 结果false,参数不会动态拼接
* 应用场景:
* 接收前台的参数时,参数可能为null或者其他的数值类型时
* 需要添加判断.
* 业务需求:
* 如果age>18时,才能查询年龄
@Test
void testQueryWrapper6() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.isNull(false, "name"); // name 不为 null
queryWrapper.isNull(false, "sex"); // sex 不为 null
queryWrapper.apply("age > {0}", 18); // age 大于 18
List<User> userList = userDao.selectList(queryWrapper);
for (User user : userList) {
System.out.println(user.toString()); // 打印每个用户对象的信息
}
}
10. * 根据对象查询数据库
* 条件:根据对象中不为null的属性充当where条件
* 需求:查询age=18的用户信息 性别=女
* 说明:利用对象的方式查询时,逻辑运算符都是"="号
@Test
void testQueryWrapper7() {
User user = new User();
user.setAge(18);
user.setSex("女");
QueryWrapper<User> queryWrapper = new QueryWrapper<>(user);
List<User> userList = userDao.selectList(queryWrapper);
for (User user1 : userList) {
System.out.println(user.toString()); // 打印每个用户对象的信息
}
}
MyBatisPlus是基于MyBatis的高效工具库,提供简化CRUD操作、条件构造器、分页查询等功能,通过代码生成减少重复工作,支持Lambda表达式,适用于Java开发者提升开发效率。
517





