spring boot 整合mybatis 的xml版本【包括逆向工程以及分頁插件】

  • 2019 年 10 月 3 日
  • 筆記

逆向工程很方便,可以直接根據資料庫和配置文件生成pojo,mapper介面和相應的映射文件。

xml版本和全註解版本其實差不多,大部分情況下,都會保留xml文件方便其他人去擴展新的dml方法。

文章旨在記錄ssm項目的搭建過程,除了本文所提到的逆向工程極大的方便了應用的開發效率,還有兩個比較常用的mybatis擴展框架。

好了,廢話不多說,下面就是完整的搭建過程。

首先是項目的依賴,完整的pom文件如下:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">      <modelVersion>4.0.0</modelVersion>        <groupId>com.example</groupId>      <artifactId>demo-boot-mybatis-xml</artifactId>      <version>1.0-SNAPSHOT</version>        <parent>          <groupId>org.springframework.boot</groupId>          <artifactId>spring-boot-starter-parent</artifactId>          <version>2.1.3.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>      </properties>        <dependencies>          <dependency>              <groupId>org.mybatis.spring.boot</groupId>              <artifactId>mybatis-spring-boot-starter</artifactId>              <version>2.0.1</version>          </dependency>            <dependency>              <groupId>org.springframework.boot</groupId>              <artifactId>spring-boot-starter-web</artifactId>          </dependency>            <dependency>              <groupId>org.springframework.boot</groupId>              <artifactId>spring-boot-starter-test</artifactId>              <scope>test</scope>          </dependency>            <dependency>              <groupId>mysql</groupId>              <artifactId>mysql-connector-java</artifactId>              <version>5.1.35</version>          </dependency>            <!-- 分頁插件 -->          <dependency>              <groupId>com.github.pagehelper</groupId>              <artifactId>pagehelper-spring-boot-starter</artifactId>              <version>1.2.10</version>          </dependency>            <!-- alibaba的druid資料庫連接池 -->          <dependency>              <groupId>com.alibaba</groupId>              <artifactId>druid-spring-boot-starter</artifactId>              <version>1.1.16</version>          </dependency>      </dependencies>        <build>          <plugins>              <plugin>                  <groupId>org.springframework.boot</groupId>                  <artifactId>spring-boot-maven-plugin</artifactId>              </plugin>              <!-- mybatis generator 自動生成程式碼插件 -->              <plugin>                  <groupId>org.mybatis.generator</groupId>                  <artifactId>mybatis-generator-maven-plugin</artifactId>                  <version>1.3.5</version>                  <configuration>                      <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>                      <overwrite>true</overwrite>                      <verbose>true</verbose>                  </configuration>              </plugin>          </plugins>      </build>      </project>

application.yml文件配置

server:    port: 8080    spring:      datasource:      name: test      type: com.alibaba.druid.pool.DruidDataSource      druid:        driver-class-name: com.mysql.jdbc.Driver        url: jdbc:mysql://127.0.0.1:3306/db_test?useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=GMT%2B8        username: root        password: root      mybatis:    mapper-locations: classpath:mapper/*.xml  #注意:一定要對應mapper映射xml文件的所在路徑    type-aliases-package: com.example.model  # 注意:對應實體類的路徑    #pagehelper分頁插件  pagehelper:    helperDialect: mysql    reasonable: true    supportMethodsArguments: true    params: count=countSql  

測試的資料庫腳本

CREATE TABLE t_user(    user_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,    user_name VARCHAR(255) NOT NULL ,    password VARCHAR(255) NOT NULL ,    phone VARCHAR(255) NOT NULL  ) ENGINE=INNODB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;  

配置mybatis-generator自動生成程式碼的相關配置

${basedir}/src/main/resources/generator/generatorConfig.xml

