mybatis-03

mybatis-03java

一、mybatis的別名【兩種】
在MyBatis中能夠爲變量類型定義別名。簡化映射文件的定義,在覈心配置文件中定義的別名。
別名應用:MyBatis框架先將resultType定義忽略大小寫,做爲類型的徹底命名,查找類型,若是類型不存在,則檢索別名定義, 若是別名定義不存在,拋出異常。
mybatis的別名使用步驟
①mybatis整體配置文件裏配置別名標籤 typeAliases
<!-- 配置別名 -->
<typeAliases>
  <!-- <typeAlias type="com.boom.pojo.User" alias="user"/> -->
  <package name="com.boom.pojo"/>
</typeAliases>
②mapper映射文件裏resultType須要注意寫法
typeAlias配置別名,resultType須要跟alias對應
package配置別名,掃描的是包,resultType須要些對應的實體類的類名
<select id="selectById" parameterType="int" resultType="User">
  select * from user where userid=#{userid}
</select>
二、mybatis返回值類型
就是查詢語法處理結果集行數據的方式,就是select標籤的resultType屬性.
2.1 簡單類型
八種基本類型,包裝類型,String。表明只處理結果集行數據中的第一個字段。經常使用於處理數據量查詢語法: select username from student
2.2 自定義類型
自定義的java對象類型.將結果集中的行數據,封裝成對應對象,並返回。最經常使用的返回結果類型.
<!-- 返回的結果集只對姓名作映射 -->
<select id="selectById2" parameterType="int" resultType="string">
  select username from user where userid=#{userid}
</select>
2.3 map集合類型
  Map集合對象:將結果集的行數據封裝爲一個Map類型的對象,字段名做爲key,字段值做爲value。最通用的返回結果類型。能夠處理部分字段查詢,多表聯合查詢,符合查詢等,對應複雜查詢語法。
<!-- map -->
<select id="selectByAll" parameterType="int" resultType="map">
  select * from user
</select>
三、【mapper動態構建】
  只定義接口和SQL映射文件,不編寫DAO實現類型。經過遵循MyBatis定義規範,實現動態的DAO接口實現類構建。MyBatis在定義數據訪問接口的時候, 在包的命名上有特有習慣.習慣是: xxx.mapper。
必要規範:
①mybatis作動態綁定的時要求接口的名稱要和被綁定的映射文件名稱必須一致

②要求映射文件的命名空間(namespace)與接口的全限定名徹底一致

③要求標籤的ID值,和對應的接口方法命名徹底一致

④整體配置文件裏管理映射用package【核心配置文件中一次性讀取全部的SQL映射文件】
<mappers>
  <package name="com.boom.mapper"/>
</mappers>
⑤調用的API發生了變化拿到session調用getMapper
SqlSession session = MybatisUtil.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
System.out.println(mapper.selectById(1));
四、mybatis動態SQL
1)if標籤(用於判斷的標籤)
語法:<if test=」布爾表達式」>
應用限制:布爾表達式中使用的變量命名,必須是自定義類型屬性或Map的key
if條件判斷的運算符寫法:
大於 gt     小於lt     等於eq
大於等於gte  小於等於lte   不等於neq 
也可直接寫:>、<、>=、<=、 !=
web

 1 <!-- 根據不一樣條件進行不一樣的查詢 -->
 2 <select id="selectByproPerties" resultType="User">
 3     select * from user where 1=1
 4     <if test="userid !=null">
 5         and userid = #{userid}
 6     </if>
 7     <if test="username != null and username.length() > 0">
 8         and username = #{username}
 9     </if>
10     <if test="userage != null">
11         and userage = #{userage}
12     </if>
13 </select>
mapper.xml
1 //根據不一樣條件進行不一樣的查詢
2 User user = new User();
3 user.setUserage(18);
4 user.setUsername("小紅");
5 List<User> list = mapper.selectByproPerties(user );
6 for (User users : list) {
7     System.out.println(users);
8 }
TestMapper.java

動態SQL主要看控制檯打印的日誌記錄

2)where標籤
用於定義where條件查詢子句的標籤
語法:<where>定義標籤或SQL語法</where>
應用特性:會根據標籤體內容,決定是否增長where子句, 若是標籤體中有內容,增長where查詢子句。若是標籤體無內容,不增長where查詢子句。 在where標籤拼接查詢子句條件的時候,,會檢查第一個查詢條件,且只檢查第一個查詢條件。檢查查詢條件前是否有and或or關鍵字,若是有關鍵字,刪除.。若是沒有關鍵字,不作任何操做。
特色:若是在mapper.xml中不寫where 1=1,查詢語句也會自動拼接where 1=1,若是給定條件,where標籤會在SQL語句中拼接成大寫的WHEREsql

 1 <select id="selectByproPerties_where" resultType="User">
 2     select * from user
 3         <where>
 4         <if test="userid !=null">
 5             and userid = #{userid}
 6         </if>
 7         <if test="username != null and username.length() > 0">
 8             and username = #{username}
 9         </if>
