(1)接続プールは接続を格納するために使用されるコンテナです。コンテナはコレクションオブジェクトであり、スレッドセーフである必要があります。2つのスレッドが同じ接続を取得することはできません。コレクションにはキュー機能があります:ファーストイン、ファーストアウト
(2)Mybatis接続プールは3つの構成方法を提供します
メインの構成ファイルはMavenプロジェクトにあり、リソースファイルの下にあります。名前は次のとおりです。SqlMapConfig.xmlのDataSourceタグ、type属性の値は次のとおりです。
プール済み:従来のjavax.sql.DataSource仕様の接続プールを使用して、mybatisには仕様固有の実装があります
UNPOOLED:接続を取得する従来の方法を使用して、javax.sql.DataSourceインターフェースも実装されていますが、プーリングのアイデアは実装されていません
JNDI:サーバーが提供するJNDIテクノロジーは、DataSourceオブジェクトを取得するために使用されます。サーバーが異なれば、DataSourceオブジェクトも異なります。
WebまたはMavenjarプロジェクトでない場合は、使用できません。
(3)<mapper namespace = "cn.rzpt.dao.IUserDao">:そのDaoに対応する名前空間を記述します
(4)着信不明パラメーターのifタグを書き込むxml:
<mapper namespace="cn.rzpt.dao.IUserDao">
<!--在这里,使用if进行判断时,只能使用and符号,不能是两个与符号-->
<select id="findUserByCondition" resultType="cn.rzpt.domain.User" parameterType="cn.rzpt.domain.User">
select * from user where 1=1
<if test="username != null">
and username = #{username}
<!--这里面需要区分大小写,要与实体类的写法一致-->
</if>
<if test="sex != null">
and sex = #{sex}
</if>
</select>
</mapper>
ここでタグ:
<select id="findUserByCondition" resultType="cn.rzpt.domain.User" parameterType="cn.rzpt.domain.User">
select * from user
<where>
<if test="username != null">
and username = #{username}
</if>
<if test="sex != null">
and sex = #{sex}
</if>
</where>
</select>
VOを書く必要があります:
public class QueryVO {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
インターフェース
List<User> findUserByVo(QueryVO vo);
//根据传入的参数条件查询:姓名,性别,地址...,有其一,其二等,或者全部
List<User> findUserByCondition(User user);
テストクラス
@Test
public void testFindByCondition(){
User user = new User();
user.setUsername("老王");
List<User> users = userDao.findUserByCondition(user);
for (User u : users){
System.out.println(u);
}
}
(5)foreach:複数のパラメーターを渡し、idを(...)
<mapper namespace = "cn.rzpt.dao.IUserDao"> <!-クエリ結果の列名とエンティティクラスの属性名の間の対応を構成します-> <resultMap id = "userMap" type = " cn.rzpt.domain .User "> <!-主キーフィールドの対応-> <id property =" id "column =" id "> </ id> <!-非主キーフィールドの対応、プロパティはエンティティクラス属性と一致している必要があります。列はデータベースと一致している必要があります。Linuxでは、列名は大文字と小文字が区別されます-> <result property = "username" column = "username"> </ result> < result property = "address" column = "address"> </ result> <result property = "sex" column = "sex"> </ result> <result property = "birthday" column = "birthday"> </ result> </ resultMap> <!-繰り返されるSQLステートメントを抽出します-> <sql id = "defaultUser"> <!-以下に他のステートメントがある場合は、この時点でセミコロンを記述しないでください。エラーが報告されます。 -> ユーザーから*を選択 </ sql> <!-根Disqueryvo中的id集合集合查询用户列表-> <select id = "findUserInIds" resultMap = "userMap" parameterType = "cn.rzpt.domain.QueryVO"> <!-select * from user- -> <include refid = "defaultUser"> </ include> <where> <if test = "ids!= null and ids.size()> 0"> <foreach collection = "ids" open = "and id in( "close =") "item =" id "separator ="、 "> #{id} </ foreach> </ if> </ where> </ select> </ mapper>
パブリッククラスQueryVO { プライベートユーザーユーザー; プライベートリスト<整数> ID; public List <Integer> getIds(){ return ids; } public void setIds(List <Integer> ids){ this.ids = ids; } public User getUser(){ ユーザーを返す; } public void setUser(User user){ this.user = user; } }
パブリックインターフェイスIUserDaoに追加
/ ** * queryvo * @param vo * @return * / List <User> findUserInIds(QueryVO vo);で提供されたIDセットに従ってユーザー情報をクエリします。
テストクラス
@Test public void testFindInIds(){ QueryVO vo = new QueryVO(); List <Integer> list = new ArrayList <Integer>(); list.add(41); list.add(43); vo.setIds(list); List <User> users = userDao.findUserInIds(vo); for(User u:users){ System.out.println(u); } }