问题:

MyBatis中当实体类中的属性名和表中的字段名不一样 ,怎么办 ?

解决方案:

1.写sql语句时起别名

  1. <!-- id属性:必须是接口中方法的方法名
  2. resultType属性:必须是方法的返回值的全类名-->
  3. <select id="getEmployeeById" resultType="MyBatis中当实体类中的属性名和表中的字段名不一样怎么办.entities.Employee">
  4. select id,last_name lastName,email,salary,dept_id deptId from employees where id = #{id}</select>

2.在MyBatis的全局配置文件中开启驼峰命名规则

  1. <settings>
  2. <!-- 开启驼峰命名规则 ,可以将数据库中的下划线映射为驼峰命名
  3. 例如:last_name可以映射为lastName -->
  4. <setting name="mapUnderscoreToCamelCase" value="true"/>
  5. </settings>

3.在Mapper映射文件中使用resultMap来自定义映射规则

  1. <select id="getEmployeeById" resultMap="myMap">
  2. select * from employees where id = #{id}
  3. </select>
  4.  
  5. <!-- 自定义高级映射 -->
  6. <resultMap type="MyBatis中当实体类中的属性名和表中的字段名不一样怎么办.entities.Employee" id="myMap">
  7. <!-- 映射主键 -->
  8. <id column="id" property="id"/>
  9. <!-- 映射其他列 -->
  10. <result column="last_name" property="lastName"/>
  11. <result column="email" property="email"/>
  12. <result column="salary" property="salary"/>
  13. <result column="dept_id" property="deptId"/>
  14. </resultMap>

测试用例:

  1. //1.MyBatis中当实体类中的属性名和表中的字段名不一样 ,怎么办 ?
  2. /*
  3. * 解决方案:
  4. * 1.写sql语句时起别名
  5. * 2.在MyBatis的全局配置文件中开启驼峰命名规则
  6. * 3.在Mapper映射文件中使用resultMap来自定义映射规则
  7. */
  8.  
  9. @Test
  10. void testGetEmployee() throws IOException {
  11. //1.创建SqlSessionFactory对象
  12. String resource = "mybatis-config.xml";
  13. InputStream inputStream = Resources.getResourceAsStream(resource);
  14. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  15. //2.获取sqlSession,sqlSession就相当于JDBC中的connection
  16. SqlSession sqlSession = sqlSessionFactory.openSession();
  17. try {
  18. //3.获取Mapper对象
  19. EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
  20. //4.调用EmployeeMapper中获取Employee的方法
  21. Employee employee = mapper.getEmployeeById(1);
  22. System.out.println(employee);
  23. } finally {
  24. //5.关闭sqlSession
  25. sqlSession.close();
  26. }

运行结果:

完整代码:

https://gitee.com/ZhangShunHai/interview_atguigu_seasonone/tree/master/ssm_mybatis%20mapping

尚硅谷面试第一季-11MyBatis中当实体类中的属性名和表中的字段名不一样怎么办的更多相关文章

  1. 尚硅谷面试第一季-08Spring支持的常用数据库事务传播属性和事务隔离级别

    目录结构: 关键代码: BookShopServiceImpl.java package Spring支持的常用数据库事务传播属性和事务隔离级别.tx.service.impl; import Spr ...

  2. 尚硅谷面试第一季-17Redis 在项目中的使用场景

    数据类型 使用场景 String 比如说 ,我想知道什么时候封锁一个IP地址.Incrby命令 Hash 存储用户信息[id,name,age] Hset(key,field,value) Hset( ...

  3. 尚硅谷面试第一季-09SpringMVC中如何解决POST请求中文乱码问题GET的又如何处理呢

    目录结构: 关键代码: web.xml <filter> <filter-name>CharacterEncodingFilter</filter-name> &l ...

  4. 尚硅谷面试第一季-16 JVM垃圾回收机制

    问题的提出:GC发生在JVM那个部分,由几种GC,它们的算法是什么? 课堂重点: GC发生在JVM体系的堆部分.     什么是GC(分代手机算法)Minor GC 和 Full GC GC4大算法: ...

  5. 尚硅谷面试第一季-10SpringMVC的工作流程

    目录结构: 关键代码: web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xml ...

  6. 尚硅谷面试第一季-07Spring Bean的作用域之间有什么区别

    目录结构: 关键性代码: beans.xml <!-- ★bean的作用域 可以通过scope属性来指定bean的作用域 -singleton:默认值.当IOC容器一创建就会创建bean的实例, ...

  7. 尚硅谷面试第一季-13git分支相关命令

    课堂重点:分支相关命令 实际应用-工作流程 实操命令及运行结果: 创建master分支并提交 git init git add . git commit -m "V1.0" git ...

  8. 尚硅谷面试第一季-18ES与Solr的区别

    背景:它们都是基于Lucene搜索服务器基础之上开发,一款优秀的,高性能的企业级搜索服务器.[是因为他们都是基于分词技术构建的倒排索引的方式进行查询] 开发语言:Java语言开发 诞生时间:Solr ...

  9. 尚硅谷面试第一季-15Mysql什么时候建索引

    课堂重点: MySQL的官方定义: 索引的优势: 索引的劣势: 那些情况下需要建立索引: 那些情况下不要建立索引: 何为过滤性:例如在数据库字段里,手机号/身份证号这些字段是过滤性好的字段,而性别则是 ...

随机推荐

  1. expect简介和使用例子

    expect简介和使用例子   expect简介 expect是一款自动化的脚本解释型的工具. expect基于tcl脚本,expect脚本的运行需要tcl的支持. expect对一些需要交互输入的命 ...

  2. jQuery-插入内容-新增内容

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. C# Mongo Client 2.4.2判断是否存在表

    public async Task<bool> CollectionExistsAsync(string collectionName) { var filter = new BsonDo ...

  4. finally语句块

    finally语句块是搭配着try语句块出现的,也就说必须有try语句块才会有finally语句块,但是并不是try语句块都会搭配有finally语句块出现,我们常见的更多是try...catch.. ...

  5. kali linux主题下载

    主题下载网站 https://www.gnome-look.org/ 下载好安装包后解压 将文件夹移动到 usr/share/theme/ 下 mv download ../usr/share/the ...

  6. 模拟windows全盘搜索

    循环遍历pc上的文件夹,保存到mysql数据库中,搜索时,从数据库取数据.import osimport datetimeimport pymysqlimport threading def link ...

  7. Linux基础命令---arch

    Arch         Arch指令主要用于显示当前主机的硬件结构类型,我们可以看到它输出的结果有:i386.i486.mips.alpha等.此命令的适用范围:RedHat.RHEL.Ubuntu ...

  8. 什么是FEBS

    FEBS后台权限管理系统      FEBS是一个简单高效的后台权限管理系统.项目基础框架采用全新的Java Web开发框架 —— Spring Boot2.0.4,消除了繁杂的XML配置,使得二次开 ...

  9. emmm

    #include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; st ...

  10. SQL表分区之二

    前面说的给表做表分区,现在有个问题,比如上面我们说的是按照20w为一个分割线,那些现在我们想把这个调整下怎么办?难道要把之前的分区函数和分区方案删了,重新新建分区函数和分区方案嘛? 当然,此方式肯定是 ...