溫馨提示×

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

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

springboot中怎么利用Mapper簡(jiǎn)化單表操作

發(fā)布時(shí)間:2021-07-27 16:41:59 來(lái)源:億速云 閱讀:225 作者:Leah 欄目:編程語(yǔ)言

springboot中怎么利用Mapper簡(jiǎn)化單表操作,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

在開(kāi)源mapper-spring-boot-starter的基礎(chǔ)上,增加了如下內(nèi)容:

  1. 針對(duì)MySQL數(shù)據(jù)庫(kù)與PostgreSQL數(shù)據(jù)庫(kù)添加了一些Java類(lèi)型與數(shù)據(jù)庫(kù)類(lèi)型的轉(zhuǎn)換處理類(lèi),如將List、Map類(lèi)型與MySQL數(shù)據(jù)庫(kù)的json類(lèi)型進(jìn)行轉(zhuǎn)換處理  對(duì)Domain、Mapper、Service、Controller各層進(jìn)行了封裝,將基本的增刪改查功能在各層通用化  提供了基于druid連接池的自動(dòng)配置  其它一些調(diào)整,如默認(rèn)映射復(fù)雜類(lèi)型屬性(主要是List、Map類(lèi)型,其它自定義類(lèi)型需要自定義轉(zhuǎn)換處理類(lèi)),將枚舉作為簡(jiǎn)單類(lèi)型處理  提供了一個(gè)parent項(xiàng)目,將一些常用的框架進(jìn)行集成,實(shí)際項(xiàng)目可繼承parent簡(jiǎn)化依賴(lài)配置(持續(xù)更新完善)

該框架可用于實(shí)際基于springboot的項(xiàng)目,只需簡(jiǎn)單配置數(shù)據(jù)源,即可引入druid連接池及通用mapper的功能,以及各層基本的增刪改查方法。

如何使用?

下文給出使用步驟,可參考示例

1. 框架Maven部署安裝

下載框架源碼后,在項(xiàng)目根路徑下執(zhí)行mvn clean install可安裝到本地maven庫(kù)。如果需要共享,且搭了Nexus私服,則在根路徑pom.xml文件中添加distributionManagement配置,指定Nexus倉(cāng)庫(kù)分發(fā)地址,使用mvn clean deploy安裝到遠(yuǎn)程maven倉(cāng)庫(kù),如

<distributionManagement><repository><id>nexus-releases</id><url>http://ip:port/repository/maven-releases/</url></repository><snapshotRepository><id>nexus-snapshots</id><url>http://ip:port/repository/maven-snapshots/</url></snapshotRepository></distributionManagement>

上述指定的repository需要在maven的全部配置文件settings.xml中有對(duì)應(yīng)賬號(hào)配置(id需要一一對(duì)應(yīng)),如

<servers><server><id>nexus-snapshots</id><username>admin</username><password>xxx</password></server><server><id>nexus-releases</id><username>admin</username><password>xxx</password></server></servers>

2. pom.xml配置

項(xiàng)目中引入該數(shù)據(jù)庫(kù)框架有三種方式:

  1. 直接引入 cn.jboost.springboot:tkmapper-spring-boot-starter(沒(méi)有連接池)  直接引入 cn.jboost.springboot:druid-spring-boot-starter(druid連接池支持)  項(xiàng)目繼承 cn.jboost.springboot:spring-boot-parent(使用的是druid連接池)

三種方式的pom.xml配置如下

#第一種方式<dependency><groupId>cn.jboost.springboot</groupId><artifactId>tkmapper-spring-boot-starter</artifactId><version>1.2-SNAPSHOT</version></dependency>#第二種方式<dependency><groupId>cn.jboost.springboot</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2-SNAPSHOT</version></dependency>#第三種方式<parent><groupId>cn.jboost.springboot</groupId><artifactId>spring-boot-parent</artifactId><version>1.2-SNAPSHOT</version><relativePath/> <!-- lookup parent from repository --></parent>

根據(jù)情況引入mysql或postgresql的驅(qū)動(dòng)依賴(lài)(其它數(shù)據(jù)庫(kù)暫未做類(lèi)型轉(zhuǎn)換支持,未作測(cè)試)

3. 配置數(shù)據(jù)源

如果使用druid連接池,則在application.yml配置文件中,加入如下數(shù)據(jù)源配置(推薦)

