- 在springboot框架中整合mybatis-plus
properties配置文件中:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql:///db_1220?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root#配置别名
mybatis-plus.type-aliases-package=com.offcn.entity#给持久层配置日志,用于显示生成的SQL语句
logging.level.com.offcn.dao:debug
- 创建实体类
文章图片
package com.offcn.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
//lombok中的注解
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor//此注解的作用是进行实体类和数据库表名的对应
@TableName("t_user")
public class User {
//此注解作用是匹配主键和主属性的匹配
//value是数据库中的主键名,type是设置主键的生成策略
//只注解,没有参数的时候就只是指明主键和主属性的匹配,说明主键和主属性匹配
@TableId(value = "https://www.it610.com/article/uid",type = IdType.AUTO)
private int uid;
private String uname;
private String upwd;
private String addr;
}
- 创建持久层
引入了lombok启动器,所有使用注解生成对应的get、set、有参、无参构造、toString方法
package com.offcn.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.offcn.entity.User;
//生成SQL语句依据对应的实体类
public interface UserDao extends BaseMapper {
}
- 具体的mybatis-plus常用的单表方法
注:在测试类需要注入持久层对象
@Test
void contextLoads() {
//查询所有,mybatis-plus中自定义的持久层接口继承定义好的接口,就有各种功能,设置条件自动生成SQL语句
List list = userDao.selectList(null);
System.out.println(list);
//主键查询方法
User user = userDao.selectById(1);
System.out.println(user);
}
(2)新增功能,insert方法
//新增功能测试
@Test
public void testInsert(){
User user = new User();
user.setUname("王八蛋");
user.setUpwd("2333");
user.setAddr("K城");
userDao.insert(user);
System.out.println(user.getUid());
}
(3)主键修改测试,updateById方法
//主键修改方法
@Test
public void testUpdateById(){
User user = new User();
user.setUname("王武");
user.setUpwd("xyz");
user.setAddr("M城");
user.setUid(12);
userDao.updateById(user);
}
(4)条件修改,update方法
//条件修改测试
@Test
public void testUpdate(){
//将密码是ppp的全改成123
User user = new User();
user.setUpwd("123");
UpdateWrapper userUpdateWrapper = new UpdateWrapper<>();
userUpdateWrapper.eq("upwd", "ppp");
userDao.update(user,userUpdateWrapper);
}
(5)根据一组主键查询,selectBatchIds方法
//根据一组主键查询
@Test
public void testSelectByIds(){
List ids = new ArrayList<>();
Collections.addAll(ids,1,3,4,7);
List list = userDao.selectBatchIds(ids);
System.out.println(list);
}
(6)多条件,逻辑与查询,使用map封装查询条件,selectByMap方法
//多条件,逻辑与查询
@Test
public void testSelectAnd(){
Map map = new HashMap<>();
map.put("uname", "王三");
map.put("upwd", "123");
List list = userDao.selectByMap(map);
System.out.println(list);
}
(7)selectOne方法,查询出一条数据
//使用wrapper封装条件,查询出一条数据selectOne方法
@Test
public void testSelectOne(){
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.eq("uname", "李四");
wrapper.eq("upwd", "avb");
User user = userDao.selectOne(wrapper);
System.out.println(user);
}
此查询方法如果返回结果超过一条就会报:TooManyResultsException异常
(8)统计个数,selectCount方法
//统计个数
@Test
public void testSelectCount(){
//无条件查询
Integer integer = userDao.selectCount(null);
System.out.println(integer);
//逻辑或条件查询
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.like("uname", "三").or().like("upwd", "3");
Integer integer1 = userDao.selectCount(wrapper);
System.out.println(integer1);
}
(9)查询一组数据,selectList方法
wrapper中有一些方法,le是<=,lt是<,ge是>=,gt是>,ne是!=,between是一个闭区间中取值,notBetween是不再一个闭区间中取值
//查询一组数据,类似于selectByMap
@Test
public void testSelectList(){
//写了wrapper没有写条件就是查所有,或者在调用的selectList方法中参数写null也是查所有
QueryWrapper wrapper = new QueryWrapper<>();
//会在左边拼接%
wrapper.likeLeft("uname", "三");
//主键小于等于3的数据被查询
wrapper.le("uid", 3);
List list = userDao.selectList(wrapper);
System.out.println(list);
}
(10)查询结果是某列,selectMaps方法
//查询结果是某列
@Test
public void testSelectMaps(){
QueryWrapper wrapper = new QueryWrapper<>();
//分组统计城市的人数,且要大于1的
wrapper.select("addr,count(*)");
wrapper.groupBy("addr");
wrapper.having("count(*) > 1");
List
(11)QueryWrapper类中的last方法
//在最后拼接一句sql
@Test
public void testSelectLimit(){
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.last("limit 5");
System.out.println(userDao.selectList(wrapper));
}
(12)只查询一列数据,selectObjs方法
//只查询一列数据,selectObjs方法,多条件时依旧只显示第一列数据
@Test
public void testSelectObjs(){
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.select("uname");
System.out.println(userDao.selectObjs(wrapper));
}
(13)分页查询
需要配置分页拦截器,根据AOP思想,将分页插件切入进去,在主启动类中添加拦截器方法,注解创建对象
//分页拦截器
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
然后就可以使用mybatis-plus的分页功能
//分页查询
@Test
public void testSelectPage(){
//创建一个分页page对象,参数是第几页和每页显示条数
Page page = new Page<>(2,3);
//没条件查询
QueryWrapper wrapper = new QueryWrapper<>();
IPage userIPage = userDao.selectPage(page, wrapper);
long total = userIPage.getTotal();
long size = userIPage.getSize();
long current = userIPage.getCurrent();
long pages = userIPage.getPages();
List records = userIPage.getRecords();
System.out.println("总行数:"+total);
System.out.println("页容量:"+size);
System.out.println("当前页号:"+current);
System.out.println("总页数:"+pages);
System.out.println(records);
}
- mybatis-plus业务层
package com.offcn.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.offcn.entity.User;
//让业务层继承框架中定义好的接口,获得方法
public interface UserService extends IService {
}
其实现类:
package com.offcn.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.offcn.dao.UserDao;
import com.offcn.entity.User;
import com.offcn.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
//业务层实现类不但要实现接口,还需要继承ServiceImpl类,泛型一个是持久层接口名,一个是实体类
public class UserServiceImpl extends ServiceImpl implements UserService {
@Autowired
private UserDao userDao;
}
这样就配置好,可以测试了
(1)sava方法
//业务层新增功能
@Test
public void testSave(){
User user = new User();
user.setUname("琪琪");
user.setUpwd("djd");
user.setAddr("p城");
userService.save(user);
System.out.println(user.getUid());
}
(2)update方法
//条件修改多条数据
@Test
public void testUpdates(){
//将密码是123的全改成ppp
User user = new User();
user.setUpwd("ppp");
UpdateWrapper userUpdateWrapper = new UpdateWrapper<>();
userUpdateWrapper.eq("upwd", "123");
userService.update(user,userUpdateWrapper);
}
(3)list方法是查询
getXXX方法也可以查询,功能不同
//查询
@Test
public void testList(){
QueryWrapper wrapper = new QueryWrapper<>();
List list = userService.list(wrapper);
System.out.println(list);
}
(4)page分页查询方法
//分页查询
@Test
public void testPage(){
//和持久层中方法除了方法名不一样,其他一模一样Page page = new Page<>(2,3);
QueryWrapper wrapper = new QueryWrapper<>();
IPage userIPage = userService.page(page, wrapper);
long total = userIPage.getTotal();
long size = userIPage.getSize();
long current = userIPage.getCurrent();
long pages = userIPage.getPages();
List records = userIPage.getRecords();
System.out.println("总行数:"+total);
System.out.println("页容量:"+size);
System.out.println("当前页号:"+current);
System.out.println("总页数:"+pages);
System.out.println(records);
}
【java|mybatis-plus及常用CRUD方法】注:无论是持久层还是业务层分页方法,都需要在主启动类中配置
推荐阅读
- 蓝桥杯|蓝桥杯--鲁卡斯队列
- java|在具有CSS形状的弯曲图像周围包裹文本
- python|pvs-stdio ue4_云中的PVS-Studio(Azure DevOps)
- Java|JAVAWEB框架知识点总结
- java|Mysql必知必会
- MySQL|10分钟必懂-深入理解MySQL隔离级别与锁机制
- mysql|搭建SSM框架并实现增删查改功能
- Java|SpringBoot入门项目-基于JPA的App日记后台系统之数据库的创建与JPA的CRUD(二)
- CGB2202|CGB2202面向对象第7天