blog

mybatisを学ぶ

1 マッパーのパスはtoパスと同じであることが望ましいです。 4 は基本型またはラッパークラスです。 プレースホルダは自由に書くことができます。 メソッドは固定で、他の名前で書くことはできません。 こ...

Feb 22, 2020 · 5 min. read
Share this

プロキシDaoに基づくMybatis CRUD操作

CRUDオペレーション

1 マッパーのパスはtoパスと同じであることが望ましい。

2 自動コミットをfalseに設定 JDBC接続のロールバック

sqlSession.commit();

3 parameterType の整数書き込み

5 ファジー・クエリの設定方法

select * from user where ユーザー名 like '%${値}%'

上記では、元の#{}プレースホルダーは{value}に変更され、他の名前で書くことはできません。

public String handleToken(String content) {
 Object parameter = context.getBindings().get("_parameter");
 if (parameter == null) {
 context.getBindings().put("value", null);
 } else if (SimpleTypeRegistry.isSimpleType(parameter.getClass())) {
 context.getBindings().put("value", parameter);
 }
 Object value = OgnlCache.getValue(content, context.getBindings());
 return (value == null ? "" : String.valueOf(value)); // issue #274 return "" instead of "null"
}

ソースコードでは、読み込むキーの名前は「value」と指定されているので、パラメータをバインドするときにのみvalueを呼び出すことができます。

6

'%${value}%':

select * from user where username like '%111%'

A: #{aaa}: select * from user where username like ?

#はプレースホルダ記号

はSQL文字列のスプライスを意味します。

単純な値やpojo属性の値は{}で受け取ることができます。 parameterTypeが単一の単純な値を渡す場合、${}括弧は値のみとなります。

7 ユーザーIDの戻り値の追加

<!-- keyProperty 返される値の名前を表す Entity クラス keyColumn データベースのカラム名 Table order 挿入後の振る舞いを表すために AFTER という値を取る resultType 返される値の型を表す-->
	<selectKey keyProperty="id" keyColumn="id" order="AFTER" resultType="java.lang.Integer">
	SELECT 1712435;
	</selectKey>

8 Mybatis と JDBC プログラミングの比較

1.この問題を解決するためにデータベースリンクプールを使用すると、データベースリンクが頻繁に作成および解放されるため、システムリソースの浪費が発生し、システムのパフォーマンスに影響します。

解決策: SqlMapConfig.xml でデータ・リンク・プールを構成し、接続プールを使用してデータベース・リンクを管理します。

2コードによって引き起こされるコードに書かれたSQLステートメントは、維持することは容易ではない、SQLの変更の実際のアプリケーションが大きくなることがあります、SQLの変更は、Javaのコードを変更する必要があります。

解決策:Javaコードとは別にXXXXmapper.xmlファイルにSqlステートメントを設定します。

3.sql文にパラメータを渡すのは、sql文のwhere条件が定かでなく、多かれ少なかれあり、プレースホルダがパラメータに対応する必要があるので面倒です。

4.結果セットの構文解析の問題、SQLの変更は構文解析コードの変更につながり、構文解析の前にトラバースする必要がありますが、データベースのレコードをpojoオブジェクトにカプセル化できれば、構文解析がより便利になります。

解決策:Mybatisは、SQLの実行結果を自動的にjavaオブジェクトにマッピングし、文中のresultTypeで出力結果の型を定義します。

Mybatisにおけるパラメータの深さ

parameterType 入力タイプ

1 シンプルなタイプ

2 pojo オブジェクト

オブジェクト・フィールドの値を、プロパティの名前に#{}または${}を使ったognl式でパースします。

ognl 式 オブジェクト・グラフィック・ナビゲーション言語 オブジェクト・グラフィック・ナビゲーション言語

オブジェクトのfetchメソッドでデータを取得します。getは省略します。

例えば

クラスへの書き込み: user.getUserName() OGNL: user.username

なぜuserを使わずにmybatisで直接usernameを書けるのですか?

属性が属するクラスは parameterType で指定されています。

3 pojoラップオブジェクト

resultType結果型のカプセル化

1 シンプルなタイプ