<?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE generatorConfiguration          PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"          "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">  <generatorConfiguration>      <!-- 資料庫驅動:選擇你的本地硬碟上面的資料庫驅動包-->      <classPathEntry  location="D:coderepositorymysqlmysql-connector-java5.1.47mysql-connector-java-5.1.47.jar"/>      <context id="DB2Tables"  targetRuntime="MyBatis3">          <commentGenerator>              <property name="suppressDate" value="true"/>              <!-- 是否去除自動生成的注釋 true:是 : false:否 -->              <property name="suppressAllComments" value="true"/>          </commentGenerator>            <!--資料庫鏈接URL,用戶名、密碼 -->          <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/db_test?characterEncoding=utf-8" userId="root" password="root"/>          <javaTypeResolver>              <property name="forceBigDecimals" value="false"/>          </javaTypeResolver>            <!-- 生成模型的包名和位置-->          <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java">              <property name="enableSubPackages" value="true"/>              <property name="trimStrings" value="true"/>          </javaModelGenerator>            <!-- 生成映射文件的包名和位置-->          <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">              <property name="enableSubPackages" value="true"/>          </sqlMapGenerator>            <!-- 生成DAO的包名和位置-->          <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java">              <property name="enableSubPackages" value="true"/>          </javaClientGenerator>              <!-- 要生成的表 tableName是資料庫中的表名或視圖名 domainObjectName是實體類名-->          <table tableName="t_user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>      </context>  </generatorConfiguration>

運行maven插件org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate

"C:Program FilesJavajdk1.8.0_191binjava.exe" -Dmaven.multiModuleProjectDirectory=D:ideaworkspace_demodemo-boot-mybatis-xml -Dmaven.home=D:softwareideapluginsmavenlibmaven3 -Dclassworlds.conf=D:softwareideapluginsmavenlibmaven3binm2.conf -javaagent:D:softwareidealibidea_rt.jar=6721:D:softwareideabin -Dfile.encoding=UTF-8 -classpath D:softwareideapluginsmavenlibmaven3bootplexus-classworlds-2.5.2.jar org.codehaus.classworlds.Launcher -Didea.version=2018.3.5 org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate  [INFO] Scanning for projects...  [INFO]  [INFO] ------------------------------------------------------------------------  [INFO] Building demo-boot-mybatis-xml 1.0-SNAPSHOT  [INFO] ------------------------------------------------------------------------  [INFO]  [INFO] --- mybatis-generator-maven-plugin:1.3.2:generate (default-cli) @ demo-boot-mybatis-xml ---  [INFO] Connecting to the Database  Tue Apr 09 11:16:14 CST 2019 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.  [INFO] Introspecting table t_user  log4j:WARN No appenders could be found for logger (org.mybatis.generator.internal.db.DatabaseIntrospector).  log4j:WARN Please initialize the log4j system properly.  log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.  [INFO] Generating Record class for table t_user  [INFO] Generating Mapper Interface for table t_user  [INFO] Generating SQL Map for table t_user  [INFO] Saving file UserMapper.xml  [INFO] Saving file User.java  [INFO] Saving file UserMapper.java  [INFO] ------------------------------------------------------------------------  [INFO] BUILD SUCCESS  [INFO] ------------------------------------------------------------------------  [INFO] Total time: 1.180 s  [INFO] Finished at: 2019-04-09T11:16:14+08:00  [INFO] Final Memory: 15M/245M  [INFO] ------------------------------------------------------------------------    Process finished with exit code 0  

以上步驟就可以使用generator自動生成model和dao層的程式碼了。

把mybatis的mapper加入到IoC容器中。

package com.example;    import org.mybatis.spring.annotation.MapperScan;  import org.springframework.boot.SpringApplication;  import org.springframework.boot.autoconfigure.SpringBootApplication;    @SpringBootApplication  //此註解會把該包下的mapper添加到spring的ioc容器中  @MapperScan("com.example.mapper")  public class MybatisApplication {      public static void main(String[] args) {          SpringApplication.run(MybatisApplication.class, args);      }  }  
package com.example.mapper;    import com.example.model.User;  import org.springframework.stereotype.Repository;    import java.util.List;    public interface UserMapper {      int deleteByPrimaryKey(Integer userId);        int insert(User record);        int insertSelective(User record);        User selectByPrimaryKey(Integer userId);        int updateByPrimaryKeySelective(User record);        int updateByPrimaryKey(User record);        List<User> selectAll();  }

以上就是項目的基本搭建過程,idea可能會提示mapper無法注入,因為idea並不知道MapperScan註解已經把那些介面添加到容器中了,實際並不影響正常運行。

項目源碼:https://github.com/lingEric/demo-boot-mybatis-xml