首頁 >Java >java教程 >springboot中如何透過整合Mapper實現單表操作

springboot中如何透過整合Mapper實現單表操作

王林
王林轉載
2023-05-11 15:31:14739瀏覽

1. 框架Maven部署安裝

下載框架原始碼後,在專案根路徑下執行mvn clean install可安裝到本機maven函式庫。如果需要共享,且搭了Nexus私服,則在根路徑pom.xml檔案中新增distributionManagement配置,指定Nexus倉庫分發位址,使用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中有對應帳號設定(id需要一一對應),如

<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設定

#專案中引入此資料庫框架有三種方式:

  1. 直接引入cn.jboost.springboot:tkmapper-spring-boot-starter(沒有連接池)

  2. 直接引入cn.jboost.springboot:druid-spring-boot-starter(druid連接池支援)

  3. 專案繼承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>

根據情況引入mysql或postgresql的驅動依賴(其它資料庫暫未做類型轉換支持,未作測試)

3. 配置資料來源

如果使用druid連接池,則在application.yml配置文件中,加入如下資料來源配置(建議)

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 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
minEvictableIdleTimeMillis: 300000 # 配置一个连接在池中最小生存的时间,单位是毫秒
validationQuery: SELECT 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true # 打开PSCache,并且指定每个连接上PSCache的大小
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat #,wall(添加wall代码里不能直接拼接sql,druid有sql注入校验) # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
useGlobalDataSourceStat: true # 合并多个DruidDataSource的监控数据

如果不使用連接池,則配置相對簡單,如下

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. 定義對應domain,mapper ,service,controller各層物件

以demo為例(demo資料庫腳本見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註解指定資料庫表名,可透過繼承AutoIncrementKeyBaseDomain來實作自增主鍵,或UUIDKeyBaseDomain來實作UUID主鍵,若自訂其它類型主鍵,則繼承BaseDomain。

此框架Service層通用方法實作BaseService只支援單列主鍵,不支援組合主鍵(也不建議使用組合主鍵)

#框架預設對List、Map等複雜型別屬性會對應到mysql的json類型或postgresql的jsonb類型,如果某個屬性不需要映射,可新增@Transient註解;枚舉類型需新增@ColumnType指定jdbcType。

dao層定義UserMapper,

@Repository
public interface UserMapper extends BaseMapper<User> {
}

BaseMapper預設實作了單表的增刪改查及批次插入等功能,如需定義複雜查詢,可在該介面中定義,然後透過mapper xml文件編寫實作。

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

@Service
public class UserService extends BaseService<Integer, User> {
@Transactional
public void createWithTransaction(User user){
create(user);
//用于测试事务
throw new RuntimeException("抛出异常,让前面的数据库操作回滚");
}
}

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

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

如上,只需要定義各層對應的接口或類,繼承基礎接口或類,便完成了用戶基本的增刪改查功能,不需要寫一行具體的實作程式碼。

5. 測試、運行

範例中提供了兩個新用戶的單元測試,參考SpringbootTkmapperApplicationTests類別

#運行,在主類別上直接執行,然後瀏覽器開啟http://localhost:8080/user 則可列出單元測試中建立的使用者(其它介面參考BaseController實作)

以上是springboot中如何透過整合Mapper實現單表操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除