【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属性名之间作一个映射关系。



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

相关文章推荐

使用Mybatis时实体类属性名和表中的字段名不一致导致结果无法映射到实体类的解决办法

开发中,实体类中的属性名和对应的表中的字段名不一定都是完全相同的,这样可能会导致用实体类接收返回的结果时导致查询到的结果无法映射到实体类的属性中,那么该如何解决这种字段名和实体类属性名不相同的冲突呢?...

Mybatis解决属性名与字段名不一致

在开发的时候应该遇到这样的情况,数据库中的字段名与属性名不一致的情况,通常数据库中的字段命名时多个单词之间使用下划线连接在一起的,而在类中的属性名则多数是用驼峰标识的命名方式,我见过的大多数都是这样,...

mybatis的xml文件中列名和mysql数据库中的关键字冲突

类似与DELETE什么的是mysql的关键字,在mybatis中操作时需要加上反引号-就是键盘Esc键下面的的那个 错误:DELETE = #{delete} 正确:`DELETE` ...

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

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

使用mybatis 通用Mapper类的笔记

想要偷懒不写mybatis里的一大堆mapper.xml文件,就想使用通用的Mapper类减少工作量。     首先,我使用的是Maven项目,所以导入Mapper的Maven依赖 ...

MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

github同步更新 博客同步更新 简书同步更新 项目地址:传送门在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实...

MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突 - 孤傲苍狼 - 博客园 孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(四)——解决字段名与实体类属...

MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

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

MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突。一、准备演示需要使用的表和数据CREATE TABLE...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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