记:之前我们规定 编写实体类的时候, 属性和数据库列名 必须保持 一致。
思考:二开、业务变化等等的时候,此时数据库中的列名和实体类的属性名就是不一致,怎么解决?
实体类属性和数据库列名不一致,如下图所示:
提示:这里只演示改操作。
记:在修改配置文件 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系统下,是严格区分大小写的。
解决方案:
修改配置文件: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("-------"); }
查询结果如下:
欢迎大家来评论!