网站建设网站制作价格,浙江省城乡和住房建设厅网站首页,计算机网络公司,扬子市建设局网站简介MyBatis-Plus (opens new window)#xff08;简称 MP#xff09;是一个 MyBatis (opens new window)的增强工具#xff0c;在 MyBatis 的基础上只做增强不做改变#xff0c;为简化开发、提高效率而生。快速开始添加依赖全新的 MyBatis-Plus 3.0 版本基于 JDK8#xff…简介MyBatis-Plus (opens new window)简称 MP是一个 MyBatis (opens new window)的增强工具在 MyBatis 的基础上只做增强不做改变为简化开发、提高效率而生。快速开始添加依赖全新的 MyBatis-Plus 3.0 版本基于 JDK8提供了 lambda 形式的调用所以安装集成 MP3.0 要求如下JDK 8Maven or GradleSpring Boot项目maven:dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion最新版本/version
/dependencySpring 项目maven:dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus/artifactIdversion最新版本/version
/dependency配置在 application.yml 配置文件中添加 H2 数据库的相关配置# DataSource Config
spring:datasource:driver-class-name: org.h2.Driverschema: classpath:db/schema-h2.sqlusername: rootpassword: testsql:init:schema-locations: classpath:db/schema-h2.sqldata-locations: classpath:db/data-h2.sql在 Spring Boot 启动类中添加 MapperScan 注解扫描 Mapper 文件夹SpringBootApplication
MapperScan(com.baomidou.mybatisplus.samples.quickstart.mapper)
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}Page分页方式一使用mybatis-plus 的 Service page 接口 GetMapping(/pageList)ApiOperation(value 分页列表, notes query和user)public RIPageUser pageList(ApiIgnore User user, Query query) {//无条件分页IPageUser pages userService.page(Condition.getPage(query));//有条件分页IPageUser pages userService.page(Condition.getPage(query), Wrappers.lambdaQuery(user));return R.data(pages);}方式二自定义sql分页controller层代码 GetMapping(/pageList)ApiOperation(value 分页列表, notes query和user)public RIPageUser pageList(ApiIgnore User user, Query query) {IPageUser pages userService.selectUserPage(Condition.getPage(query), user);return R.data(pages);}service 里调用自定义分页sql mapper方法 Overridepublic IPageUser selectUserPage(IPageUser page, User user) {return page.setRecords(baseMapper.selectUserPage(page, user));}定义mapper分页接口
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gis.spacedata.bladex.domain.entity.system.User;
import org.apache.ibatis.annotations.Param;import java.util.List;import java.util.List;public interface UserMapper extends BaseMapperUser {ListUser selectUserPage(IPageUser page, Param(user) User user);}
mybatis xml: select idselectUserPage resultMapuserResultMapselect * from blade_user where is_deleted 0if testuser.tenantId!null and user.tenantId ! and tenant_id #{user.tenantId}/ifif testuser.account!null and user.account ! and account like CONCAT(%,#{user.account},%)/ifif testuser.realName!null and user.realName ! and real_name like CONCAT(%,#{user.realName},%)/ifif testuser.roleId!null and user.roleId ! and CAST(#{user.roleId} AS VARCHAR) ANY(STRING_TO_ARRAY(role_id, ,))/ifORDER BY id/selectCondition 工具类
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springblade.core.launch.constant.TokenConstant;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;import java.util.Map;/*** 分页工具** author Chill*/
public class Condition {/*** 转化成mybatis plus中的Page** param query 查询条件* return IPage*/public static T IPageT getPage(Query query) {PageT page new Page(Func.toInt(query.getCurrent(), 1), Func.toInt(query.getSize(), 10));page.setAsc(Func.toStrArray(SqlKeyword.filter(query.getAscs())));page.setDesc(Func.toStrArray(SqlKeyword.filter(query.getDescs())));return page;}/*** 获取mybatis plus中的QueryWrapper** param entity 实体* param T 类型* return QueryWrapper*/public static T QueryWrapperT getQueryWrapper(T entity) {return new QueryWrapper(entity);}/*** 获取mybatis plus中的QueryWrapper** param query 查询条件* param clazz 实体类* param T 类型* return QueryWrapper*/public static T QueryWrapperT getQueryWrapper(MapString, Object query, ClassT clazz) {Kv exclude Kv.create().set(TokenConstant.HEADER, TokenConstant.HEADER).set(current, current).set(size, size).set(ascs, ascs).set(descs, descs);return getQueryWrapper(query, exclude, clazz);}/*** 获取mybatis plus中的QueryWrapper** param query 查询条件* param exclude 排除的查询条件* param clazz 实体类* param T 类型* return QueryWrapper*/public static T QueryWrapperT getQueryWrapper(MapString, Object query, MapString, Object exclude, ClassT clazz) {exclude.forEach((k, v) - query.remove(k));QueryWrapperT qw new QueryWrapper();qw.setEntity(BeanUtil.newInstance(clazz));SqlKeyword.buildCondition(query, qw);return qw;}}
方式三使用mybatis-plus的Db类说明:使用静态调用的方式执行CRUD方法避免Spring环境下Service循环注入、简洁代码提升效率需要项目中已注入对应实体的BaseMapper完整使用方式见: 测试用例(opens new window)对于参数为Wrapper的需要在Wrapper中传入Entity或者EntityClass供寻找对应的Mapper不建议在循环中调用如果是批量保存建议将数据构造好后使用 Db.saveBatch(数据) 保存Testvoid testPage() {IPageEntity page Db.page(new Page(1, 1), Entity.class);Assertions.assertEquals(2, page.getTotal());page Db.page(new Page(1, 1), Wrappers.lambdaQuery(Entity.class));Assertions.assertEquals(1, page.getRecords().size());}