MyBatis解决在开发过程中实体类属性和数据库列名不一致的问题
记:之前我们规定 编写实体类的时候, 属性和数据库列名 必须保持 一致。
思考:二开、业务变化等等的时候,此时数据库中的列名和实体类的属性名就是不一致,怎么解决?
实体类属性和数据库列名不一致,如下图所示:
演示 属性和数据库列名 不一情况下,数据库 改 操作
提示:这里只演示改操作。
记:在修改配置文件 IUserDao.xml 后,增删改操作基本可以满足开发需要。
——
新建实体类:UserV2.java
代码如下:
——
public class UserV2 { private int userId; private String userName; private Date userBirthday; private String userSex; private String userAddress; ...
——
接口:IUserDao.java,新增 updateUserV2 方法
代码如下:
——-
/**
* 用户修改v2
* @param userv2
*/
void updateUserV2(UserV2 userv2);
——-
配置文件: IUserDao.xml ,代码如下:
——-
<!--更新用户操作V2--> <update id="updateUser" parameterType="com.abc2.domain.UserV2"> UPDATE USER SET /`username/`=#{userName},/`address/`=#{userAddress},/`sex/`=#{userSex},/`birthday/`=#{userBirthday} WHERE id=#{userId}; </update>
测试文件,代码如下:
@Test
public void updateUserV2Test() {
UserV2 user = new UserV2();
user.setUserId(70);
user.setUsername("小明");
user.setUserAddress("外星球-月球22");
user.setUserSex("女");
user.setUserBirthday(new Date());
//更新用户
userDao.updateUserV2(user);
//执行提交
sqlSession.commit();
}
结果如下,修改成功!
总结:
一般来说,增删改的方法,就算实体属性和数据库列名不一致,通过配置后,也可以正常运行。
但是,在查询的时候,如果不一致,就会出异常!
演示 属性和数据库列名 不一情况下,数据库 查 操作
查询的时候,列名无法对齐,导致数据出现异常。
接口:IUserDao.java
/**
* 查询所有数据V2
* @return
**/
List<UserV2> findAllV2();
配置文件:IUserDao.xml
<!--配置查询所有 指定id,resultType结果集类型 --> <select id="findAllV2" resultType="com.abc2.domain.UserV2"> select /* from user </select>
测试类:Test
@Test public void findAllV2Test() { List<UserV2> allV2 = userDao.findAllV2(); System.out.println("-------"); for (UserV2 item : allV2) { System.out.println(item); } System.out.println("-------"); }
运行结果,如下图所示:
提示:mysql数据库在windows系统下不区分大小写。如果是linux系统下,是严格区分大小写的。
解决方案:
- 设置查询别名(了解);
- 配置 查询结果的列名和实体类的属性名的对应关系(推荐使用!理由:这个resultMap可以复用,修改起来也方便);
修改配置文件:IUserDao.xml
<!--配置:查询结果的列名和实体类的属性名对应关系--> <resultMap id="userMap2" type="com.abc2.domain.UserV2"/> <!--主键字段的对应--> <id property="userId" column="id"></id> <!--非主键字段对应--> <result property="userName" column="username"></result> <result property="userBirthday" column="birthday"></result> <result property="userSex" column="sex"></result> <result property="userAddress" column="address"></result> </resultMap> <!--配置查询所有 指定id,resultType结果集类型 --> <select id="findAllV2" resultMap/="userMap2"> <!-- 使用查询别名-了解即可! --> <!-- select id as userId,username as userName,birthday as userBirthday,sex as userSex,address as userAddress from user;--> select /* from user; </select>
测试类:Test
@Test public void findAllV2Test() { List<UserV2> allV2 = userDao.findAllV2(); System.out.println("-------"); for (UserV2 item : allV2) { System.out.println(item); } System.out.println("-------"); }
查询结果如下:
欢迎大家来评论!
原文
https://segmentfault.com/a/1190000022026878
本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » MyBatis解决在开发过程中实体类属性和数据库列名不一致的问题