Mybatis的使用(3)
- 2022 年 7 月 31 日
- 筆記
- Mybatis的簡單使用
1:動態sql:
意義:可以定義程式碼片段,可以進行邏輯判斷,可以進行循環或批量處理,使條件判斷更為簡單
1.1:定義程式碼片段簡化程式碼:
1.2:多條件查詢:
<where> <if test=''>的用法:用於條件判斷查詢:
List<User> selectCondition(User user);
<select id="selectCondition" resultType="user" parameterType="user">
select <include refid="c"></include> from mybatis.user
<where>
<if test="name!=null and name!=''">
and name like concat('%',#{name},'%')
</if>
<if test="pwd!=null and pwd!=''">
and pwd =#{pwd}
</if>
</where>
</select>
User user=new User();
user.setName("張");
user.setPwd("111111");
List<User> users = usermapper.selectCondition(user);
for (User user1 : users) {
System.out.println(user1);
}
}
1.3:條件修改:
<set> <if test=''>的用法:用於條件判斷更新:
int updatecondition(User user);
<update id="updatecondition" parameterType="user">
update mybatis.user
<set>
<if test="name!=null and name!=''">
name=#{name},
</if>
<if test="pwd!=null and pwd!=''">
pwd=#{pwd},
</if>
</set>
where id=#{id}
</update>
User user=new User();
user.setId(2);
user.setName("李四");
int i = usermapper.updatecondition(user);
sqlSession.commit();
注意:使用<set>至少更新一列
1.3:循環查詢,批量刪除,批量增加,批量更新:
循環查詢<foreach>的用法:
List<User> selectForEach(Integer[] integers);
<select id="selectForEach" resultType="user">
select <include refid="c"></include> from mybatis.user
where id in
<foreach collection="array" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</select>
Integer[] arr={2,4,6};
List<User> users = usermapper.selectForEach(arr);
for (User user1 : users) {
System.out.println(user1);
}
<foreach>參數講解:
collection:用來指定參數的類型,如果是List集合,則為list,如果是Map集合,則為map,如果為數組,則為array
item:每次循環遍歷出來的值或對象
separator:多個值或對象之間的分隔符
open:整個循環外面的前括弧
close:整個循環外面的後括弧
批量刪除<foreach>的用法:
int deleteForeach(Integer[] integers);介面
<delete id="deleteForeach">
delete from mybatis.user
where id in
<foreach collection="array" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</delete> xml文件
Integer[] arr={1,2};
int i = usermapper.deleteForeach(arr);
sqlSession.commit();測試
批量增加<foreach>的用法:
int insertForeach(List<User> list);
<insert id="insertForeach" parameterType="user">
insert into mybatis.user(id,name,pwd)
values
<foreach collection="list" item="u" separator=",">
(#{u.id},#{u.name},#{u.pwd})
</foreach>
</insert>
注意:item="u",增加的對象為u,取出成員變數的形式應該為u.name等
List<User> list=new ArrayList<User>();
list.add(new User(1,"張三","1111111"));
list.add(new User(2,"張三","1111111"));
list.add(new User(10,"張三","1111111"));
int i = usermapper.insertForeach(list);
sqlSession.commit();
批量更新<foreach>的用法:
int updateForeach(List<User> list);
<update id="updateForeach" parameterType="user">
<foreach collection="list" item="u" separator=";">
update mybatis.user
<set>
<if test="u.name!=null and u.name!=''">
name=#{u.name},
</if>
<if test="u.pwd!=null and u.pwd!=''">
pwd=#{u.pwd},
</if>
</set>
where id=#{u.id}
</foreach>
</update>
List<User> list=new ArrayList<User>();
list.add(new User(1,"王五","1111111"));
list.add(new User(2,"李四","22222222"));
list.add(new User(10,"張三","3333333"));
int i = usermapper.updateForeach(list);
sqlSession.commit();
注意:需要在dabase.properties中加入&allowMultiQueries=true,即允許多行操作
指定參數位置下標查詢:


入參是map:


返回值是一行的map:
Map usermap(Integer id);
<select id="usermap" parameterType="int" resultType="map">
select name,pwd from mybatis.user where id=#{id}
</select>
Map usermap = usermapper.usermap(1);
System.out.println(usermap);
System.out.println(usermap.get("name"));
返回值是多行的map:
List<Map> getmap();
<select id="getmap" resultType="map">
select name,pwd from mybatis.user
</select>
List<Map> getmap = usermapper.getmap();
for (Map map : getmap) {
System.out.println(map);
}

