1. 程式人生 > >sql對映檔案

sql對映檔案



列舉SQL對映檔案的幾個頂級元素
mapper:對映檔案的跟元素節點,只有一個屬性namespace(名稱空間).其作用如下:
用於區分不同的mapper,全域性唯一
繫結DAO介面,即面向介面程式設計。當namespace繫結某一介面之後,可以不用寫該介面的實現類,MyBatis會通過介面的完整限定名查詢到對應的mapper配置檔案來執行SQL語句。因此namespace的命令必須要跟介面同名


cache:配置給定名稱空間的快取


cache-ref:從其他名稱空間引用快取配置


resultMap:用來描述資料庫結果集和物件的對應關係

sql:可以重用SQL塊,也可以被其他語句引用


insert:對映插入語句
resultType和resultMap的區別是什麼
返回型別可以用resultType也可以用resultMap
resultType是直接表示返回型別
resultMap則是對外部ResultMap的引用
兩者不能同時存在




MyBatis多引數入參如何處理?有幾種方式
一、#{引數索引}
1.        DAO層
Mapper介面類
User logon(String user_name,Stringpassword);
Mapper.xml檔案
<select id="logon" resultMap="UserResultMap" >
    select
    <include refid="Base_Column_List"/>
    from sys_user
    WHERE user_name = #{0} and password = #{1}
</select>
這裡用的是#{引數索引}


2.        Service層
Service介面類
User logon(String user_name,String password);
Service實現類
@Override
public User logon(String user_name, String password) {
   return userMapper.logon(user_name,password);
}


二、Map傳引數
1.        DAO層
Mapper介面類
User logon(Map map);
Mapper.xml檔案
<select id="logon" resultMap="UserResultMap" >
    select
    <include refid="Base_Column_List"/>
    from sys_user
    where user_name = #{user_name,jdbcType=VARCHAR} and password = #{password,jdbcType=VARCHAR}
</select>
這裡介面方法傳入的map
2.        Service層
Service介面
User logon(String user_name,String password);
Service實現類
@Override
   public User logon(String user_name, String password) {
      Map paramMap=new HashMap();
      paramMap.put("user_name",user_name);
      paramMap.put("password",password);
      User user=userMapper.logon(paramMap);
      return user;
   }
Service層實現了要將引數與map繫結


三、註解方法傳引數
1.        DAO層
Mapper介面類
User logon(@Param("user_name")String user_name,@Param("password")String password);
Mapper.xml檔案
<select id="logon" resultMap="UserResultMap" >
    select
    <include refid="Base_Column_List"/>
    from sys_user
    where user_name = #{user_name,jdbcType=VARCHAR} and password = #{password,jdbcType=VARCHAR}
    </select>
這裡主要注意介面傳入引數前面加了@Param註解
2.        Service層
Service介面
User logon(String user_name,String password);
Service實現類
@Override
   public User logon(String user_name, String password) {
      return userMapper.logon(user_name,password);
   }




mapper元素的namespace屬性的作用是什麼
 namespace決定了action的訪問路徑,預設為"",可以接受所有路徑的action


不同的SQL對映檔案,元素的ID必須不同嗎


談談你對association和collection元素的理解
public class A{
    private B b1;
    private List<B> b2;
}
在對映b1屬性時用association標籤, 對映b2時用collection標籤,分別是一對一,一對多的關係