天天看點

SpringBoot+Mybatis+Generator 逆向工程使用(二)Mybatis-Genarator 逆向工程使用

Mybatis-Genarator 逆向工程使用

個人開發環境

java環境:Jdk1.8.0_60

編譯器:IntelliJ IDEA 2017.1.4

mysql驅動:mysql-connector-java-5.1.39.jar (用于你逆向工程使用)

Genarator 版本:mybatis-generator-maven-plugin (1.3.6)

源碼連接配接:待整理

第一步 添加依賴

<!--springBoot相關-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>

    <!--約定版本-->
    <properties>
        <mybatis-spring-boot>1.2.0</mybatis-spring-boot>
        <mysql-connector>5.1.39</mysql-connector>
    </properties>

    <dependencies>
        <!--springBoot相關-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--mybatis相關-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis-spring-boot}</version>
        </dependency>

        <!--mysql驅動相關-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>

        <!--pojo實用小插件-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <!--依賴不傳遞-->
            <optional>true</optional>
        </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.6</version>
                <configuration>         <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                    <verbose>true</verbose>
                </configuration>
            </plugin>
        </plugins>
    </build>
           

copy

第二步 配置檔案

springboot 配置檔案:application.yml(src/main/resources/application.yml)

server:
  # 服務端口
  port: 8083

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/springcloud-mybatis
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

# Mybatis 配置
mybatis:
  typeAliasesPackage: com.fame.entity
  mapperLocations: classpath:mapper/*.xml

# 列印sql
logging:
  level:
     # 配置mapper接口的包路徑
     com.fame.mapper : debug
           

copy

mybatis逆向工程配置檔案:generatorConfig.xml(src/main/resources/generator/generatorConfig.xml)

1)配置資料資訊 2)修改相關包名 3)配置相關表屬性

<?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>
    <!--mysql 連接配接資料庫jar 這裡選擇自己本地位置-->
    <classPathEntry location="D:/mysql-connector-java-5.1.39.jar" />
    <context id="testTables" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否去除自動生成的注釋 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!--資料庫連接配接的資訊:驅動類、連接配接位址、使用者名、密碼 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/springcloud-mybatis" userId="root"
                        password="123456">
        </jdbcConnection>
        <!-- 預設false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer,為 true時把JDBC DECIMAL 和
           NUMERIC 類型解析為java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="true" />
        </javaTypeResolver>

        <!-- targetProject:生成PO類的位置 -->
        <javaModelGenerator targetPackage="com.fame.entity"
                            targetProject="src/main/java">
            <!-- enableSubPackages:是否讓schema作為包的字尾 -->
            <property name="enableSubPackages" value="false" />
            <!-- 從資料庫傳回的值被清理前後的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- targetProject:mapper映射檔案生成的位置
           如果maven工程隻是單獨的一個工程,targetProject="src/main/java"
           若果maven工程是分子產品的工程,targetProject="所屬子產品的名稱",例如:
           targetProject="ecps-manager-mapper",下同-->
        <sqlMapGenerator targetPackage="com.fame.mapper"
                         targetProject="src/main/java">
            <!-- enableSubPackages:是否讓schema作為包的字尾 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <!-- targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.fame.mapper"
                             targetProject="src/main/java">
            <!-- enableSubPackages:是否讓schema作為包的字尾 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- 指定資料庫表 ,設定是否要生成Exemple方法-->
        <table tableName="tb_user" schema=""
               enableCountByExample="false"
               enableDeleteByExample="false"
               enableUpdateByExample="false"
               enableSelectByExample="false"
               selectByExampleQueryId="false">
            <!--去除表明字首tb_,注意嚴格控制大小寫-->
            <domainObjectRenamingRule searchString="^Tb" replaceString="" />
            <!--去除列字段字首,注意嚴格控制大小寫-->
            <columnRenamingRule searchString="^sys" replaceString=""/>
        </table>
    </context>
</generatorConfiguration>
           

copy

<?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>
    <!--mysql 連接配接資料庫jar 這裡選擇自己本地位置-->
    <classPathEntry location="D:/mysql-connector-java-5.1.39.jar" />
    <context id="testTables" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否去除自動生成的注釋 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!--資料庫連接配接的資訊:驅動類、連接配接位址、使用者名、密碼 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/springcloud-mybatis" userId="root"
                        password="123456">
        </jdbcConnection>
        <!-- 預設false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer,為 true時把JDBC DECIMAL 和
           NUMERIC 類型解析為java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="true" />
        </javaTypeResolver>

        <!-- targetProject:生成PO類的位置 -->
        <javaModelGenerator targetPackage="com.fame.entity"
                            targetProject="src/main/java">
            <!-- enableSubPackages:是否讓schema作為包的字尾 -->
            <property name="enableSubPackages" value="false" />
            <!-- 從資料庫傳回的值被清理前後的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- targetProject:mapper映射檔案生成的位置
           如果maven工程隻是單獨的一個工程,targetProject="src/main/java"
           若果maven工程是分子產品的工程,targetProject="所屬子產品的名稱",例如:
           targetProject="ecps-manager-mapper",下同-->
        <sqlMapGenerator targetPackage="com.fame.mapper"
                         targetProject="src/main/java">
            <!-- enableSubPackages:是否讓schema作為包的字尾 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <!-- targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.fame.mapper"
                             targetProject="src/main/java">
            <!-- enableSubPackages:是否讓schema作為包的字尾 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- 指定資料庫表 ,設定是否要生成Exemple方法-->
        <table tableName="tb_user" schema=""
               enableCountByExample="false"
               enableDeleteByExample="false"
               enableUpdateByExample="false"
               enableSelectByExample="false"
               selectByExampleQueryId="false">
            <!--去除表明字首tb_,注意嚴格控制大小寫-->
            <domainObjectRenamingRule searchString="^Tb" replaceString="" />
            <!--去除列字段字首,注意嚴格控制大小寫-->
            <columnRenamingRule searchString="^sys" replaceString=""/>
        </table>
    </context>
</generatorConfiguration>
           

copy

第三步 逆向工程

方式一

建立generator配置檔案,啟動即可

SpringBoot+Mybatis+Generator 逆向工程使用(二)Mybatis-Genarator 逆向工程使用

方式二

點選IDEA右側Maven Project 輕按兩下Plugins下的mybatis-generator

其中,方式一配置好的檔案,也可以在Run Configurations輕按兩下啟動

SpringBoot+Mybatis+Generator 逆向工程使用(二)Mybatis-Genarator 逆向工程使用

注意

:生成的XXXMapper.xml,需要放到(src/main/resource)下.

原因

:IDEA不編譯src的java目錄下的xml檔案

SpringBoot+Mybatis+Generator 逆向工程使用(二)Mybatis-Genarator 逆向工程使用

第四步 建立Application啟動類

如果是直接建立springboot項目可忽略這一步,我是直接建立的一個Maven項目進行整合。

注意

:加入注解@MapperScan進行mapper接口掃描

@SpringBootApplication
// mapper 接口類掃描包配置
@MapperScan("com.fame.mapper")
public class MybatisApplication {
	public static void main(String[] args) {
		SpringApplication.run(MybatisApplication.class, args);
	}
}
           

copy

這樣就整合完成,可以建立接口進行單元測試了

第五步 執行個體簡單測試

新增(insert)

/**
 * mybatis generator逆向工程 新增測試
 *
 * @param user 使用者資訊
 */
