MyBatis学习2之解决字段名与实体类属性名不相同的冲突

渐渐老去 2017-10-22

      在mybatis学习第一篇博客中,虽然有查询结果,但是查出的属性与表中属性不对应,这种情况相信大家在使用jstl、stuts标签时也遇到过类似情况,如果把t_group表中group_name属性修改为groupName时,结果此属性能正确查询出来。但是这样修改直接动了表的结构,不建议采纳。

以下有两种方法:

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

   修改sql映射文件GroupMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zlt.mybatis.model.Group">
	<!-- group_name属性查出来为null -->
	<!--  
	<select id="selectGroupByID" parameterType="int" resultType="Group" >
		select t.id,t.group_name,t.description from t_group t where t.id = #{id}
	</select>
	-->
	<!-- 能正确查询出group_name属性 -->
	<select id="selectGroupByID" parameterType="int" resultType="Group" >
		select t.id id,t.group_name groupName,t.description description from t_group t where t.id = #{id}
	</select>
</mapper>

   运行结果:
MyBatis学习2之解决字段名与实体类属性名不相同的冲突

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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zlt.mybatis.model.Group">
	<!-- group_name属性查出来为null -->
	<!--  
	<select id="selectGroupByID" parameterType="int" resultType="Group" >
		select t.id,t.group_name,t.description from t_group t where t.id = #{id}
	</select>
	-->
	<!-- 能正确查询出group_name属性 -->
	<!-- <select id="selectGroupByID" parameterType="int" resultType="Group" >
		select t.id id,t.group_name groupName,t.description description from t_group t where t.id = #{id}
	</select> -->
	
	
	<!-- 使用resultMap能正确查询出group_name属性 -->
	 <select id="selectGroupByID" parameterType="int" resultMap="groupResultMap" >
		select t.id id,t.group_name groupName,t.description description from t_group t where t.id = #{id}
	</select>
	 <!--通过<resultMap>映射实体类属性名和表的字段名对应关系 -->
	<resultMap type="com.zlt.mybatis.model.Group" id="groupResultMap">
		<!-- 用id属性来映射主键字段 -->
		<id property="id" column="id" />
		 <!-- 用result属性来映射非主键字段 -->
		<result property="groupName" column="group_name"/>
	    <result  property="description" column="description" />
	</resultMap>
</mapper>

 运行结果:
MyBatis学习2之解决字段名与实体类属性名不相同的冲突
 

相关推荐