MyBatis解决在开发过程当中实体类属性和数据库列名不一致的问题

MyBatis解决在开发过程当中实体类属性和数据库列名不一致的问题

记:以前咱们规定 编写实体类的时候, 属性和数据库列名 必须保持 一致。java

思考:二开、业务变化等等的时候,此时数据库中的列名和实体类的属性名就是不一致,怎么解决?mysql

实体类属性和数据库列名不一致,以下图所示:linux

image.png

演示 属性和数据库列名 不一状况下,数据库 改 操做

提示:这里只演示改操做。sql

记:在修改配置文件 IUserDao.xml 后,增删改操做基本能够知足开发须要。数据库

------windows

新建实体类:UserV2.javadom

image.png

代码以下:测试

------spa

public class UserV2 {

    private int userId;

    private String userName;

    private Date userBirthday;

    private String userSex;

    private String userAddress;
    ...

------3d

接口:IUserDao.java,新增 updateUserV2 方法

image.png

代码以下:

-------

/**
* 用户修改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();

}

结果以下,修改为功!
image.png
总结:

通常来讲,增删改的方法,就算实体属性和数据库列名不一致,经过配置后,也能够正常运行。

可是,在查询的时候,若是不一致,就会出异常!

演示 属性和数据库列名 不一状况下,数据库 查 操做

查询的时候,列名没法对齐,致使数据出现异常。

接口: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("-------");
}

运行结果,以下图所示:
image.png
提示: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("-------");

}

查询结果以下:
image.png

欢迎你们来评论!

相关文章
相关标签/搜索