@PostMapping("/add")
public void add(@RequestBody User user) {

    // 直接新增
    userMapper.insert(user);

    // 新增會做非空判斷
    userMapper.insertSelective(user);
}
           

copy

修改(update)

/**
 * mybatis generator逆向工程 查詢測試
 *
 * @param userId 使用者ID
 */
@PutMapping("/update")
public void update(Long userId) {
    User user = userMapper.selectByPrimaryKey(userId);

    // 通過ID 修改
    user.setUsername("大白generator 測試修改操作");
    // updateByPrimaryKey 全修改
    userMapper.updateByPrimaryKey(user);
    // updateByPrimaryKeySelective 選擇user對象不為null 的修改
    userMapper.updateByPrimaryKeySelective(user);

    // 使用Example Criteria 通過關鍵字修改
    UserExample userEmp = new UserExample();
    userEmp.or().andIdEqualTo(userId);
    // updateByExample 全修改
    userMapper.updateByExample(user, userEmp);
    // updateByExampleSelective 選擇user對象不為null 的修改
    userMapper.updateByExampleSelective(user, userEmp);

}
           

copy

删除(delete)

/**
 * mybatis generator逆向工程 查詢測試
 *
 * @param userId 使用者ID
 */
@DeleteMapping("/delete")
public void delete(Long userId) {

    // 通過ID 删除
    userMapper.deleteByPrimaryKey(userId);

    // 使用Example Criteria 通過關鍵字删除
    UserExample userEmp = new UserExample();
    userEmp.or().andIdEqualTo(userId);
    userMapper.deleteByExample(userEmp);
}
           

copy

查詢(select)

/**
 * mybatis generator逆向工程 查詢測試
 * 
 * @param userId 使用者ID
 */
@GetMapping("/get")
public void get(Long userId) {

    // 通過主鍵ID 擷取使用者資訊
    User user = userMapper.selectByPrimaryKey(userId);
    System.out.println(user);

    // 通過example Criteria 查詢
    // where id = ?
    UserExample userEmp = new UserExample();
    userEmp.or().andIdEqualTo(userId);
    List<User> users1 = userMapper.selectByExample(userEmp);
    System.out.println(users1.get(0));

    userEmp.clear();
    // where ( id = ? and username =? ) or ( id = ? and age =? )
    userEmp.or().andIdEqualTo(userId).andUsernameEqualTo("大白1");
    userEmp.or().andIdEqualTo(userId).andAgeEqualTo(22);
    List<User> users2 = userMapper.selectByExample(userEmp);
    System.out.println(users2.get(0));
}

           

copy

合計(count)

/**
 * mybatis generator逆向工程 合計測試
 */
@GetMapping("/count")
public void count(){

    // 查詢全部資料
    long countAll = userMapper.countByExample(new UserExample());
    System.out.println(countAll);

    // 查詢滿足條件的資料
    UserExample userEmp = new UserExample();
    userEmp.or().andIdEqualTo(1L);
    long countByKey = userMapper.countByExample(userEmp);
    System.out.println(countByKey);
}