springboot整合MybatisPlus基本使用

1.创建springboot项目并导入依赖

这里主要是导入mybatisPlus和数据库驱动,这是整合的关键。集成mybatis-plus要把mybatis、mybatis-spring去掉,避免冲突。mybatisPlus的依赖已经包含了。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.hzu</groupId>
    <artifactId>springboot_mp</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot_mp</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <!--mybatisPlus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.1</version>
        </dependency>

        <!--数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.application.yml

#DataSourcespring:
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis_plus?userSSL=true&useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT
    username: root
    password: 123456

3.配置日志

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
        </layout>
    </appender>

    <logger name="cn.hzu" level="TRACE"/>


    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

4.编写实体类

package cn.hzu.springboot_mp.bean;

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 lombok.NoArgsConstructor;
import lombok.ToString;

/**
 * <p>
 * 用户实体对应表 user(默认表名对应)
 * </p>
 * 实体类常用的注解
 * @TableName(value="表名")     贴在实体类上,当实体名与表明不同时,使用@TableName(value="表名")为实体类指定表
 * @TableId                       贴在实体属性上
 *      value:指定表中的主键类的列名,若实体属性名与列名一致,则可以不指定
 *      type:指定主键生成策略,一般指定自增
 * @TableField                    贴在实体属性上
 *       value:指定表的列名
 *       exist: 指定实体属性是否有对应的表的列,默认为true
 */
@Data
@ToString(exclude="abc")
@NoArgsConstructor
@TableName(value ="u_user" )
public class User {
    @TableId(value="u_id" , type = IdType.AUTO)
    private Long id;
    @TableField(value = "u_name")
    private String name;
    @TableField(value = "u_age")
    private Integer age;
    @TableField(value = "u_email")
    private String email;
    @TableField(exist = false)
    private Integer abc;
}

5.mapper接口

继承BaseMapper接口才可以使用MybatisPlus的强大的通用CRUD,接口的泛型是你要操作的类

package cn.hzu.springboot_mp.mapper;


import cn.hzu.springboot_mp.bean.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Component;

/**
 * <p>
 * MP 支持不需要 UserMapper.xml,复杂的操作还是依旧可以使用xml文件,跟mybatis一样
 * </p>
 *
 */
public interface UserMapper extends BaseMapper<User> {

}

5.编写配置类

扫描mapper接口,也可以在主程序类扫描。这个配置类可以配置其他mybatis的东西

package cn.hzu.springboot_mp.config;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan("cn.hzu.springboot_mp.mapper")
public class MybatisPlusConfig {


}

5.数据库表结构

在这里插入图片描述

6.集成完成,编写测试类

这里只使用了基本的CRUD,强大的条件构造器没写例子。

package cn.hzu.springboot_mp;

import cn.hzu.springboot_mp.bean.User;
import cn.hzu.springboot_mp.mapper.UserMapper;
import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@SpringBootTest
class SpringbootMpApplicationTests {
    @Autowired
    UserMapper userMapper;
    @Autowired
    ApplicationContext applicationContext;

