ホームページ >Java >&#&チュートリアル >SpringbootにMapperを統合して単一テーブル操作を実装する方法

SpringbootにMapperを統合して単一テーブル操作を実装する方法

王林
王林転載
2023-05-11 15:31:14738ブラウズ

1. フレームワーク Maven のデプロイとインストール

フレームワークのソース コードをダウンロードした後、プロジェクトのルート パスで mvn clean install を実行して、ローカルの Maven ライブラリにインストールします。 Nexus プライベート サーバーを共有して使用する必要がある場合は、root パスの pom.xml ファイルに distributionManagement 構成を追加し、Nexus ウェアハウス配布アドレスを指定し、mvn cleandeploy を使用してリモート 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>
##)。 #上記で指定 リポジトリには、

<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 など、すべての Maven 設定ファイル settings.xml に対応するアカウント設定が必要です (ID は 1 対 1 に対応する必要があります)。pom.xml 設定

このデータベース フレームワークをプロジェクトに導入するには 3 つの方法があります。

  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 接続プールを使用)
  4. 3 つのメソッドの 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. 各層で対応するドメインとマッパー、サービス、コントローラー オブジェクトを定義します。

デモを次のようにします。例 (デモ データベース スクリプトについては、resources/schema.sql を参照)、ドメインはユーザー クラスを定義し、

@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 を継承するか、UUID 主キーを UUIDKeyBaseDomain で実装します。他のタイプの主キーをカスタマイズする場合は、BaseDomain を継承します。

フレームワークのサービス層の一般メソッド実装 BaseService は単一列の主キーのみをサポートし、複合主キーはサポートしません (複合主キーの使用は推奨されません)

フレームワークのデフォルトは次のとおりです。 List や Map などの複合型属性のマッピング mysql の json 型または postgresql の jsonb 型の場合、特定の属性にマッピングが必要ない場合は @Transient アノテーションを追加できます; 列挙型の場合は @ColumnType を追加して jdbcType を指定する必要があります。

Dao レイヤーは UserMapper を定義し、

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

BaseMapper はデフォルトで単一テーブルの追加、削除、変更、バッチ挿入の機能を実装します。複雑なクエリを定義する必要がある場合は、それらを定義できます。このインターフェイスを使用して、マッパー XML ファイルの作成と実装を行います。

サービス層は、BaseService の一般的な機能を継承する UserService を定義します (詳細についてはソース コードを参照してください)。このクラスのメソッドをカスタマイズすることもできます。

@Service
public class UserService extends BaseService<Integer, User> {
@Transactional
public void createWithTransaction(User user){
create(user);
//用于测试事务
throw new RuntimeException("抛出异常,让前面的数据库操作回滚");
}
}
コントローラ層BaseController の一般的なインターフェースを継承する UserController を定義します (詳細はソースコードをご覧ください)

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

は上記の通りです 各層に対応するインターフェースまたはクラスを定義し、基本的なインターフェースまたはクラスを継承するだけで済みますユーザーの基本的な追加、削除、変更、クエリ機能を完了するには、特定の実装コードを 1 行記述する必要はありません。

5. テストと実行

この例では、2 人の新しいユーザーに対する単体テストが提供されています。実行するには、SpringbootTkmapperApplicationTests クラスを参照してください。これをメイン クラスで直接実行し、ブラウザで http://localhost:8080/user を開いて単体テストで作成されたユーザーを一覧表示します (他のインターフェイスについては BaseController の実装を参照してください)

以上がSpringbootにMapperを統合して単一テーブル操作を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。