zoukankan      html  css  js  c++  java
  • mybatis实现MySQL数据库的增删改查之三

    现在我们解决一下属性名和字段名不一致的问题

    实体类的属性如下:

    1 public class User {
    2     private int id;
    3     private String name;
    4     private String password;
    5 }

    接口:

    1 public interface UserMapper {
    2 
    3     //根据id查询用户
    4     User getUserById(int id);
    5 
    6 }

    xml映射文件:

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="com.qijian.dao.UserMapper">
     6 
     7     <select id="getUserById" parameterType="int" resultType="com.qijian.pojo.User">
     8         select * from mybatis.user where id = #{id};
     9     </select>
    10 
    11 </mapper>

    测试类:

     1 public class UserDaoTest {
     2     @Test
     3     public void testGetUserLike() throws IOException {
     4         SqlSession sqlSession = MyBatisUtils.getSqlSession();
     5         UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
     6         User user = userMapper.getUserById(1);
     7 
     8         System.out.println(user);
     9 
    10         sqlSession.close();
    11 
    12     }

    运行结果如下:

     这里会发现password的值变成了null。下面我们来分析一下为什么会这样?

      mybatis会根据这些查询的列名(会将列名转化为小写,数据库不区分大小写) , 去对应的实体类中查找相应列名的set方法设值 , 由于找不到setPwd() , 所以password返回null ; 【自动映射】

    解决办法一:

    修改SQL语句:

    1     <select id="getUserById" parameterType="int" resultType="com.qijian.pojo.User">
    2         select id,name,pwd as password from mybatis.user where id = #{id};
    3     </select>

    解决办法二:

      resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作。实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同等功能的数千行代码。ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。(注意resultType和resultMap两者只能存在一个

    1     <resultMap id="UserMap" type="com.qijian.pojo.User">
    2         <result column="pwd" property="password"/>
    3     </resultMap>
    4     <select id="getUserById" resultMap="UserMap">
    5         select * from mybatis.user where id = #{id}
    6     </select>
  • 相关阅读:
    最短Hamilton路径-状压dp解法
    泡芙
    斗地主
    楼间跳跃
    联合权值
    虫食算
    抢掠计划
    间谍网络
    城堡the castle
    【模板】缩点
  • 原文地址:https://www.cnblogs.com/cnqijian/p/14213392.html
Copyright © 2011-2022 走看看