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的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系就行了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术