【MyBatis】——解决字段名与实体类属性名不相同的冲突

原创 2016年06月14日 14:38:04

            在mybatis中进行查询时,查询出的结果需要用resultType配置一个输出类型,可以使简单类型或者pojo对象,如果是稍微复杂一些的可以中包装类型封装还可以使用自定义的包装类型,包装类也是一种pojo对象。但是当遇到表中的字段名和表对应实体类的属性名不完全相同的情况时,改如何解决字段名与实体类属性名不相同的冲突问题呢?还有一种输出映射是resultMap

 

            比如说遇到如下的sql语句:

SELECT id id_,username username_ FROM USER WHERE id=#{value}


使用ResultMap

定义resultMap

<!-- 定义resultMap 
	将SELECT id id_,username username_ FROM USER和user类中的属性作一个映射关系
	type:resultMap最终映射的java对象类型,可以使用别名
	id:对resultMap的唯一标识-->
<resultMap type="user" id="userResultMap">
	<!-- id表示查询结果集中唯一标识
		column:查询出来的列名
		property:type指定的pojo类型中的属性名-->
	<id column="id_" property="id"/>
	<!--result:对普通映射定义
		column:查询出来的列名
		property:type指定的pojo类型中的属性名
		最终resultMap对column和property作一个映射关系(对应关系)-->
	<result column="username_" property="username"/>
</resultMap>

使用resultMap作为statement的输出映射类型

<!-- 使用resultMap进行输出映射 
		resultMap:指定定义的resultMap的id,如果这个resultMap在其它的mapper文件,前边需要加namespace-->
	<select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">
		SELECT id id_,username username_ FROM USER WHERE id=#{value}
	</select>

 mapper接口

//根据id查询用户信息,使用resultMap输出
public User findUserByIdResultMap(int id) throws Exception;

测试

@Test
public void testFindUserByIdResultMap() throws Exception{
	SqlSession sqlSession=sqlSessionFactory.openSession();

	//创建UserMapper对象,mybatis自动生成mapper代理对象
	UserMapper userMapper= sqlSession.getMapper(UserMapper.class);
	
	//调用userMapper的方法
	User user=userMapper.findUserByIdResultMap(1);
	 
	System.out.println(user);
}

总结

            上面的测试代码演示当尸体类中的属性名和表中的字段名不一致时,使用mybatis进行查询操作时无法查询出相应的结果以及针对问题采用的两种方法:

            方法一:通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以把表的字段名和实体类的属性名一一对应上了,这种方式是通过在sql语句中定义别名来解决字段名和属性名的映射关系的。

            方法二:通过<resultMap>来映射字段名和实体类属性名的一一对应关系。这种方式是使用mybatis提供的解决方式来解决字段名和属性名的映射关系的。

 

            使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。



版权声明:本文为博主原创文章,未经博主允许不得转载。

SpringMVC+mybatis中实体类字段名与数据库字段名不匹配问题

mybatis使用的时候如果实体类字段名与数据库字段名不匹配,不匹配的那些字段值将是null。  这个问题现在我所知道有两种解决方法,  1、在*Mapper.xml中修改sql ...

Mybatis中实体类属性和数据列之间映射的四种办法

Mybatis不像Hibernate中那么自动化,通过@Column注解或者直接使用实体类的属性名作为数据列名,而是需要自己指定实体类属性和 数据表中列名之间的映射关系,这一点让用惯了Hiberna...
  • lmy86263
  • lmy86263
  • 2016年11月13日 17:15
  • 13099

mybatis ,列名不一样进行映射。

惯例: 我是温浩然: 想看这篇文章,首先,你要会用mybatis. 然后,在mybatis的***mapper.xml文件中,定义sql语句的地方,有定义返回值么,代码如下。 ...

Mybatis-实体类属性名与数据库字段名不同的查询方法

查询语句是 MyBatis 中最常用的元素之一,本文涉及mybatis的单表查询操作,关联表有关的查询会后续补充。   巧妇难为无米之炊,要想从数据库中表中取出数据并转化为javaBean,所以,我们...

mybatis(四)——mybatis解决数据库表字段名与实体类属性名不同的冲突

在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突。 一、准备演示需要使用的表和数据 CREATE TA...

MyBatis 解决属性名和列名不一致

EX: user表密码字段列名为pwd,实体类user bean里面密码属性为password 方法一: 方法二: 映射文件配置: select * from user where i...
  • boxyuan
  • boxyuan
  • 2017年04月28日 13:03
  • 526

MyBatis 笔记(四)——实体类属性和表字段的映射

之前的章节将的实体类属性名和表字段名都是相同的,MyBatis 会自动去映射。那么问题来了,如果实体类属性名和表字段名不相同时,MyBatis 能智能地去映射到吗?答案是:不能。这里用两种解决方案: ...

MyBatis 入门到精通(三) 高级结果映射 .

MyBatis的创建基于这样一个思想:数据库并不是您想怎样就怎样的。虽然我们希望所有的数据库遵守第三范式或BCNF(修正的第三范式),但它们不是。如果有一个数据库能够完美映射到所有应用程序,也将是非常...

Mybatis中解决数据库字段名与实体类属性名不同的问题

1.问题阐述:  在Mybatis中,当根据id查询用户信息时,映射文件userMapper.xml进行配置查询时,如果数据库字段名与实体类属性名称不一致,查询时,会出现为Null。 t_user...

MyBatis学习笔记(十)注解映射

1.普通映射 @Select("select * from mybatis_Student where id=#{id}") public Student getStudent(int id); @I...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【MyBatis】——解决字段名与实体类属性名不相同的冲突
举报原因:
原因补充:

(最多只允许输入30个字)