SpringBoot(十二):SpringBoot整合Mybatis-Plus


本節版本雖然只用到了基本特性,但可以滿足大部分的增刪改查。

一、環境准備
SpringBoot 1.5.10.RELEASE
Mybatis-Plus 2.1.9
Mybatis-Plus 官方地址:http://mp.baomidou.com/

pom依賴,為了方便,全貼出來吧:

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.demo</groupId>
  <artifactId>spriingboot_mybatis_plus</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.10.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <log4j.version>1.3.8.RELEASE</log4j.version>
        <druid.version>1.0.26</druid.version>
        <mybatis-plus.version>2.1.9</mybatis-plus.version>
        <mybatisplus-spring-boot-starter.version>1.0.5</mybatisplus-spring-boot-starter.version>
    </properties>

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

        <!-- druid數據庫連接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>

        <!-- mysql connector -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!-- Mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatisplus-spring-boot-starter</artifactId>
            <version>${mybatisplus-spring-boot-starter.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>

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

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

</project>

二、項目結構

先列出最初始的項目結構,至於model,mapper,service,mapper xml,controller之后都自動生成出來。

 

 

三、代碼詳情
數據准備

在test庫建一個user表。

CREATE TABLE `user` (
`id` bigint(20) NOT NULL COMMENT '用戶ID',
`name` varchar(50) DEFAULT NULL COMMENT '用戶名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶表'

insert into `user` (`id`, `name`) values('1','張三');
insert into `user` (`id`, `name`) values('2','李四');
insert into `user` (`id`, `name`) values('3','王五')

application.yml:

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.1.20:3306/test
    username: root
    password: root123

mybatis-plus:
  # 如果是放在src/main/java目錄下 classpath:/com/yourpackage/*/mapper/*Mapper.xml
  # 如果是放在resource目錄 classpath:/mapper/*Mapper.xml
  mapper-locations: classpath:mybatis/mappers/*Mapper.xml
  #實體掃描,多個package用逗號或者分號分隔
  typeAliasesPackage: cn.demo.model
  global-config:
    #主鍵類型  0:"數據庫ID自增", 1:"用戶輸入ID",2:"全局唯一ID (數字類型唯一ID)", 3:"全局唯一ID UUID";
    id-type: 0
    #字段策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷"
    field-strategy: 1
    #駝峰下划線轉換
    #db-column-underline: true
    #刷新mapper 調試神器
    refresh-mapper: true
    #數據庫大寫下划線轉換
    #capital-mode: true
    #Sequence序列接口實現類配置
    #key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator
    #邏輯刪除配置(下面3個配置)
    #logic-delete-value: 1
    #logic-not-delete-value: 0
    #sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
    #自定義填充策略接口實現
    #meta-object-handler: com.baomidou.springboot.MyMetaObjectHandler
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false
    #配置JdbcTypeForNull
    jdbc-type-for-null: 'null'
    
logging.level.com.demo.mapper: debug

druid.properties:

#--------------------------
# 下面為連接池的補充設置,應用到上面所有數據源中
# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=1
spring.datasource.maxActive=50
# 配置獲取連接等待超時的時間
spring.datasource.maxWait=60000
# 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一個連接在池中最小生存的時間,單位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 打開PSCache,並且指定每個連接上PSCache的大小
spring.datasource.poolPreparedStatements=false
#spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用於防火牆
spring.datasource.filters=stat,wall,log4j
# 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合並多個DruidDataSource的監控數據
#spring.datasource.useGlobalDataSourceStat=true

DruidConfiguration.java

由於這里不用controller接口方式演示,使用test演示,沒引入starter-web,所以druid的servlet暫時注釋,有要用的可以打開,加入依賴即可。

package cn.demo.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;

/**
 * @ClassName cn.saytime.config.DruidConfiguration
 * @Description
 */
@Configuration
@PropertySource(value = "classpath:druid.properties")
public class DruidConfiguration {

    @Bean(destroyMethod = "close", initMethod = "init")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }

//
//  /**
//   * 注冊一個StatViewServlet
//   *
//   * @return
//   */
//  @Bean
//  public ServletRegistrationBean druidStatViewServlet() {
//      //org.springframework.boot.context.embedded.ServletRegistrationBean提供類的進行注冊.
//      ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
//
//      //添加初始化參數:initParams
//      //白名單:
//      servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
//      //IP黑名單 (存在共同時,deny優先於allow) : 如果滿足deny的話提示:Sorry, you are not permitted to view this page.
////        servletRegistrationBean.addInitParameter("deny", "192.168.1.73");
//      //登錄查看信息的賬號密碼.
//      servletRegistrationBean.addInitParameter("loginUsername", "admin");
//      servletRegistrationBean.addInitParameter("loginPassword", "123456");
//      //是否能夠重置數據.
//      servletRegistrationBean.addInitParameter("resetEnable", "false");
//      return servletRegistrationBean;
//  }
//
//  /**
//   * 注冊一個:filterRegistrationBean
//   *
//   * @return
//   */
//  @Bean
//  public FilterRegistrationBean druidStatFilter() {
//
//      FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
//
//      //添加過濾規則.
//      filterRegistrationBean.addUrlPatterns("/*");
//
//      //添加不需要忽略的格式信息.
//      filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
//      return filterRegistrationBean;
//  }
    
}

MybatisConfiguration.java :注意這里的MapperScan,換成你項目mapper文件夾路徑

package cn.demo.config;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author zh
 * @ClassName cn.saytime.config.MybatisConfiguration
 * @Description
 */
@Configuration
@MapperScan("cn.demo.mapper*")
public class MybatisConfiguration {

    /*
    * 分頁插件,自動識別數據庫類型
    * 多租戶,請參考官網【插件擴展】
    */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

   /*
    * oracle數據庫配置JdbcTypeForNull
    * 參考:https://gitee.com/baomidou/mybatisplus-boot-starter/issues/IHS8X
    不需要這樣配置了,參考 yml:
    mybatis-plus:
      confuguration
        dbc-type-for-null: 'null'
   @Bean
   public ConfigurationCustomizer configurationCustomizer(){
       return new MybatisPlusCustomizers();
   }

   class MybatisPlusCustomizers implements ConfigurationCustomizer {

       @Override
       public void customize(org.apache.ibatis.session.Configuration configuration) {
           configuration.setJdbcTypeForNull(JdbcType.NULL);
       }
   }
   */

}

自動生成代碼工具類Generator.java(換成數據庫鏈接以及輸出路徑即可。)

package cn.demo.utils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

//根據表名自動生成java文件
public class Generator {

    public static void main(String[] args) {
        String packageName = "cn.demo";
        boolean serviceNameStartWithI = false;
        generateByTables(serviceNameStartWithI, packageName, "li", "test", "user");//li作者。test數據庫名。user表名。
        System.out.println("completed...");
    }

    /**
     * @param serviceNameStartWithI
     * @param packageName   包名
     * @param author  作者
     * @param database  數據庫名
     * @param tableNames 表名
     */
    private static void generateByTables(boolean serviceNameStartWithI, String packageName, String author, String database, String... tableNames) {
        GlobalConfig config = new GlobalConfig();
        String dbUrl = "jdbc:mysql://192.168.1.20:3306/" + database + "?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false";
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL)
                .setUrl(dbUrl)
                .setUsername("root")
                .setPassword("root123")
                .setDriverName("com.mysql.jdbc.Driver");
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig
                .setCapitalMode(true)
                .setEntityLombokModel(false)
                .setDbColumnUnderline(true)
                .setNaming(NamingStrategy.underline_to_camel)
//              .setSuperMapperClass("cn.saytime.mapper.BaseMapper")
                .setInclude(tableNames);//修改替換成你需要的表名,多個表名傳數組
        config.setActiveRecord(false)
                .setAuthor(author)
                .setOutputDir("e:\\codeGen")//生成的java到文件夾下
                .setFileOverride(true)
                .setEnableCache(false);
        if (!serviceNameStartWithI) {
            config.setServiceName("%sService");
        }
        new AutoGenerator().setGlobalConfig(config)
                .setDataSource(dataSourceConfig)
                .setStrategy(strategyConfig)
                .setPackageInfo(
                        new PackageConfig()
                                .setParent(packageName)
                                .setController("web")//生成的代碼到文件夾下cn.demo.web
                                .setEntity("model")
                                .setMapper("mapper")
                                .setService("service")
                                .setServiceImpl("service.impl")
                                .setXml("mybatis.mappers")
                ).execute();
    }

}