10         <if test="userage != null">
11             and userage = #{userage}
12         </if>
13     </where>
14 </select>    
mapper.xml
1 //根據不一樣條件進行不一樣的查詢
2 User user = new User();
3 user.setUserage(18);
4 //user.setUsername("小紅");
5 List<User> list = mapper.selectByproPerties_where(user );
6 for (User users : list) {
7     System.out.println(users);
8 }
TestMapper.java


3)choose標籤(二選一的結果)
補充if標籤的判斷邏輯標籤。 能夠實現相似java中的if  else  if else的判斷標籤
語法: <choose> <when test=」布爾表達式」></when><otherwise></otherwise></choose>
含義: <when>標籤至關於if或else if. <otherwise>標籤至關因而else數據庫

 1 <select id="selectByproPerties_choose" resultType="User">
 2     select * from user
 3     <where>
 4         <choose>
 5             <when test="username != null and username.length() > 0">
 6                 username = #{username}
 7             </when>
 8             <otherwise>
 9                 userage = 18
10             </otherwise>
11         </choose>
12     </where>
13 </select>
mapper.xml
1 SqlSession session = MybatisUtil.openSession();
2 UserMapper mapper = session.getMapper(UserMapper.class);
3         
4 User user = new User();
5 //user.setUsername("小紅");
6 List<User> list = mapper.selectByproPerties_choose(user );
7 for (User users : list) {
8     System.out.println(users);
9 }
TestMapper.java


4)foreach標籤
循環迭代標籤,經常使用於處理集合條件.如:批量新增, 範圍條件查詢.
當循環的集合爲Map的時候, 默認循環遍歷value數據集合. 能夠經過表達式調用java方法,實現key數據集合的遍歷.數組

1 <insert id="insertuser_batch">
2     insert into user(username,userage) values
3     <foreach collection="list" separator="," item="user">
4         (#{user.username},#{user.userage})
5     </foreach>
6 </insert>
mapper.xml寫法一

定義接口:void insertuser_batch(List<User> list);session

1 SqlSession session = MybatisUtil.openSession();
2 UserMapper mapper = session.getMapper(UserMapper.class);
3 User user = new User();
4 List<User> list = new ArrayList<>();
5 list.add(new User("a1", 21));
6 list.add(new User("a2", 22));
7 list.add(new User("a3", 23));
8 mapper.insertuser_batch(list);
TsetMapepr.java


查看數據庫是否批量添加成功:【測試避免麻煩:開啓mybatis事物自動提交】
mybatis

循環迭代標籤參數的詳解
標籤能夠循環數組, Collection, Map
屬性:
collection - 參數對象的property或field, 以及Map集合的key. 要循環的集合
open - 循環數據的前綴
close - 循環數據的後綴
item - 每次循環的變量命名
separator- 以什麼符號分割
mapper.xml寫法二

5)trim標籤
在標籤內容數據的先後,增長或減小一個字符串.
先刪除先後綴,再增長先後綴.
prefix 給sql語句拼接的前綴 先去後加
suffix 給sql語句拼接的後綴
prefixesToOverride 去除sql語句前面的關鍵字或者字符,該關鍵字或者字符由prefixesToOverride屬性指定,
假設該屬性指定爲」AND」,當sql語句的開頭爲」AND」,trim標籤將會去除該」AND」
suffixesToOverride 去除sql語句後面的關鍵字或者字符,該關鍵字或者字符由suffixesToOverride屬性指定
6)set標籤
用於動態拼接更新語句中set子句的標籤.
更新數據:根據參數的屬性決定更新什麼字段,自動去掉set語句最後的那個逗號
若是有屬性值,則更新字段。 若是沒有屬性值,則不更新字段app

 1 <!-- 根據id進行更新 -->
 2 <update id="updateById">
 3     update user 
 4     <set>
 5         <if test="username != null and username.length() > 0">
 6         username = #{username},
 7             </if>
 8         <if test="userage != null">
 9             userage = #{userage},
10         </if>
11     </set>
12     <where>
13         userid =#{userid}
14         </where>
15 </update>    
mapper.xml

定義接口:void updateById(User user);框架

1 SqlSession session = MybatisUtil.openSession();
2 UserMapper mapper = session.getMapper(UserMapper.class);
3 User user = new User();
4 user.setUserid(1);
5 user.setUserage(20);
6 user.setUsername("更新");
7 mapper.updateById(user);
TestMapper


7)sql標籤
定義SQL語法片斷的標籤,能夠簡化配置文件, 提供SQL語法的通用性.
五、mybatis事物和filter過濾器
事物處理:實現javax.servlet.Filter;
web.xml配置

用ThreadLocal去完成事物的一致性

ide

相關文章
相關標籤/搜索