    @Test
    void contextLoads() {
        /**
         * 通用插入操作方法
         * 这两个方法都会返回自动生成的主键,不需要指定
         * 1.insert    在插入时会根据实体的每个属性进行判断,只有非空属性对应的字段才会插入
         *              sql语句:INSERT INTO u_user ( u_name, u_age ) VALUES ( ?, ? )
         * 2.insertAllColumn方法在插入时, 不管属性是否非空, 属性所对应的字段都会出现到SQL语句中.
         *               sql语句:INSERT INTO u_user ( u_name, u_age,u_email ) VALUES ( ?, ? ,?)
         * Mybatis-plus从2.x 升级到 3.x 后的变化还是比较大的,其中就删除了UpdateAllColumnById方法还有insertAllColumn方法
         * User user=new User();
         * user.setAge(18);
         * user.setName("xiaoming");
         * userMapper.insert(user);
         */
//            User user=new User();
//            user.setAge(18);
//            user.setEmail("xxx");
//            user.setName("xiaoming");
//            userMapper.insert(user);
//            System.out.println(user.getId());


        /*
        *       通用的更新从操作
        *       跟前面的insert操作类似
        *       1.updateById            在更新时只对非空属性进行更新,这里我没有设置email的值,所以不更新,email还是保留原来的值
        *                   sql;UPDATE u_user SET u_name=?, u_age=? WHERE u_id=?
        *       2.updateAllColumnById   在更新时更新全部字段
        *                   sql:UPDATE u_user SET u_name=?, u_age=? ,u_email=? WHERE u_id=?
        *       User user=new User();
                user.setId(1L);
                user.setAge(17);
                user.setName("xiaoming");
                userMapper.updateById(user);
        * */
//            User user=new User();
//            user.setId(1L);
//            user.setAge(17);
//            user.setName("xiaoming");
//            userMapper.updateById(user);

        /*
         *   通用的删除操作
         *   1.deleteById         根据id删除
         *      sql:DELETE FROM u_user WHERE u_id=?
         *       userMapper.deleteById(2L);
         *   2.deleteByMap        根据条件删除
         *      sql:DELETE FROM u_user WHERE u_name = ? AND u_email = ?
         *            Map<String,Object> columnMap = new HashMap<>();
                    //这里的条件的key应该写表的列名而不是实体属性名
                    // 这里的条件只能是AND连接,若要使用or,like,between等条件,请期待后面的条件构造器
                    columnMap.put("u_name", "hhh");
                    columnMap.put("u_email", "12");
                    Integer result = userMapper.deleteByMap(columnMap);
         *   3.deleteBatchIds     根据id批量删除
         *      sql:DELETE FROM u_user WHERE u_id IN ( ? , ? , ? )
         *      List<Integer> idList = new ArrayList<>();
                idList.add(3);
                idList.add(4);
                idList.add(5);
                Integer result = userMapper.deleteBatchIds(idList);
                System.out.println("result: " + result );
         * */

        /*
        *       通用的查询操作
        *       1.selectById            根据id查询
        *           sql:SELECT u_id AS id,u_name AS name,u_age AS age,u_email AS email FROM u_user WHERE u_id
        *       2.selectOne             指定多个列查询,将要查询的条件封装成一个实体对象传入(条件是用AND的连接),新版已经删掉这个方法了,将其改造成条件构造器查询,请期待下面的内容
        *       3.selectBatchIds        通过多个id进行查询 返回一个List集合
        *           sql:SELECT u_id AS id,u_name AS name,u_age AS age,u_email AS email FROM u_user WHERE u_id IN ( ? , ? )
         *              List<Integer> idList = new ArrayList<>();
                        idList.add(1);
                        idList.add(2);
                        List<User> users = userMapper.selectBatchIds(idList);
                        System.out.println(users);

          *      4.selectByMap           通过Map封装条件查询(同样是用AND连接条件),跟上面的删除用法一样 返回一个List集合
        *               sql:SELECT u_id AS id,u_name AS name,u_age AS age,u_email AS email FROM u_user WHERE u_name = ? AND u_age = ?
        *                 Map<String,Object> columnMap = new HashMap<>();
                            columnMap.put("u_name", "小明");
                            columnMap.put("u_age", 1);
                            List<User> users = userMapper.selectByMap(columnMap);
                            System.out.println(users);
        *       5.selectPage            分页查询   这个方法在新版也已经改了
        *       老版的参数selectPage(new Page<>(3, 2), null)     不带条件的分页查询,条件设置为null,传入当前页和每页的大小
        *       新版的两个分页方法已经把分页插件集成进来了,删除了之前的两个分页方法
         *
         *
         *  之前分页插件的用法,导包,配置
         *
         *      @Configuration
                    public class MybatisPlusConfig {
                    @Bean
                    public PaginationInterceptor paginationInterceptor() {
                    return new PaginationInterceptor();
                            }
                         }
         *
         *      测试
         *      @Test
             public void selectPage() {
            QueryWrapper<User> wrapper = new QueryWrapper<>();
            wrapper.ge("age",26);
            Page<User> page = new Page<>(1, 2);
            IPage<User> userIPage = userMapper.selectPage(page, wrapper);
            System.out.println("总条数"+userIPage.getTotal());
            System.out.println("总页数"+userIPage.getPages());
            }

            @Test
            public void selectPage() {
            QueryWrapper<User> wrapper = new QueryWrapper<>();
            wrapper.ge("age",26);
            Page<User> page = new Page<>(1, 2);
            IPage<Map<String,Object>> userIPage = userMapper.selectMapsPage(page, wrapper);
            System.out.println("总条数"+userIPage.getTotal());
            System.out.println("总页数"+userIPage.getPages());
        }
         *
          * */
    }

//==============================条件构造器=====================================================
      /*
      *     妈的。mybatisPlus2.x版本跟3.x版本差别太大了,除了前面的几个通用crud改变外,字要命的是实体构造器基本都变了,基本重写了
      *     2.x版本的实体构造体使用EntityWrapper  以及condition 这两个,3.x之后集成关系更加复杂了,功能也更加强大了,常用的是
      *     QueryWrapper  UpdateWrapper   太多实体构造器了,版本更新太快了
      *
      *
      * */
        @Test
        public void testWrapper(){
            /**
             * 条件构造器  删除操作
             * 源码的方法  int delete(@Param("ew") Wrapper<T> wrapper);
             * 参数:条件构造器
             */







        }


}





7.项目结构

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值