四、自動生成代碼

執行Generator Main方法,到輸出路徑,可以看到代碼文件已經生成好了:

 

 將model,mapper,service拷貝到cn.demo目錄下,將mybatis/mappers文件夾拷貝到src/main/resources目錄下.

五、測試

SpringbootMybatisPlusApplicationTests.java

package cn.demo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import cn.demo.model.User;
import cn.demo.service.UserService;

import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootMybatisPlusApplicationTests {

    @Autowired
    private UserService userService;

    @Test
    public void contextLoads() {

        // 所有用戶
        List<User> users = userService.selectList(null);
        System.out.println(users);
        
        //查詢id=1的用戶
        User user = userService.selectById(1);
        System.out.println("users1=="+user);
    }

}

輸出結果:

 

 

六、更多使用方式
列舉幾種常用的增刪改查方式,其實最快的方式就是去官網看示例。

查詢id=1的用戶
User user = userService.selectById(1);


查詢name=張三的用戶
User user = userService.selectOne(new EntityWrapper<User>().eq("name", "張三"));


查詢id>1的用戶
List<User> userList = userService.selectList(new EntityWrapper<User>().gt("id", 1));
修改id=1的用戶名
User user = userService.selectById(1);
user.setName("張三2");
boolean b = userService.updateById(user);

添加用戶
User user = new User();
user.setName("趙六");
boolean insert = userService.insert(user);

刪除用戶
boolean b = userService.deleteById(1);

分頁查詢用戶
查詢id>1 每頁一條數據,第二頁,也就是第三條數據。

Page<User> userPage = new Page<>();

userPage.setCurrent(2);
userPage.setSize(1);
userService.selectPage(userPage, new EntityWrapper<User>().gt("id", 1));
List<User> userList = userPage.getRecords();
System.out.println(userList);
[User{, id=3, name=王五}]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM