MyBatisの中STSの基本的な実現

ここで使用それはインタフェースを使用してテーブルエントリの読み取りを実現するために、「春ブーツ2.xの深さ」、第5章では、たとえばあります。

データベース:ユーザーmysqlの下のデータベースの確立、t_usrという名前のテーブル

1.ソース・データ・セット

application.propertiesファイルを提供されたデータソース内の項目を追加しました:

#は、(プロジェクトの名前で書かれた、最初は理解していなかった時に、ユーザは、データベースの名前です)、データソースを設定
spring.datasource.url = JDBC:MySQLの:// localhostを:3306 /ユーザー
spring.datasource.username =ルート
spring.datasource.password 123456 =
spring.datasource.driver-クラス名= com.mysql.cj.jdbc.Driver
spring.datasource.tomcat.max-IDLE = 10
spring.datasource.tomcat.maxアクティブ= 50
spring.datasource.tomcat.max = 10000 -wait
spring.datasource.tomcat.initialサイズ。5 =

本明細書で使用する場合、内蔵MySQLソースDBCP2を必要に応じて設けてもよいです

2.該当する依存関係を追加します。

pom.xmlに関連する依存関係を追加します。

<! -配置对のMySQL的依赖- >
<依存>
<groupIdを> mysqlの</ groupIdを>
<たartifactId>のmysql-コネクタ-javaの</たartifactId>
</依存関係>
<! -配置对のMySQL的依赖- >
<依存性>
<のgroupId> org.springframework.boot </のgroupId>
<たartifactId>ばねブートスタータJDBC </たartifactId>
</依存>

 <! - MyBatisの設定の依存関係、2にする必要があり、少なくとも一つを通過することができません - >

<依存性>
<のgroupId> org.mybatis.spring.boot </のgroupId>
<たartifactId> MyBatisのスプリングブートスタータ</たartifactId>
<バージョン> 1.3.2 </バージョン>
</依存>

<依存>
<groupIdを> org.mybatis </ groupIdを>
<たartifactId> MyBatisの</たartifactId>
<バージョン> 3.4.4 </バージョン>
</依存関係>

3. POJOクラスを確立し、業務にサービス・インターフェースを読みます

3.1 Userクラスを作成します:

@alias(値=「ユーザ」) // エイリアスベースMyBatisの、との準備のためにマッピング
パブリックユーザクラス{
;プライベートロング上記ID = NULL挙げ
プライベート文字列のuserName = NULL;
プライベートSexEnumセックス= NULL; //性別列挙、必要にtypehandler変換(列挙するために、多くの変換)を使用する
プライベートノート文字列=ヌル;
// **********セッターとゲッターはここでは省略されている必要があり************ ************************************************************
}

列挙型であるSexEnum:

パブリック列挙SexEnum {
MALE(1、 "男")、女性(2、 "女");

プライベートint型のID。
プライベート文字列名;
SexEnum(int型のID、文字列名){
this.id = ID。
this.name =名前;
}

パブリック静的SexEnum getEnumById(int型のID){
用(SexEnum性別:SexEnum.values()){
IF(sex.getId()== ID){
性別を返します。
}
}
はnullを返します。
}

公共ボイドSETID(int型のID){
this.id = ID。
}

公共INTのgetId(){
IDを返します。
}

公共ボイドのsetName(文字列名){
this.name =名。
}

パブリック文字列のgetName(){
戻り名。
}
}

列挙型は、必要な治療の種類に応じて確立されなければならないtypeHandler

3.2ビルドtypeHandler

セックスが列挙型であるため、データ・タイプとデータベースのテーブルのSexEnumカテゴリ間の変換を確立する必要があります。

