引入依赖
首先在项目中引入引入依赖坐标,因为mpj
中依赖较高版本mybatis-plus
中的一些api,所以项目建议直接使用高版本。
maven
<dependency> <groupId>com.github.yulichang</groupId> <artifactId>mybatis-plus-join</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency>
引入相关依赖后,在springboot
项目中,像往常一样正常配置数据源连接信息就可以了。
import com.github.yulichang.wrapper.MPJLambdaWrapper;
使用
mapper继承MPJBaseMapper (必选)
service继承MPJBaseService (可选)
serviceImpl继承MPJBaseServiceImpl (可选)
核心类MPJLambdaWrapper和MPJQueryWrapper
MPJLambdaWrapper用法
简单的三表查询
MPJLambdaWrapper<ProCard> wrapper = new MPJLambdaWrapper<ProCard>() .selectAll(ProCard.class)//查询user表全部字段 .select(ProCard::getProcId)//查询user_address tel 字段 //.selectAs(UserAddressDO::getProcGytdzheng, UserDTO::getProcGytdzheng)//别名 t.address AS userAddress //.select(AreaDO::getProvince, AreaDO::getCity) .leftJoin(ProProject.class, ProCard::getProcProjectid, ProProject::getPropProjectid) //左连接查询,相当于 left join ProProject on ProCard.ProcProjectid=ProProject.PropProjectid //.leftJoin(AreaDO.class, AreaDO::getId, UserAddressDO::getAreaId) .eq(ProCard::getId, 1) //where条件1 .like(UserAddressDO::getTel, "1") //where条件2 .gt(ProCard::getId, 5); //EQ:等于|NE:不等于|GT:大于|LT:小于|GE:大于等于|LE:小于等于
说明:
UserDTO.class 查询结果返回类(resultType)
selectAll() 查询指定实体类的全部字段
select() 查询指定的字段,支持可变参数,同一个select只能查询相同表的字段
selectAs() 字段别名查询,用于数据库字段与业务实体类属性名不一致时使用
leftJoin() 参数说明;第一个参数: 参与连表的实体类class 第二个参数: 连表的ON字段,这个属性必须是第一个参数实体类的属性 第三个参数: 参与连表的ON的另一个实体类属性
默认主表别名是t,其他的表别名以先后调用的顺序使用t1,t2,t3…
条件查询,可以查询主表以及参与连接的所有表的字段,全部调用mp原生的方法,正常使用没有sql注入风险
MPJLambdaWrapper 还有很多其他的功能
简单的SQL函数使用:https://gitee.com/best_handsome/mybatis-plus-join/wikis/selectFunc()?sort_id=4082479
ON语句多条件支持:https://gitee.com/best_handsome/mybatis-plus-join/wikis/leftJoin?sort_id=3496671
MPJLambdaWrapper其他功能
一对一,一对多使用:https://ylctmh.com/pages/core/lambda/select/selectCollection.html
简单的SQL函数使用:https://ylctmh.com/pages/core/lambda/select/selectFunc.html
ON语句多条件支持:https://ylctmh.com/pages/core/lambda/join/leftJoin.html
分页查询
mpj中也能很好的支持列表查询中的分页功能,首先我们要在项目中加入分页拦截器:
@Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2)); return interceptor; }
接下来改造上面的代码,调用selectJoinPage()
方法:
public void page() { IPage<OrderDto> orderPage = orderMapper.selectJoinPage( new Page<OrderDto>(2,10), OrderDto.class, new MPJLambdaWrapper<Order>() .selectAll(Order.class) .select(Product::getUnitPrice) .selectAs(User::getName, OrderDto::getUserName) .selectAs(Product::getName, OrderDto::getProductName) .leftJoin(User.class, User::getId, Order::getUserId) .leftJoin(Product.class, Product::getId, Order::getProductId) .orderByAsc(Order::getId)); orderPage.getRecords().forEach(System.out::println); }