首页 > 其他分享 >SpringBoot集成MybatisPlus

SpringBoot集成MybatisPlus

时间:2023-02-16 10:45:08浏览次数:52  
标签:集成 COMMENT MybatisPlus SpringBoot private id Order order public

SpringBoot集成MybatisPlus

一、依赖

    <properties>
        <mybatis.plus.version>3.4.0</mybatis.plus.version>
    </properties>
	
    <dependencies>
	
        <!--mybatis-plus下面这两个依赖必须加-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis.plus.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
		
        <!--mybatis-plus以下依赖是拓展,比如分页插件-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-extension</artifactId>
            <version>${mybatis.plus.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-annotation</artifactId>
            <version>${mybatis.plus.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-core</artifactId>
            <version>${mybatis.plus.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>${mybatis.plus.version}</version>
        </dependency>
		
        <!--单元测试依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        
        
    </dependencies>

二、SpringBoot的数据表配置:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3607/my_db?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
spring.datasource.username=xxx
spring.datasource.password=xxx

三、创建数据表:

CREATE TABLE tb_order_test
(
    id          INT         NOT NULL AUTO_INCREMENT COMMENT '主键,自增id',
    order_id    VARCHAR(25) NOT NULL UNIQUE COMMENT '订单号,唯一',
    pay_status  INT UNSIGNED DEFAULT 0 COMMENT '10:未支付,20:支付成功,30:支付失败, 40:已下单,50:申请退款,60:退款成功,70:退款失败 ',
    user_id     BIGINT(20)  NOT NULL COMMENT '用户id',
    total_price DECIMAL(25, 2)   DEFAULT 0.00 COMMENT '交易金额',
    result      TEXT COMMENT '结果',
    order_desc  VARCHAR(128)     DEFAULT '' COMMENT '订单描述',
    order_date  DATE             DEFAULT NULL COMMENT '订单日期',
    create_time DATETIME         DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间,默认当前时间',
    update_time DATETIME         DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间,更新时默认当前时间',
    is_delete   TINYINT(1)       DEFAULT 0 COMMENT '是否删除,0表示否,1表示是',
    PRIMARY KEY (id),
    INDEX idx_order (order_id)
) ENGINE = INNODB
  DEFAULT CHARSET = utf8
  AUTO_INCREMENT = 1 COMMENT ='示例表';

四、实体类

注解 @TableName(),指定数据表名称。

@TableId(type = IdType.AUTO) : 表示自增id。

@TableField(fill = FieldFill.INSERT):插入填充字段。
@TableField(fill = FieldFill.UPDATE): 更新填充字段。

@TableField(fill = FieldFill.INSERT_UPDATE):插入和更新填充字段。

@TableName("tb_order_test")
public class Order {
	//此处忽略 getter、setter、构造方法,自行添加
	
	@TableId(type = IdType.AUTO)
    private Integer id;

    private String orderId;

    private Integer payStatus;

    private Long userId;

    private BigDecimal totalPrice;

    private String orderDesc;

    private Date orderDate;

	@TableField(fill = FieldFill.INSERT)
    private Date createTime;
	
	@TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    private Boolean isDelete;

    private String result;

}

五、扫描Mapper文件夹:

在spring boot启动类中添加@MapperScan注解,扫描Mapper接口的文件夹。

@SpringBootApplication(scanBasePackages = {"com.example.demo"})
@MapperScan(basePackages = { "com.example.demo.dao" })
public class demoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

六、Mapper接口:

  • 在mapper接口上方,添加 @Mapper注解
  • Mapper接口,继承 BaseMapper
  • mybatisPlus,不需要配置xml文件。
@Mapper
public interface OrderMapper extends BaseMapper<Order> {

}

七、增删改查

  • 普通的增删改查:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = DemoApplication.class)
public class MybatisPlusTest {

    @Autowired
    private OrderMapper orderMapper;

    @Test
    public void selectAll() {
        List<Order> orderList = orderMapper.selectList(null);
        System.out.println(orderList);
    }

    @Test
    public void selectById() {
        Order order = orderMapper.selectById(123456);
        System.out.println(order);
    }


    @Test
    public void insert() {
        Order order = new Order();
        order.setOrderId("sdfdfegegergb");
        order.setTotalPrice(new BigDecimal("99.3"));
        order.setUserId(789012L);

        orderMapper.insert(order);
        System.out.println(order);
    }

    @Test
    public void updateById() {
        Order order = new Order();
        order.setId(1);
        order.setOrderDesc("update");
        orderMapper.updateById(order);
    }

    @Test
    public void delete() {
        orderMapper.deleteById(1L);
    }

}

八、条件查询

QueryWrapper条件查询:

eq:等于
ne:不等于
gt:大于 
ge:大于等于
lt:小于
le:小于等于
between and:区间查询
like:模糊查询
notLike:模糊查询
likeLeft:左模糊
likeRight: 右模糊
in:范围查询
orderByDesc:降序
orderByAsc: 升序

代码示例如下 :

    /**
     * SELECT id,order_id,pay_status,user_id,total_price,order_desc,order_date,create_time,update_time,is_delete,result
     * FROM
     *   tb_order_test
     * WHERE
     *   user_id = 789012
     * ORDER BY
     *   create_time DESC
     *
     */
    @Test
    public void selectByWrapper() {
        QueryWrapper<Order> queryWrapper = new QueryWrapper<>();
        LambdaQueryWrapper<Order> wrapper = queryWrapper.lambda();
        //等于
        wrapper.eq(Order::getUserId, 789012L);
        wrapper.orderByDesc(Order::getCreateTime);
        List<Order> orderList = orderMapper.selectList(queryWrapper);
        System.out.println(orderList);
    }

    /**
     * 以下代码,相当于sql:
     * SELECT id,order_id,pay_status,user_id,total_price,order_desc,order_date,create_time,update_time,is_delete,result
     * FROM
     *   tb_order_test
     * WHERE
     *   user_id >= 10000
     *   AND pay_status IN (1, 2, 3)
     *   AND total_price BETWEEN 1.0 AND 1000.0
     * ORDER BY
     *   create_time ASC
     */
    @Test
    public void selectWrapper() {
        QueryWrapper<Order> queryWrapper = new QueryWrapper<>();
        LambdaQueryWrapper<Order> wrapper = queryWrapper.lambda();
        wrapper.ge(Order::getUserId, 10000);
        wrapper.in(Order::getPayStatus, 1, 2, 3);
        wrapper.between(Order::getTotalPrice, 1.0, 1000.0);
        wrapper.orderByAsc(Order::getCreateTime);
        List<Order> orderList = orderMapper.selectList(queryWrapper);
        System.out.println(orderList);
    }

九、分页常用的方法:

Page.java :

    /**
     * 分页构造函数
     *
     * @param current 当前页
     * @param size    每页显示条数
     */
    public Page(long current, long size) {
        this(current, size, 0);
    }
   
   /**
     * 查询数据列表
     */
   @Override
    public List<T> getRecords() {
        return this.records;
    }
    
    /**
     * 数据的总数
     */
    @Override
    public long getTotal() {
        return this.total;
    }
    
    /**
     * 每页显示条数,默认 10
     */
    @Override
    public long getSize() {
        return this.size;
    }
    
    /**
     * 当前页
     */
    @Override
    public long getCurrent() {
        return this.current;
    }
    
    /**
     * 当前分页总页数
     */
    default long getPages() {
        if (getSize() == 0) {
            return 0L;
        }
        long pages = getTotal() / getSize();
        if (getTotal() % getSize() != 0) {
            pages++;
        }
        return pages;
    }

BaseMapper 查询分页结果:selectPage 第一个参数是分页page,第二个参数是查询条件

<E extends IPage<T>> E selectPage(E page, @Param("ew") Wrapper<T> queryWrapper);

分页的示例

    @Test
    public void page() {
        //Page第一个参数current表示第几页,从1开始。size表示每页多少条。
        Page<Order> pageQuery = new Page<>(1,10);
        //selectPage 第一个参数是分页page,第二个参数是查询条件
        Page<Order> page = orderMapper.selectPage(pageQuery, null);
        //分页返回的数据
        List<Order> records = page.getRecords();
        //数据的总数
        long total = page.getTotal();
        //每页数量
        long size = page.getSize();
        //当前页
        long current = page.getCurrent();
        //总页数
        long pages = page.getPages();

        System.out.println("分页返回的数据:"+records);
        System.out.println("数据的总数:"+ total);
        System.out.println("每页数量:"+size);
        System.out.println("当前页:"+ current);
        System.out.println("总页数:"+ pages);

    }

十、MybatisPlus 报错:

  • 报错如下:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: 
Could not set property 'id' of '' with value '' 
Cause: java.lang.IllegalArgumentException: argument type mismatch

解决方法:

字段上面加上注解 @TableId(type = IdType.AUTO)

参考资料:

https://blog.csdn.net/m0_46313726/article/details/124187527

标签:集成,COMMENT,MybatisPlus,SpringBoot,private,id,Order,order,public
From: https://www.cnblogs.com/expiator/p/17125880.html

相关文章

  • 华为IPD集成产品开发流程
    IPD,即集成产品开发,来源于美国PRTM公司的PACE理论,如今已经成为一套包含企业产品开发的思想、模式、工具的系统工程。本文作者以华为为例,对IPD集成产品开发体系进行了分析,......
  • 简单-SpringBoot整合RabbitMQ
    目录1.windows下安装erlang环境和rabbitMq服务1.1客户端页面2.准备工作2.1pom依赖2.1启动类注解开启:@EnableRabbit2.2application配置文件3.队列的简单使用3.1配置交换器......
  • SpringBoot容器化的多环境配置
    SpringBoot容器化的多环境配置部署通常会有多个环境,如"dev"/"test"/"prod"等环境容器化部署通常使用环境变量,而非手动修改配置例子来自《SpringBoot实战派》中,并进行......
  • springboot--多环境启动
    法一:   法二:       ......
  • springboot starter 原理解析及实践
    什么是springbootstarterstarter是springBoot的一个重要部分。通过starter,我们能够快速的引入一个功能,而无需额外的配置。同时starter一般还会给我提供预留的自定配置选......
  • MybatisPlus查询条件设置详解
    select设置需要查询的字段例: 指定查询主键,名字,年龄字段select("id", "name", "age")例: 查询以test开头的属性select(i ‐> i.getProperty().startsWith("t......
  • springboot切换web服务器
    <?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:s......
  • SpringBoot整合MyBatis
    SpringBoot整合MyBatis在pom文件中添加以下坐标,增加mybatis依赖,和数据库驱动依赖<!--导入Mybatis依赖坐标--><dependency><groupId>org.mybatis.spring.boot</gr......
  • SpringBoot注册Servlet、Filter和Listener的方式和原理
    1实战在SpringBoot项目中,如果使用内嵌Web服务器,可以很方便地注册Servlet、Filter和Listener等组件。总的来说,包括以下方式:创建实现ServletContextInitializer接口的b......
  • SpringBoot---起步依赖starter
    1、简化spring应用的初始搭建和开发过程。springboot程序优点:自动配置、起步依赖(简化依赖配置)、辅助功能(内置服务器...)<?xmlversion="1.0"encoding="UTF-8"?><pro......