// JDBCとSexEnum間の変換を達成
JdbcType整形の//宣言
(JdbcType.INTEGER)@MappedJdbcTypesを
JavaTypeががSexEnumのある宣言//
(= SexEnum.class値)@MappedTypes
BaseTypeHandlerを拡張するパブリッククラスSexTypeHandlerを<SexEnum> {

//性別パラメータ空でない、記憶調製設定
@Override
公共ボイドsetNonNullParameter(Iは、int型のPreparedStatement PSを、SexEnumパラメータ、jdbcType jdbcTypeは)
のSQLException {スロー
ps.setInt(I、parameter.getId())。

}

@Override
公共SexEnum getNullableResult(ResultSetのRSを、String columnName)指定のSQLException {スロー
int型の性別= rs.getInt(COLUMNNAME)を、
(!性別= 1人の&&セックス= 2){場合は
NULLを返します。
}
SexEnum.getEnumById(性別)を返します。
}
//通过列标读取性别
@Override
公共SexEnum getNullableResult(ResultSetのRSは、INT columnIndexが)のSQLException {スロー
int型の性別= rs.getInt(columnIndexにします)。
(!性別= 1人の&&セックス= 2){場合は
NULLを返します。
}
SexEnum.getEnumById(性別)を返します。
}

//通过存储过程读取性别
@Override
公共SexEnum getNullableResult(CallableStatementのCSは、INT columnIndexが)のSQLException {スロー
int型の性別= cs.getInt(columnIndexにします)。
(!性別= 1人の&&セックス= 2){場合は
NULLを返します。
}
SexEnum.getEnumById(性別)を返します。
}

}

ユーザテーブル(MyBatisUserDao)を確立するために3.3インターフェイスが読み出され、インタフェースはMapperFactoryBeanを達成することを実現しない自動的にMyBatisの生成

このインタフェースは、MapperFactoryBeanによって自動的に実装されます。

ここ@Repositoryをする必要がありますが、その特定の意味を理解していません

@Repository
パブリックインターフェイスMyBatisUserDao {
パブリックユーザのgetUser(ロングID)。
}

3.4ビルMyBatisUserDaoは、上記のサービス・インターフェースを呼び出し、(サービスクラスがインタフェースを実装する必要があります)を実装

(1)インタフェース

輸入boat.db.pojo *。;
パブリックインターフェースMyBatisUserService {
パブリックユーザのgetUser(ロングID)。
}

(2)サービスの実装

MapperFactoryBean MyBatisUserDao.getUser(ロングID)機能によって実装サービスコール

@Service
パブリッククラスMyBatisUserServiceImpはMyBatisUserServiceを{実装します

@Autowired
プライベートMyBatisUserDao myBatisUserDao = NULL;
@Override
パブリックユーザのgetUser(ロングID){
myBatisUserDao.getUser(ID)を返します。
}

}

4.自動MyBatisのを達成するために、ユーザー、及びMyBatisUserDao SQL文(POJOエンティティ、インタフェース、及びデータ操作SQL文の間、すなわち、マッピング関係)との間のマッピング関係を作成します

次のように読み取るXML(userMapper.xml)の設立:

<?xml version = "1.0"エンコード= "UTF-8"?>
<DOCTYPEマッパー!
PUBLIC " - // mybatis.org//DTDマッパー3.0 // EN"
「http://mybatis.org/dtd/mybatis -3- mapper.dtd ">
<マッパー名前空間=" boat.db.db.MyBatisUserDao ">
<SELECT ID ="のgetUser」のParameterType = "長い" resultTypeと= "ユーザ">
選択ID、ユーザ名、性別、メモとしてUSER_NAME user.t_userからここでID =#{ID}
</選択>
</マッパー>

(1)名前空間属性がMyBatisUserDao対応ここでは、インターフェイスを宣言し、我々はMyBatisのにそれを実装します

(2)その子ノード上の機能のgetUser MyBatisUserDaoマッピングを、ノードの名前を選択するために、SELECT文が記述され、対応する機能がID =「のgetUser」であり、入力の種類は、ParameterTypeが=「長い」パラメータ戻り値の型resultTypeと=「ユーザー」。

SQL文のgetUserに対応した子ノードの内容(3)。

コンフィギュレーション・ファイルマッピングやスキャンパケットMyBatisの

