溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

spring boot 使用通用 mapper 簡化開發(fā)

發(fā)布時(shí)間:2020-07-20 20:29:25 來源:網(wǎng)絡(luò) 閱讀:1418 作者:北極冷冷冷 欄目:編程語言

spring boot 使用通用 mapper 簡化開發(fā)

在使用 mybaits 時(shí)雖然有 mybatis generator 代碼自動(dòng)生成工具 但是還是有很多需要我們自己寫的 sql 所以就有了通用 mapper tk.mapper 簡化我們的開發(fā) 但是它也同樣不支持表聯(lián)合查詢,聯(lián)合查詢也需要我們自己編寫 sql


通用mapper 使用方法:

1 引入依賴:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.0.1</version>
</dependency>

<dependency>
        <groupId>tk.mybatis</groupId>
        <artifactId>mapper-spring-boot-starter</artifactId>
        <version>2.1.5</version>
</dependency>

<!-- 分頁插件-->
<dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.2.12</version>
</dependency>

<dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
</dependency>
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
</dependency> 

2.配置數(shù)據(jù)庫 和 mybaits 相關(guān)信息

spring:
    datasource:
        url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC+8
        username: root
        password: root
        driver-class-name: com.mysql.jdbc.Driver

mapper:
    notEmpty: true
    identity: MYSQL

