内容导读
mybatis-plus概述
mybatis-plus案例解析
mybatis-plus接口与分页应用
一、mybatis-plus概述
1、mybatis-plus(mp)介绍
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
mybatis-plus官网:https://mybatis.plus
2、mybatis-plus部署配置
创建工程,引入pom.xml依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<!--mybatis-plus依赖-->
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
</dependencies>
数据源配置:
spring: datasource:
druid:
driver-class-name: com.mysql.jdbc.Driver username: root
password: 123456
url: jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&characterEncoding=utf8&useSSL=false
max-active: 60 #连接池配置
到此,工程已经成功整合了mp。
二、mybatis-plus案例解析
1、创建实体类TbGoods
package com.mysoft.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
@Data
@TableName("tb_goods") //表名注解,标识实体类对应的表
public class TbGoods implements Serializable {
//主键注解
@TableId(type=IdType.AUTO)
private Integer goodsId;
//字段注解
@TableField("goods_stock")
//字段注解(非主键)
private Integer goodsStock;
//商品价格
private Double goodsPrice;
//商品名称
private String goodsName;
}
2、定义 GoodsMapper接口
package com.mysoft.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qf.entity.TbGoods;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface GoodsMapper extends BaseMapper<TbGoods> {
//以下可以自定义curd
}
3、单元测试
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class DemoTest{
// 声明商品操作对象
@Autowired
private GoodsMapper goodsMapper
/**
* 添加记录
*/
@Test
public void test1(){
TbGoods tbGoods=new TbGoods();
tbGoods.setGoodsStock(10);
tbGoods.setGoodsPrice(99.0);
tbGoods.setGoodsName("华为");
// 插入数据
int n=goodsMapper.insert(tbGoods);
}
}
4、sql日志输出配置application.yml
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #输出sql语句
三、mybatis-plus接口与分页应用
1、增删改查操作接口
(1)删除
@Test
publicvoid test2(){
// goodsMapper对象见上边2.3
int i =goodsMapper.deleteById(1);
}
@Test
publicvoid test3(){
ArrayList ids = new ArrayList<Integer>();
ids.add(2);
ids.add(3);
ids.add(4);
//批量删除
goodsMapper.deleteBatchIds(ids);
}
@Test
publicvoid test4(){
//where
Map where = new HashMap(){{
put("goods_name","小米");
put("price",199);
}};
goodsMapper.deleteByMap(where);
}
@Test
publicvoid test5(){
//条件构造器
UpdateWrapper<TbGoods> goodsUpdateWrapper = new UpdateWrapper<>();
goodsUpdateWrapper.gt("goods_price",100).or().likeRight("goods_name","小米");
goodsMapper.delete(goodsUpdateWrapper);
}
(2)修改
// goodsMapper对象见上边2.3
@Test
public void test6(){
TbGoods tbGoods=new TbGoods();
tbGoods.setGoodsId(7);
tbGoods.setGoodsName("小米");
tbGoods.setGoodsPrice(98.0);
goodsMapper.updateById(tbGoods);
}
@Test
public void test7(){
//条件构造器
UpdateWrapper<TbGoods> updateWrapper=new UpdateWrapper<>();
updateWrapper.set("goods_price",101).set("goods_name","苹果").ge("goods_stock",10);
// goodsMapper对象见上边2.3
goodsMapper.update(null,updateWrapper);
}
(3)查询
// goodsMapper对象见上边2.3
@Test
public void test8(){
TbGoodst bGoods=goodsMapper.selectById(7);
System.out.println(tbGoods);
}
@Test
public void test9(){
ArrayList ids=new ArrayList<Integer>();
ids.add(2);
ids.add(3);
ids.add(4);
goodsMapper.selectBatchIds(ids).forEach(System.out::println);
}
@Test
public void test10(){
//条件构造器
QueryWrapper<TbGoods> queryWrapper=new QueryWrapper<>();
queryWrapper.gt("goods_stock",10).eq("goods_name","小米");
// goodsMapper对象见上边2.3
List<TbGoods> tbGoods=goodsMapper.selectList(queryWrapper);
tbGoods.forEach(System.out::println);
}
//单表的条件+分页查询
@Test
public void test11(){
//分页信息
IPage<TbGoods> page=new Page<>(1,2);
//条件构造器
QueryWrapper<TbGoods> queryWrapper=new QueryWrapper<>();
queryWrapper.like("goods_name","苹果");
IPage<TbGoods> pageInfo=goodsMapper.selectPage(page,queryWrapper);
//取分页的信息
long total=pageInfo.getTotal();//总记录数
System.out.println(total);
long pages=pageInfo.getPages();//总页数
System.out.println(pages);
pageInfo.getRecords().forEach(System.out::println);//当前页数据
}
2、mybatis-plus分页功能
(1)添加查询
实体类Goods:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Goods{
private int goodsId;
private Double goodsPrice;
private String goodsName;
@TableField(fill=FieldFill.INSERT)
private Date createTime;
@TableField(fill=FieldFill.INSERT_UPDATE)
private Date updateTime;
}
实现MetaObjectHandler接口:
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler{
//insert
@Override
public void insertFill(MetaObjectmetaObject){
this.strictInsertFill(metaObject,"createTime",Date.class,newDate());
//起始版本3.3.0(推荐使用)
this.strictInsertFill(metaObject,"updateTime",Date.class,newDate());
//起始版本3.3.0(推荐使用)
}
//update
@Override
public void updateFill(MetaObject metaObject){
this.strictUpdateFill(metaObject,"updateTime",Date.class,newDate());
//起始版本3.3.0(推荐)
}
}
(2)分页查询
需求:分页+条件,展示订单及其商品信息。
定义接口OrderMapper:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qf.entity.TbOrder;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface OrderMapper extends BaseMapper<TbOrder>{
//需求:分页+条件展示订单及其商品信息
public IPage<TbOrder>
findOrderAndGoodsInfoByPage(@Param("page")IPage<TbOrder>page,@Param("tbOrder")TbOrdertbOrder);
}
定义OrderMapper.xml:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEmapper
PUBLIC"-//mybatis.org//DTDMapper3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mysoft.mapper.OrderMapper">
<!--//需求:分页+条件,展示订单及其商品信息
publicIPage<TbOrder>findOrderAndGoodsInfoByPage(@Param("page")
IPage<TbOrder>page,@Param("tbOrder")TbOrdertbOrder);-->
<resultMap id="findOrderAndGoodsInfoByPageMap" type="tborder">
<id property="orderId"column="order_id"></id>
<result column="order_num" property="orderNum"></result>
<association property="tbGoods" javaType="tbGoods">
<result property="goodsName" column="goods_name"></result>
</association>
</resultMap>
<select id="findOrderAndGoodsInfoByPage" resultMap="findOrderAndGoodsInfoByPageMap">
select * from tb_order left join tb_goods on tb_order.goods_id=tb_goods.goods_id
<where>
<if test="tbOrder.orderNum!=null">
and order_num=#{tbOrder.orderNum}
</if>
</where>
</select>
</mapper>
配置:
mapper-location: classpath*:/mappers/*.xml
type-aliases-package: com.mysoft.entity
单元测试:
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class DemoTest{
//声明订单操作对象
@Autowried
private OrderMappe orderMapper;
@Test
publicvoidtest12(){
//分页信息
IPage<TbOrder>page=new Page<>(1,2);
//where
TbOrder tbOrder=new TbOrder();
tbOrder.setOrderNum(2);
IPage<TbOrder> pageInfo = orderMapper.findOrderAndGoodsInfoByPage(page,tbOrder);
//取分页的信息
long total=pageInfo.getTotal();//总记录数
System.out.println(total);
long pages=pageInfo.getPages();//总页数
System.out.println(pages);
pageInfo.getRecords().forEach(System.out::println);//当前页数据
}
}
3、更多自定义查询
@SpringbootTest
public class MyTest{
@Test
publicvoidtest13(){
LambdaUpdateChainWrapper<TbGoods> updateChainWrapper=new
LambdaUpdateChainWrapper<>(goodsMapper);
updateChainWrapper.set(TbGoods::getGoodsName,"小米1")
.set(TbGoods::getGoodsPrice,199)
.eq(TbGoods::getGoodsId,7)
.update();
}
@Test
publicvoidtest14(){
LambdaUpdateChainWrapper<TbGoods> updateChainWrapper=new
LambdaUpdateChainWrapper<>(goodsMapper);
updateChainWrapper.eq(TbGoods::getGoodsId,7).remove();
}
@Test
publicvoidtest15(){
LambdaQueryChainWrapper<TbGoods> queryChainWrapper=new
LambdaQueryChainWrapper<>(goodsMapper);
queryChainWrapper.gt(TbGoods::getGoodsStock,9)
.list()
.forEach(System.out::println);
}
}
更多精彩内容请关注本站!!!