以下は、application.propertiesファイルに追加されます。

#MyBatisマッピングファイルワイルドカード
mybatis.mapper-位置CLASSPATH =。/ボート/ DB / * XML
注釈@alias関連付けられ#MyBatis走査エイリアスパケット、
mybatis.type-エイリアス= boat.db.pojo・パッケージ
#構成typeHandlerスキャンパッケージ
mybatis.type-ハンドラ= boat.db.pojoパッケージの
#ログ設定
DEBUGを= logging.level.root
DEBUGをlogging.level.org.springframework =
DEBUGをlogging.level.org.org.mybatis =

(1)地図の位置はクラスパス属性ファイルによって与えられます。

(2)MyBatisのスキャンのためのPOJOクラスのパッケージ名を与えられました。

(3)スキャンMyBatisのためのパッケージ名typeHandlerを与えます

(4)タイプのデバッグをログするように構成されています

春ブーツ統合MyBatisのに基づいて、6

のメインクラス(メイン関数を持つクラス)に次のコードを追加します。

@Autowired
SqlSessionFactory sqlSessionFactory = NULL;

@Bean
公共MapperFactoryBean <MyBatisUserDao> initMyBatisUserDao(){
MapperFactoryBean <MyBatisUserDao>ビーン=新しいMapperFactoryBean <>();
bean.setMapperInterface(MyBatisUserDao.class)。
bean.setSqlSessionFactory(sqlSessionFactory)。
Beanを返します。
}

(1)自動上記POJO、操作及び自動SQLインターフェースコードとの間のマッピング関係に従って、SqlSessionFactoryを生成します。

(2)MyBatisUserDao及びSqlSessionFactory MapperFactoryBean、インターフェースのビーンMyBatisUserDao自動操作の発生に基づきます。

7.実行とデバッグ

サービスを呼び出すために使用されるコントローラの設立、

@Controller
@RequestMapping( "/ MyBatisの")
パブリッククラスMyBatisController {
@Autowired
プライベートMyBatisUserService myBatisUserService = NULL;
@RequestMapping( "/のgetUser")
@ResponseBody
パブリックユーザのgetUser(ロングID){
myBatisUserService.getUser(ID)を返します。
}
}

直接HTTPレスポンスボディは、一般的にAJAXを取得した非同期データで使用されている書き込み方法の結果を返すResponseBody @ @ResponseBodyは、プロセスに作用している] {すなわち、使用後@RequestMapping、戻り値は、通常ホップを解決され転送路が、ジャンプパスとして解釈が、直接HTTPレスポンスボディに書き込まれない@ResponseBody追加した後に結果を返します。このような非同期のget JSONデータとして、@ResponseBodyを追加した後、それが直接JSONデータを返します。@RequestBody挿入プロセスHTTPリクエストボディ、適当HttpMessageConverter書き込み要求対象体を使用。

 

その後、デバッグ、2つのエラーを実行します

一つは、データベースを見つけることができません。ヒントはDB_Exampleデータベースを見つけていない、私はspring.datasource.url項目で、理解に起因するエラーを発見しますapplication.properties間違い、書かれたJDBCます。mysql:// localhostを:3306 / DB_Example、 DB_Exampleは、プロジェクト名、データベースを変更することでユーザーの名前です。

セカンドタイムゾーンミス:最初の変更後、「地域エラーmysqlの」ランタイムを示唆しています。mysqlのタイムゾーンを再設定する必要がありますが、CMDのMySQLのログインではどのような場合には失敗したチェックBaiduの後、百度の多くを確認し、ではなく、成功しました。時には後に、元のゾーン設定my.iniファイルを発見しました:

[mysqld_safeを】
時間帯=「UTC」

読みます:

[mysqldを]
デフォルトの時間帯=「+午前8時00分」

成功した操作

 

第三未解決問題:mysqlは後日にログオンすることはできません

おすすめ

転載: www.cnblogs.com/myboat/p/11496997.html