Spring Boot整合mybatis并自動(dòng)生成mapper和實(shí)體實(shí)例解析
最近一直都在學(xué)習(xí)Java,發(fā)現(xiàn)目前Java招聘中,mybatis出現(xiàn)的頻率挺高的,可能是目前Java開發(fā)中使用比較多的數(shù)據(jù)庫(kù)ORM框架。于是我準(zhǔn)備研究下Spring Boot和mybatis的整合。
1.在pom.xml文件中添加下面的配置
<dependencies>
<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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.29</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- 這個(gè)是官方的mybatis依賴,這個(gè)你不加沒(méi)法用噻 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- 這個(gè)是自動(dòng)生成mapper等的依賴,必須得加-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator</artifactId>
<version>1.3.5</version>
<type>pom</type>
</dependency>
<!--這個(gè)是自動(dòng)生成mapper等的依賴,必須得加 https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<!--配置文件存放的地址-->
<!--<configurationFile>src/main/resources/mybatis-generator/generatorConfig.xml</configurationFile>-->
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
2.在application.properties配置文件中進(jìn)行數(shù)據(jù)庫(kù)和mybatis掃描的配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/yddy?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=123456 mybatis.config-locations=classpath:mybatis-config.xml # mapper文件 mybatis.mapper-locations=classpath:mapper/*.xml #這里直接寫*,對(duì)后面自定義sql,編寫xxxExt.xml有好處,自動(dòng)掃描到這些文件,不用再改配置了 mybatis.type-aliases-package=com.dameiweb.learn.model logging.level.com.dameiweb.learn.dao=debug #mybatis.config = mybatis 配置文件名稱 #mybatis.mapperLocations = mapper xml 文件地址 #mybatis.typeAliasesPackage = 實(shí)體類包路徑 #mybatis.typeHandlersPackage = type handlers 處理器包路徑 #mybatis.check-config-location = 檢查 mybatis 配置是否存在,一般命名為 mybatis-config.xml #mybatis.executorType = 執(zhí)行模式。默認(rèn)是 SIMPLE
3.mybatis的配置和自動(dòng)生成mapper的配置
在resource目錄下新建一個(gè)generatorConfig.xml和mybatis-config.xml。內(nèi)容如下:
generatorConfig.xml內(nèi)容
<?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="C:\Users\nick\.m2\repository/mysql/mysql-connector-java/5.1.46/mysql-connector-java-5.1.46.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--數(shù)據(jù)庫(kù)鏈接地址賬號(hào)密碼-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/yddy?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC" userId="root" password="123456">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--生成Model類存放位置-->
<javaModelGenerator targetPackage="com.dameiweb.learn.model" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<!-- 從數(shù)據(jù)庫(kù)返回的值被清理前后的空格 -->
<property name="trimStrings" value="false"/>
</javaModelGenerator>
<!--生成映射文件存放位置-->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--生成Dao類存放位置-->
<!-- 客戶端代碼,生成易于使用的針對(duì)Model對(duì)象和XML配置文件 的代碼
type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper對(duì)象
type="MIXEDMAPPER",生成基于注解的Java Model 和相應(yīng)的Mapper對(duì)象
type="XMLMAPPER",生成SQLMap XML文件和獨(dú)立的Mapper接口
-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.dameiweb.learn.dao" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
</context>
</generatorConfiguration>
mybatis-config.xml的內(nèi)容:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <setting name="callSettersOnNulls" value="true"/> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading" value="true"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="false"/> <setting name="autoMappingBehavior" value="PARTIAL"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="mapUnderscoreToCamelCase" value="true"/> <setting name="localCacheScope" value="SESSION"/> <setting name="jdbcTypeForNull" value="NULL"/> </settings> <typeAliases> <typeAlias alias="Integer" type="java.lang.Integer" /> <typeAlias alias="Long" type="java.lang.Long" /> <typeAlias alias="HashMap" type="java.util.HashMap" /> <typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" /> <typeAlias alias="ArrayList" type="java.util.ArrayList" /> <typeAlias alias="LinkedList" type="java.util.LinkedList" /> </typeAliases> </configuration>
這樣我們就配置好了Spring Boot和mybatis與mybatis自動(dòng)生成mapper和實(shí)體的功能。這樣我們要生成某個(gè)表的實(shí)體和mapper的時(shí)候,只需要在generatorConfig.xml中javaClientGenerator標(biāo)簽之后添加下面的內(nèi)容即可。
此處我們已yd_movies表為例(主要數(shù)據(jù)庫(kù)表名字不要用復(fù)數(shù),這個(gè)表名肯定是我之前腦子抽了,搞個(gè)復(fù)數(shù)的名字)
<!--生成對(duì)應(yīng)表及類名-->
<table tableName="yd_movies" domainObjectName="Movie" enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
<columnOverride column="cover_photos" javaType="java.lang.String" jdbcType="VARCHAR" />
<columnOverride column="cover_photos_loc" javaType="java.lang.String" jdbcType="VARCHAR" />
<columnOverride column="pubdates" javaType="java.lang.String" jdbcType="VARCHAR" />
<columnOverride column="photographs_origin" javaType="java.lang.String" jdbcType="VARCHAR" />
<columnOverride column="photographs_origin_loc" javaType="java.lang.String" jdbcType="VARCHAR" />
<columnOverride column="languages" javaType="java.lang.String" jdbcType="VARCHAR" />
<columnOverride column="awards" javaType="java.lang.String" jdbcType="VARCHAR" />
<columnOverride column="summary" javaType="java.lang.String" jdbcType="VARCHAR" />
</table>
<!--columnOverride使用這個(gè)標(biāo)簽是為了防止數(shù)據(jù)庫(kù)字段類型為text時(shí)候,mybatis會(huì)生成xxxxWithBLOBs文件。-->
然后點(diǎn)擊idea右側(cè)Maven projects,就可以看到mybatis-generate下的mybatis-generate:generate,雙擊mybatis-generate:generate即可。
**generator 注意點(diǎn),也可以說(shuō)是BUG
就是在生成的時(shí)候,在第二次生成的時(shí)候,dao 和entity 都會(huì)直接覆蓋,而Mapper.xml 會(huì)直接追加,導(dǎo)致運(yùn)行報(bào)錯(cuò),而且很難找。**
4.mybatis自定義sql
當(dāng)我們需要自定義sql的時(shí)候,我們不能把這些也放到mapper文件中。不然,當(dāng)數(shù)據(jù)庫(kù)表的字段有更新需要重新生成mapper的時(shí)候,這樣我們自定義的sql不就被覆蓋沒(méi)了么!所以我們需要在MovieMapper.xml的同級(jí)目錄里,新建一個(gè)MovieMapperExt.xml文件,把自定義的sql放到這里,例子如下:
MovieMapperExt.xml文件內(nèi)容
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.dameiweb.learn.dao.MovieMapper" >
<select id="selectByCondition" resultMap="BaseResultMap" parameterType="com.dameiweb.learn.dto.MovieRequest">
SELECT yd_movies.* FROM yd_movies
LEFT JOIN yd_r_movie_countries ON yd_movies.id = yd_r_movie_countries.movie_id
LEFT JOIN yd_countries cou ON yd_r_movie_countries.country_id = cou.id
LEFT JOIN yd_r_movie_category ON yd_movies.id = yd_r_movie_category.movie_id
LEFT JOIN yd_category cat ON yd_r_movie_category.category_id = cat.id
LEFT JOIN yd_r_movie_actor ON yd_movies.id = yd_r_movie_actor.movie_id
LEFT JOIN yd_actors a ON yd_r_movie_actor.actor_id = a.id
WHERE
yd_movies.status = 1
<if test="movieRequest.title != null">
AND yd_movies.title LIKE "%"#{movieRequest.title}"%"
</if>
<if test="movieRequest.country != null">
AND cou.id = #{movieRequest.country}
</if>
<if test="movieRequest.category != null">
AND cat.id = #{movieRequest.category}
</if>
<if test="movieRequest.year != null">
AND year = #{movieRequest.year}
</if>
<if test="movieRequest.rate != null">
AND rate >= #{movieRequest.rate}
</if>
<if test="movieRequest.rate != null">
AND rate < (#{movieRequest.rate}+1)
</if>
<if test="movieRequest.subtype != null">
AND yd_movies.subtype = #{movieRequest.subtype}
</if>
GROUP BY yd_movies.id
ORDER BY updated_at DESC, year
</select>
</mapper>
總結(jié)
以上所述是小編給大家介紹的Spring Boot整合mybatis并自動(dòng)生成mapper和實(shí)體,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- 淺談springboot中tk.mapper代碼生成器的用法說(shuō)明
- 解決SpringBoot整合Mybatis掃描不到Mapper的問(wèn)題
- Springboot整合通用mapper過(guò)程解析
- springboot整合通用Mapper簡(jiǎn)化單表操作詳解
- Spring Boot集成MyBatis實(shí)現(xiàn)通用Mapper的配置及使用
- springboot~ObjectMapper~dto到entity的自動(dòng)賦值
- SpringBoot整合MyBatis逆向工程及 MyBatis通用Mapper實(shí)例詳解
- Springboot通用mapper和mybatis-generator代碼示例
相關(guān)文章
關(guān)于@JsonProperty,@NotNull,@JsonIgnore的具體使用
這篇文章主要介紹了關(guān)于@JsonProperty,@NotNull,@JsonIgnore的具體使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
Springboot web項(xiàng)目打包實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Springboot web項(xiàng)目打包實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
簡(jiǎn)單學(xué)習(xí)Java+MongoDB
本文給大家介紹的是如何簡(jiǎn)單的使用java+MongoDB實(shí)現(xiàn)數(shù)據(jù)調(diào)用的問(wèn)題,非常的實(shí)用,有需要的小伙伴可以參考下2016-03-03
詳解Spring-Boot集成Spring session并存入redis
這篇文章主要介紹了詳解Spring-Boot集成Spring session并存入redis,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
Java實(shí)現(xiàn)按權(quán)重隨機(jī)數(shù)
這篇文章主要介紹了Java實(shí)現(xiàn)按權(quán)重隨機(jī)數(shù),本文給出了提出問(wèn)題、分析問(wèn)題、解決問(wèn)題三個(gè)步驟,需要的朋友可以參考下2015-04-04
Spring Boot Admin管理監(jiān)控?cái)?shù)據(jù)的方法
本篇文章主要介紹了Spring Boot Admin管理監(jiān)控?cái)?shù)據(jù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12

