7表的列名与实体类列名不对应,如何将查询结果封装到实体类对象中
Posted ryuichi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7表的列名与实体类列名不对应,如何将查询结果封装到实体类对象中相关的知识,希望对你有一定的参考价值。
解决方法:
(1)SQL语句用as关键字给列名取别名
(2)用MyBatis提供的ResultMap标签建立实例类与表之间的关系
总结:第一种方法在SQL语句的层面上解决问题,效率高,复用性差,第二种反之;
表结构
实体类属性
private Integer userId;
private String username;
private Date UserBirthday;
private String UserGender;
private String UserAddress;
表的列名与实体类的属性不对应
as关键字取别名
接口方法
/**
* 用as关键字取别名,建立列名与属性之间的对应关系
*/
List<User> findAll();
映射文件
<!--列名username与属性名userName只是大小写问题,mysql数据库在windows下是不区分大小写的
所以不用起别名-->
<select id="findAll" resultType="com.example.pojo.User">
SELECT id as userId, username, birthday as userBirthday, gender as userGender, address as userAddress FROM user
</select>
测试
@Test
public void TestFindAll(){
List<User> users = userMapper.findAll();
for (User user: users
) {
System.out.println(user);
}
}
通过ResultMap与实体类属性建立关系
接口
/**
* 通过resultMap与实体类建立关系
*/
List<User> findAll2();
映射文件
<!--id为resultMap的唯一标识
type属性指定将该对应关系赋给哪个实体类
username从忽略大小的角度来说该属性与列名是对应的,所以不用设置对应关系
-->
<resultMap id="userResultMap" type="com.example.pojo.User">
<!--id标签说明该字段是主键,property是java中的属性名
column是表中列名
-->
<id property="userId" column="id"/>
<result property="userBirthday" column="birthday"/>
<result property="userGender" column="gender"/>
<result property="userAddress" column="address"/>
</resultMap>
<!--通过resultMap属性引用resultMap封装结果集-->
<select id="findAll2" resultMap="userResultMap">
SELECT id, username, birthday, gender, address FROM user
</select>
测试
@Test
public void TestFindAll2(){
List<User> users = userMapper.findAll2();
for (User user: users
) {
System.out.println(user);
}
}
以上是关于7表的列名与实体类列名不对应,如何将查询结果封装到实体类对象中的主要内容,如果未能解决你的问题,请参考以下文章