spring:datasource:druid:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf-8username: rootpassword:# 自定義配置initialSize: 2 # 初始化大小minIdle: 1 # 最小連接maxActive: 5 # 最大連接druidServletSettings:allow: 127.0.0.1deny:loginUsername: adminloginPassword: Passw0rdresetEnable: truedruidFilterSettings:exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'maxWait: 60000 # 配置獲取連接等待超時(shí)的時(shí)間timeBetweenEvictionRunsMillis: 60000 # 配置間隔多久才進(jìn)行一次檢測(cè),檢測(cè)需要關(guān)閉的空閑連接,單位是毫秒minEvictableIdleTimeMillis: 300000 # 配置一個(gè)連接在池中最小生存的時(shí)間,單位是毫秒validationQuery: SELECT 'x'testWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: true # 打開(kāi)PSCache,并且指定每個(gè)連接上PSCache的大小maxPoolPreparedStatementPerConnectionSize: 20filters: stat #,wall(添加wall代碼里不能直接拼接sql,druid有sql注入校驗(yàn)) # 配置監(jiān)控統(tǒng)計(jì)攔截的filters,去掉后監(jiān)控界面sql無(wú)法統(tǒng)計(jì),'wall'用于防火墻connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 通過(guò)connectProperties屬性來(lái)打開(kāi)mergeSql功能;慢SQL記錄useGlobalDataSourceStat: true # 合并多個(gè)DruidDataSource的監(jiān)控?cái)?shù)據(jù)

如果不使用連接池,則配置相對(duì)簡(jiǎn)單,如下

spring:datasource:url: jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf-8username: rootpassword:driver-class-name: com.mysql.jdbc.Driver

4. 定義相應(yīng)domain,mapper,service,controller各層對(duì)象

以demo為例(demo數(shù)據(jù)庫(kù)腳本見(jiàn)resources/schema.sql),domain定義一個(gè)User類(lèi),

@Table(name = "user")@Getter@Setter@ToStringpublic class User extends AutoIncrementKeyBaseDomain<Integer> {private String name;@ColumnType(jdbcType = JdbcType.CHAR)private Gender gender;private List<String> favor;private Map<String, String> address;public enum Gender{M,F}}

需要添加@Table注解指定數(shù)據(jù)庫(kù)表名,可通過(guò)繼承AutoIncrementKeyBaseDomain來(lái)實(shí)現(xiàn)自增主鍵,或UUIDKeyBaseDomain來(lái)實(shí)現(xiàn)UUID主鍵,如果自定義其它類(lèi)型主鍵,則繼承BaseDomain。

該框架Service層通用方法實(shí)現(xiàn)BaseService只支持單列主鍵,不支持組合主鍵(也不建議使用組合主鍵)

框架默認(rèn)對(duì)List、Map等復(fù)雜類(lèi)型屬性會(huì)映射到mysql的json類(lèi)型或postgresql的jsonb類(lèi)型,如果某個(gè)屬性不需要映射,可添加@Transient注解;枚舉類(lèi)型需添加@ColumnType指定jdbcType。

dao層定義UserMapper,

@Repositorypublic interface UserMapper extends BaseMapper<User> {}

BaseMapper默認(rèn)實(shí)現(xiàn)了單表的增刪改查及批量插入等功能,如需定義復(fù)雜查詢(xún),可在該接口中定義,然后通過(guò)mapper xml文件編寫(xiě)實(shí)現(xiàn)。

service層定義 UserService,繼承了BaseService的通用功能(具體可查看源碼),同樣可在該類(lèi)中自定義方法

@Servicepublic class UserService extends BaseService<Integer, User> {@Transactionalpublic void createWithTransaction(User user){create(user);//用于測(cè)試事務(wù)throw new RuntimeException("拋出異常,讓前面的數(shù)據(jù)庫(kù)操作回滾");}}

controller層定義 UserController,繼承了BaseController的通用接口(具體可查看源碼)

@RestController@RequestMapping("/user")public class UserController extends BaseController<Integer, User> {}

如上,只需要定義各層對(duì)應(yīng)的接口或類(lèi),繼承基礎(chǔ)接口或類(lèi),便完成了用戶(hù)基本的增刪改查功能,不需要寫(xiě)一行具體的實(shí)現(xiàn)代碼。

5. 測(cè)試、運(yùn)行

示例中提供了兩個(gè)新建用戶(hù)的單元測(cè)試,參考SpringbootTkmapperApplicationTests類(lèi)

運(yùn)行,在主類(lèi)上直接運(yùn)行,然后瀏覽器里打開(kāi)http://localhost:8080/user 則可列出單元測(cè)試中創(chuàng)建的用戶(hù)(其它接口參考BaseController實(shí)現(xiàn))

關(guān)于springboot中怎么利用Mapper簡(jiǎn)化單表操作問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

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

AI