這篇文章主要介紹了Mybatis中實體類屬性與數據列表間映射方法介紹,一共四種方法方法,供大家參考。
Mybatis不像Hibernate中那么自動化,通過@Column注解或者直接使用實體類的屬性名作為數據列名,而是需要自己指定實體類屬性和數據表中列名之間的映射關系,這一點讓用慣了Hibernate的人很不習慣,所幸經過探索找到了建立映射關系的幾種辦法,其中總也有比較簡單的。
首先定義一個實體類User,如下:
public class User { private Integer id; private String username; private Date birthday; private String address; private String sex; ....... (setter,getter省略) }
其次定義一個接口UserDao ,如下:
public interface UserDao { List<User> selectUserByName (); }
還有設計一張user數據庫表,如下:
然后下面將詳細說明四種常用的方法。
1. 通過XML映射文件中的resultMap
這種方式是最常見的,類似如下:
<mapper namespace="demo.UserDao"> <resultMap id="userResultMap" type="entity.User"> <!-- 用id屬性來映射主鍵字段 --> <id property="id" column="uid"/> <!-- 用result屬性來映射非主鍵字段 --> <result property="username" column="uusername "/> <result property="birthday" column="ubirthday"/> <result property="address" column="uaddress"/> <result property="sex" column="usex"/> </resultMap> </mapper>
通過里面的id標簽和result標簽來建立映射關系,由property和column分別指定實體類屬性和數據表的列名。
2. 通過注解@Results和@Result
這兩個注解是與XML文件中的標簽相對應的:
@Results對應resultMap
@Result對應result
這兩個注解是應用在方法的級別上的,也就是在UserDao的方法上,這時候就需要xml了,如下:
@Select("select * from user where uusername = #{userName}") @Results({ @Result( id = true ,property = "id", column = "uid"), @Result(property="username" ,column="uusername"), @Result(property="birthday", column="ubirthday"), @Result(property="address", column="uaddress"), @Result(property="sex" ,column="usex"), } ) User selectUserByName(@Param("userName") String username);
在這里把參數username,和userName區別開了,目的是在凸顯Param注解后面的參數要與sql語句里的對應上,方法里的形參隨便都可以。id為是否為主鍵。
缺點:
由於注解是針對方法的,對於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 id from user where user_name = #{userName}") User selectUserByName(@Param("userName") String username);