http://blog.csdn.net/lmy86263/article/details/53150091
Mybatis不像hibernate中那么自動化,通過@Column
注解或者直接使用實體類的屬性名作為數據列名,而是需要自己指定實體類屬性和
數據表中列名之間的映射關系,這一點讓用慣了Hibernate的人很不習慣,所幸經過探索找到了建立映射關系的三種辦法,其中總也有比較
簡單的。
首先先定義一個實體類,如下:
public class User implements Serializable { private Integer userId; private String userName; ...... }
1. 通過XML映射文件中的resultMap,resultType
這種方式是最常見的,類似如下:
<mapper namespace="data.UserMapper"> <resultMap type="data.User" id="userResultMap"> <!-- 用id屬性來映射主鍵字段 --> <id property="id" column="user_id"/> <!-- 用result屬性來映射非主鍵字段 --> <result property="userName" column="user_name"/> </resultMap> </mapper>
resultType :
作用:將查詢結果按照sql列名pojo屬性名一致性映射到pojo中。
通過里面的id
標簽和result
標簽來建立映射關系,由property
和column
分別指定實體類屬性和數據表的列名。
2. 通過注解@Results
和@Result
這兩個注解是與XML文件中的標簽相對應的:
@Results
對應resultMap
@Result
對應result
這兩個注解是應用在方法的級別上的,也就是在mapper方法上,如下:
@Select("select * from t_user where user_name = #{userName}") @Results( @Result(property = "userId", column = "user_id"), @Result(property = "userName", column = "user_name") ) User getUserByName(@Param("userName") String userName);
缺點:
- 由於注解是針對方法的,對於Mapper中的每個操作數據庫的方法都必須有相同的注解完成映射關系的建立,導致很多的配置是重復的;
- 如果要避免配置重復的問題,可以采用在XML配置文件中配置這個
resultMap
,然后再@Result
中通過id屬性引用這個resultMap
,
但是這樣感覺很麻煩(由於使用了兩種配置方式),不如直接使用基於XML的resultMap
配置方式;
3. 通過屬性配置完成映射
使用者最陌生的是通過配置屬性來完成映射,Mybatis給我們提供了一種映射方式,如果屬性的命名是遵從駝峰命名法的,數據列名遵從下划線命名,
那么可以使用這種方式,類似如下:
- userName對應user_name;
- userId對應user_id;
配置代碼如下:
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); Configuration configuration = new Configuration(); configuration.setMapUnderscoreToCamelCase(true); sqlSessionFactoryBean.setConfiguration(configuration);
4. 通過使用在SQL語句中定義別名完成映射
這種方式最直接,直接在SQL語句中建立別名來完成映射,如下:
@Select("select user_name as userName, user_id as userId from t_user where user_name = #{userName}") User getUserByName(@Param("userName") String userName);