这篇文章主要介绍了Mybatis中实体类属性与数据列表间映射方法介绍,一共四种方法方法,供大家参考。

Mybatis不像Hibernate中那么自动化,通过@Column注解或者直接使用实体类的属性名作为数据列名,而是需要自己指定实体类属性和数据表中列名之间的映射关系,这一点让用惯了Hibernate的人很不习惯,所幸经过探索找到了建立映射关系的几种办法,其中总也有比较简单的。

首先定义一个实体类User,如下:

public classUser {privateInteger id;privateString username;privateDate birthday;privateString address;privateString sex;

.......

(setter,getter省略)

}

其次定义一个接口UserDao ,如下:

public interfaceUserDao {

ListselectUserByName ();

}

还有设计一张user数据库表,如下:

9f245738247f6f8116297787fd99f7fc.png

然后下面将详细说明四种常用的方法。

1.通过XML映射文件中的resultMap

这种方式是最常见的,类似如下:

通过里面的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 = newSqlSessionFactoryBean();

Configuration configuration= newConfiguration();

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);

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