2 pojo オブジェクト

3ポジョリスト

mysql は Windows では大文字と小文字を区別しません!

resultMap タグは、クエリ列名とエンティティ・クラスの属性名が矛盾している場合の対応を確立します。

(1) エイリアスクエリを使用して、SQL テキストを効率的に実行します。

<!-- すべての操作に対してクエリーを設定する --> 
<select id="findAll" resultType="com.itheima.domain.User">
select id as userId,username as userName,birthday as userBirthday,
sex as userSex,address as userAddress from user
</select>

2) resultMapの定義 実行効率は遅い 開発効率は速い

<resultMap type="com.itheima.domain.User" id="userMap"> <id column="id" property="userId"/>
<result column="username" property="userName"/>
<result column="sex" property="userSex"/>
<result column="address" property="userAddress"/>
<result column="birthday" property="userBirthday"/>
</resultMap>

idタグ:主キーフィールドを指定するために使用します。

result タグ:プライマリ・キー以外のフィールドを指定するために使用します。

column属性:データベースのカラム名を指定します。

プロパティproperty:エンティティクラスのプロパティ名を指定します。

<select id="findAll" resultMap="userMap">
select * from user
</select>

PreparedStatementオブジェクトの実行メソッド

executeはCRUD文のいずれかを実行します。 結果セットがあるかどうかを示すboolenを返します。あるものは真

executeUpdate は CUD 文のみを実行できます。

executeQueryはSELECT文しか考えられませんが、ResultSetオブジェクトの返り値を追加、削除、変更することはできません。

設定内容

1 プロパティの設定

<!-- プロパティを設定する
 タグの内部でデータベースへの接続に関する情報を設定することもできるし、プロパティを通じて外部の設定ファイルを参照することもできる。
 urlはURLとして記述する必要があり、クラスパスに存在する必要がある。
 url リソースの場所を一意に特定する URL として記述する必要がある。
 write: プロトコル ホスト ポート URI
 http://:/is
 URI: Uniform Resource Identifier (統一資源識別子) アプリケーションがリソースの位置を一意に特定できる。
-->
<properties resource="jdbcConfig.properties">
<!-- <properties url="file:///C://XXX">-->
<!-- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>-->
<!-- <property name="url" value="jdbc:mysql://localhost:3306/htoa?serverTimezone=GMT"/>-->
<!-- <property name="username" value="root"/>-->
<!-- <property name="password" value="htoa"/>-->
</properties>
 <dataSource type="POOLED">
<!-- データベースに接続するための基本情報を設定する -->
 <property name="driver" value="${jdbc.driver}"/>
 <property name="url" value="${jdbc.url}"/>
 <property name="username" value="${jdbc.username}"/>
 <property name="password" value="${jdbc.password}"/>
 </dataSource>

2 typeAliasesの設定

<!-- typeAliasesによるエイリアスの設定 ドメイン内のクラス名のみが設定可能である。-->
<typeAliases>
<!-- typeAlias エイリアスの構成 タイプ エンティティ・クラスの完全修飾クラス名を指定する エイリアス 指定したエイリアスが大文字と小文字を区別しない場合は、エイリアスを指定する。-->
<!-- <typeAlias type="com.mybatis.domain.User" alias="user"></typeAlias>-->
<!-- エイリアスを設定するパッケージの実行に使用する。 指定すると、パッケージ配下のすべてのエンティティ・クラスに対してエイリアスが登録される。-->
 <package name="com.mybatis.domain"/>
</typeAliases>

3 パッケージ

<!-- マッピング・プロファイルの場所を指定する。 -->
<mappers>
<!-- <mapper resource="com/mybatis/dao/User.xml"></mapper>-->
<!-- 完了を指定する場合、マッパーやクラスは必要ない。-->
<package name="com.mybatis.dao"></package>
</mappers>
Read next

非同期sum関数を実装する

メソッド1:メソッド2:メソッド3を変更することはできません以下は、コードの一部であるため、sum関数は、21を返すように、あなたはsum関数のasyncAdd関数を呼び出す必要があり、asyncAdd関数を変更することはできません改善してください:

Feb 22, 2020 · 3 min read