mybatis:
    mapperLocations: classpath:**/mapper/*.xml

3 指定mapper需要掃面的包路勁

@MapperScan(basePackages = "com.example.tkmapper.mapper")
@SpringBootApplication
public class TkMapperApplication {

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

}

注意: MapperScan 是通用mapper的 tk.mybatis.spring.annotation.MapperScan

4.書寫mapper類

public interface UserMapper extends tk.mybatis.mapper.common.Mapper<User> {
}
很多查詢方法我們都可以直接使用了
----------------------------------------------------------------------
同樣 我們也可以使用工具自動(dòng)生成 mapper 和 entity文件
1.首先配置maven插件
<plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.3.7</version>
        <configuration>
                <configurationFile>
                        ${basedir}/src/main/resources/generator/generatorConfig.xml
                </configurationFile>
                <overwrite>true</overwrite>
                <verbose>true</verbose>
        </configuration>
        <dependencies>
                <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.16</version>
                </dependency>
                <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper</artifactId>
                        <version>4.0.0</version>
                </dependency>
        </dependencies>
</plugin>

2 在resource 下 配置數(shù)據(jù)庫信息 generator.properties

#Mybatis Generator configuration
#dao類和實(shí)體類的位置
project =src/main/java
#mapper文件的位置
resources=src/main/resources
#根據(jù)數(shù)據(jù)庫中的表生成對(duì)應(yīng)的pojo類、dao、mapper
jdbc_driver =com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
jdbc_user=root
jdbc_password=root

3 在resource下配置 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>
        <!--執(zhí)行g(shù)enerator插件生成文件的命令: call mvn mybatis-generator:generate -e -->
        <!-- 引入配置文件 -->
        <properties resource="generator/generator.properties"/>
        <!--classPathEntry:數(shù)據(jù)庫的JDBC驅(qū)動(dòng),換成你自己的驅(qū)動(dòng)位置 可選 -->
        <!--<classPathEntry location="D:\generator_mybatis\mysql-connector-java-5.1.24-bin.jar" /> -->

        <!-- 一個(gè)數(shù)據(jù)庫一個(gè)context -->
        <!--defaultModelType="flat" 大數(shù)據(jù)字段,不分表 -->
        <context id="MysqlTables" targetRuntime="MyBatis3Simple" defaultModelType="flat">

                <!-- 自動(dòng)識(shí)別數(shù)據(jù)庫關(guān)鍵字,默認(rèn)false,如果設(shè)置為true,根據(jù)SqlReservedWords中定義的關(guān)鍵字列表;
                一般保留默認(rèn)值,遇到數(shù)據(jù)庫關(guān)鍵字(Java關(guān)鍵字),使用columnOverride覆蓋 -->
                <property name="autoDelimitKeywords" value="true" />
                <!-- 生成的Java文件的編碼 -->
                <property name="javaFileEncoding" value="utf-8" />
                <!-- beginningDelimiter和endingDelimiter:指明數(shù)據(jù)庫的用于標(biāo)記數(shù)據(jù)庫對(duì)象名的符號(hào),比如ORACLE就是雙引號(hào),MYSQL默認(rèn)是`反引號(hào); -->
                <property name="beginningDelimiter" value="`" />
                <property name="endingDelimiter" value="`" />

                <!-- 格式化java代碼 -->
                <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
                <!-- 格式化XML代碼 -->
                <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
                <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />

                <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />

                <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
                        <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
                        <property name="caseSensitive" value="true"/>
                </plugin>

                <!-- 注釋 -->
                <commentGenerator >
                        <property name="suppressAllComments" value="false"/><!-- 是否取消注釋 -->
                        <property name="suppressDate" value="true" /> <!-- 是否生成注釋代時(shí)間戳-->
                </commentGenerator>

                <!-- jdbc連接 -->
                <jdbcConnection driverClass="${jdbc_driver}"
                                                connectionURL="${jdbc_url}"
                                                userId="${jdbc_user}"
                                                password="${jdbc_password}" >

                        <!--MySQL 8.x 需要指定服務(wù)器的時(shí)區(qū)-->
                        <property name="serverTimezone" value="UTC"/>
                        <!--MySQL 不支持 schema 或者 catalog 所以需要添加這個(gè)-->
                        <!--參考 : http://www.mybatis.org/generator/usage/mysql.html-->
                        <property name="nullCatalogMeansCurrent" value="true"/>
                        <!-- MySQL8默認(rèn)啟用 SSL ,不關(guān)閉會(huì)有警告-->
                        <property name="useSSL" value="false"/>
                </jdbcConnection>
                <!-- 類型轉(zhuǎn)換 -->
                <javaTypeResolver>
                        <!-- 是否使用bigDecimal, false可自動(dòng)轉(zhuǎn)化以下類型(Long, Integer, Short, etc.) -->
                        <property name="forceBigDecimals" value="false"/>
                </javaTypeResolver>

                <!-- 生成實(shí)體類地址 -->
                <javaModelGenerator targetPackage="com.example.tkmapper.entity" targetProject="${project}" >
                        <property name="enableSubPackages" value="false"/>
                        <property name="trimStrings" value="true"/>
                </javaModelGenerator>
                <!-- 生成mapxml文件 -->
                <sqlMapGenerator targetPackage="mapper" targetProject="${resources}" >
                        <property name="enableSubPackages" value="false" />
                </sqlMapGenerator>
                <!-- 生成mapxml對(duì)應(yīng)client,也就是接口dao -->
                <javaClientGenerator targetPackage="com.example.tkmapper.mapper" targetProject="${project}" type="XMLMAPPER" >
                        <property name="enableSubPackages" value="false" />
                </javaClientGenerator>
                <!-- table可以有多個(gè),每個(gè)數(shù)據(jù)庫中的表都可以寫一個(gè)table,tableName表示要匹配的數(shù)據(jù)庫表,也可以在tableName屬性中通過使用%通配符來匹配所有數(shù)據(jù)庫表,只有匹配的表才會(huì)自動(dòng)生成文件 -->
                <table tableName="user" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">

                        <!-- 數(shù)據(jù)庫表主鍵 -->
                        <generatedKey column="id" sqlStatement="Mysql" identity="true" />
                </table>
        </context>
</generatorConfiguration>

最后執(zhí)行命令 代碼生成

mvn mybatis-generator:generate 

表聯(lián)合查詢 就需要自己寫 sql 了 同樣在xml 文件里面寫 和普通的用法相同

<select id = "findUserById" resultMap = "BaseResult">
    SELECT * FROM user where id = #{id}
</select>
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI