您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“springboot中如何通過整合Mapper實現(xiàn)單表操作”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當(dāng),希望這篇“springboot中如何通過整合Mapper實現(xiàn)單表操作”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。
1. 框架Maven部署安裝
下載框架源碼后,在項目根路徑下執(zhí)行mvn clean install可安裝到本地maven庫。如果需要共享,且搭了Nexus私服,則在根路徑pom.xml文件中添加distributionManagement配置,指定Nexus倉庫分發(fā)地址,使用mvn clean deploy安裝到遠程maven倉庫,如
<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中有對應(yīng)賬號配置(id需要一一對應(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配置
項目中引入該數(shù)據(jù)庫框架有三種方式:
直接引入 cn.jboost.springboot:tkmapper-spring-boot-starter(沒有連接池)
直接引入 cn.jboost.springboot:druid-spring-boot-starter(druid連接池支持)
項目繼承 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ū)動依賴(其它數(shù)據(jù)庫暫未做類型轉(zhuǎn)換支持,未作測試)
3. 配置數(shù)據(jù)源
如果使用druid連接池,則在application.yml配置文件中,加入如下數(shù)據(jù)源配置(推薦)
spring: datasource: druid: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf-8 username: root password: # 自定義配置 initialSize: 2 # 初始化大小 minIdle: 1 # 最小連接 maxActive: 5 # 最大連接 druidServletSettings: allow: 127.0.0.1 deny: loginUsername: admin loginPassword: Passw0rd resetEnable: true druidFilterSettings: exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' maxWait: 60000 # 配置獲取連接等待超時的時間 timeBetweenEvictionRunsMillis: 60000 # 配置間隔多久才進行一次檢測,檢測需要關(guān)閉的空閑連接,單位是毫秒 minEvictableIdleTimeMillis: 300000 # 配置一個連接在池中最小生存的時間,單位是毫秒 validationQuery: SELECT 'x' testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true # 打開PSCache,并且指定每個連接上PSCache的大小 maxPoolPreparedStatementPerConnectionSize: 20 filters: stat #,wall(添加wall代碼里不能直接拼接sql,druid有sql注入校驗) # 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計,'wall'用于防火墻 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄 useGlobalDataSourceStat: true # 合并多個DruidDataSource的監(jiān)控數(shù)據(jù)
如果不使用連接池,則配置相對簡單,如下
spring: datasource: url: jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf-8 username: root password: driver-class-name: com.mysql.jdbc.Driver
4. 定義相應(yīng)domain,mapper,service,controller各層對象
以demo為例(demo數(shù)據(jù)庫腳本見resources/schema.sql),domain定義一個User類,
@Table(name = "user") @Getter @Setter @ToString public 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ù)庫表名,可通過繼承AutoIncrementKeyBaseDomain來實現(xiàn)自增主鍵,或UUIDKeyBaseDomain來實現(xiàn)UUID主鍵,如果自定義其它類型主鍵,則繼承BaseDomain。
該框架Service層通用方法實現(xiàn)BaseService只支持單列主鍵,不支持組合主鍵(也不建議使用組合主鍵)
框架默認對List、Map等復(fù)雜類型屬性會映射到mysql的json類型或postgresql的jsonb類型,如果某個屬性不需要映射,可添加@Transient注解;枚舉類型需添加@ColumnType指定jdbcType。
dao層定義UserMapper,
@Repository public interface UserMapper extends BaseMapper<User> { }
BaseMapper默認實現(xiàn)了單表的增刪改查及批量插入等功能,如需定義復(fù)雜查詢,可在該接口中定義,然后通過mapper xml文件編寫實現(xiàn)。
service層定義 UserService,繼承了BaseService的通用功能(具體可查看源碼),同樣可在該類中自定義方法
@Service public class UserService extends BaseService<Integer, User> { @Transactional public void createWithTransaction(User user){ create(user); //用于測試事務(wù) throw new RuntimeException("拋出異常,讓前面的數(shù)據(jù)庫操作回滾"); } }
controller層定義 UserController,繼承了BaseController的通用接口(具體可查看源碼)
@RestController @RequestMapping("/user") public class UserController extends BaseController<Integer, User> { }
如上,只需要定義各層對應(yīng)的接口或類,繼承基礎(chǔ)接口或類,便完成了用戶基本的增刪改查功能,不需要寫一行具體的實現(xiàn)代碼。
5. 測試、運行
示例中提供了兩個新建用戶的單元測試,參考SpringbootTkmapperApplicationTests類
運行,在主類上直接運行,然后瀏覽器里打開http://localhost:8080/user 則可列出單元測試中創(chuàng)建的用戶(其它接口參考BaseController實現(xiàn))
讀到這里,這篇“springboot中如何通過整合Mapper實現(xiàn)單表操作”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。