2022.5.14 mybatis解决属性名和字段名不一致的问题

5、解决属性名和字段名不一致的问题

数据库的字段

测试实体类字段不一致的情况

复制代码
 1  package com.xing.pojo;
 2  3  import org.apache.ibatis.type.Alias;
 4  5  //实体类
 6  public class User {
 7      private int id;
 8      private String name;
 9      private String password;
10 11      public User() {
12      }
13 14      public User(int id, String name, String password) {
15          this.id = id;
16          this.name = name;
17          this.password = password;
18      }
19 20      public int getId() {
21          return id;
22      }
23 24      public void setId(int id) {
25          this.id = id;
26      }
27 28      public String getName() {
29          return name;
30      }
31 32      public void setName(String name) {
33          this.name = name;
34      }
35 36      public String getPassword() {
37          return password;
38      }
39 40      public void setPassword(String password) {
41          this.password = password;
42      }
43 44      @Override
45      public String toString() {
46          return "User{" +
47                  "id=" + id +
48                  ", name='" + name + '\'' +
49                  ", password='" + password + '\'' +
50                  '}';
51      }
52  }
复制代码

UserMapper.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  6  <mapper namespace="com.xing.dao.UserMapper">
 7  8      <select id="getUserById" parameterType="int" resultType="com.xing.pojo.User">
 9          select id,name,pwd
10          from mybatis.user
11          where id = #{id};    # 接收方法中的参数id
12      </select>
13 14  </mapper>
复制代码

测试出现问题

UserDaoTest

复制代码
 1  package com.xing.dao;
 2  3  import com.xing.pojo.User;
 4  import com.xing.utils.MybatisUtils;
 5  import org.apache.ibatis.session.SqlSession;
 6  import org.junit.Test;
 7  8  import java.util.HashMap;
 9  import java.util.List;
10  import java.util.Map;
11 12  public class UserDaoTest {
13 14      @Test
15      public void test() {
16          SqlSession sqlSession = MybatisUtils.getSqlSession();
17          //方式一:执行  得到接口对象调用其中方法  接口的class对象
18          UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
19          User userById = userMapper.getUserById(2);
20 21          System.out.println(userById);
22 23          //关闭SqlSession
24          sqlSession.close();
25      }
26  }
复制代码

解决方法

  • 起别名

复制代码
 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  6  <mapper namespace="com.xing.dao.UserMapper">
 7  8      <select id="getUserById" parameterType="int" resultType="com.xing.pojo.User">
 9          select id,name,pwd as password
10          from mybatis.user
11          where id = #{id};    # 接收方法中的参数id
12      </select>
13 14  </mapper>
复制代码
  • resultMap

mybatis-config.xml

复制代码
 1  <?xml version="1.0" encoding="UTF-8" ?>
 2  <!DOCTYPE configuration
 3          PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4          "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5  6  <configuration>
 7  8      <!--引入外部配置文件-->
 9      <properties resource="db.properties">
10          <property name="username" value="root"/>
11          <property name="pwd" value="123456"/>
12      </properties>
13  <!--    可以给实体类起别名-->
14      <typeAliases>
15          <typeAlias type="com.xing.pojo.User" alias="User"/>
16      </typeAliases>
17 18      <environments default="development">
19          <environment id="development">
20              <transactionManager type="JDBC"/>
21              <dataSource type="POOLED">
22                  <property name="driver" value="${driver}"/>
23                  <property name="url" value="${url}"/>
24                  <property name="username" value="${username}"/>
25                  <property name="password" value="${pwd}"/>
26              </dataSource>
27          </environment>
28 29      </environments>
30 31      <mappers>
32          <mapper resource="com/xing/dao/UserMapper.xml"/>
33      </mappers>
34  </configuration>
复制代码

UserMapper.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  6  <mapper namespace="com.xing.dao.UserMapper">
 7  <!--结果集映射 id :参数名  type:结果集的类型 对应实体类的名字或别名 可以写com.xing.pojo.User-->
 8      <resultMap id="UserMap" type="User">
 9  <!--coLumn数据库中的字毁,property实体类中的属姓 一致可以不用写-->
10  <!--        <result column="id" property="id"/>-->
11  <!--        <result column="name" property="name"/>-->
12          <result column="pwd" property="password"/>
13      </resultMap>
14  <!--                                    根据参数名引用上面的resultMap-->
15      <select id="getUserById" resultMap="UserMap">
16          select id,name,pwd
17          from mybatis.user
18          where id = #{id};    # 接收方法中的参数id
19      </select>
20 21  </mapper>
复制代码

  • ResultMap元素是MyBatis中最重要最强大的元素

  • ResultMap的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系就行了。

posted @   暴躁C语言  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示