MyBatis框架-ResultMap节点

需求:查询结果要求显示用户名,用户密码,用户的角色

因为在用户表中只有用户角色码值,没有对应的名称,角色名称是在码表smbms_role表中,这时我们就需要联表查询了。

之前我们使用的是给查询结果字段取别名的方式来和实体类中的属性进行映射。现在我们换一种写法,使用ResultMap节点。

先介绍一下resultMap节点的神奇,总所周知,在实际的项目开发过程中,总会存在实体类和数据库中的列名不对应的情况,如果都是通过sql取别名来影射的话,那一个sql将会写的又臭又长,根本就没有办法阅读了,不便于后期的维护,这里ResultMap恰好解决了这个问题,

这样是代码容易阅读和后期维护,进而,提高了开发效率。

UserMapper.xml

 1     <!--查询结果要显示用户名,密码和用户的角色名称,需要连表查询 注意:roleName最后运行程序的结果是null
 2     原因是:数据库中的字段名和User实体类中的属性名是不一致的,现在我们使用ResultMap节点
 3     resultMap节点放在要映射的select的节点的上方和下方都是可以的,对结果是没有影响的-->
 4     <select id="getUserListByUserName5" parameterType="map" resultMap="UserListMap">
 5         select a.*,r.roleName from smbms_user a,smbms_role r
 6         where username like CONCAT (‘%‘,#{userName1},‘%‘)
 7         and userRole = #{userRole1} and a.userRole=r.id
 8     </select>
 9     <resultMap type="User" id="UserListMap"  >
10         <result property="userName" column="userName" />
11         <result property="userRoleName" column="roleName" />
12     </resultMap>

UserMapper.java

编写对应的测试方法:

 1     @Test
 2     public void test9() {
 3         Map<String, String> map = new HashMap<String, String>();
 4         map.put("userName1", "赵");
 5         map.put("userRole1", "3");
 6
 7         SqlSession sqlSession = null;
 8         java.util.List<User> userList2 = new ArrayList<User>();
 9         try {
10             sqlSession = MyBatisUtil.createSqlSession();
11             //使用mapper映射的方式实现
12             //userList2 = sqlSession.selectList("cn.smbms.dao.user.UserMapper.getUserListByUserName",userNameString);
13             //调用mapper接口的方式实现
14             userList2 = sqlSession.getMapper(UserMapper.class).getUserListByUserName5(map);
15             int size = userList2.size();
16             mlogger.info("获取到的记录数是:" + size);
17
18         } catch (Exception e) {
19             // TODO: handle exception
20         } finally {
21             // 最后一定要注意:关闭会话
22             MyBatisUtil.closeSqlSession(sqlSession);
23
24         }
25         for (User user2 : userList2) {
26             mlogger.info("用户名:" + user2.getUserName() + ",密码:" + user2.getUserPassword()+",用户角色:"+user2.getUserRoleName());
27         }
28
29     }

运行结果:

1 [DEBUG] 2019-11-02 21:01:00,291 cn.smbms.dao.user.UserMapper.getUserListByUserName5 - ==>  Preparing: select a.*,r.roleName from smbms_user a,smbms_role r where username like CONCAT (‘%‘,?,‘%‘) and userRole = ? and a.userRole=r.id
2 [DEBUG] 2019-11-02 21:01:00,433 cn.smbms.dao.user.UserMapper.getUserListByUserName5 - ==> Parameters: 赵(String), 3(String)
3 [INFO] 2019-11-02 21:01:00,504 cn.smbms.dao.test.UserMapperTest - 获取到的记录数是:1
4 [DEBUG] 2019-11-02 21:01:00,505 org.apache.ibatis.transaction.jdbc.JdbcTransaction - Resetting autocommit to true on JDBC Connection [[email protected]]
5 [DEBUG] 2019-11-02 21:01:00,505 org.apache.ibatis.transaction.jdbc.JdbcTransaction - Closing JDBC Connection [[email protected]]
6 [DEBUG] 2019-11-02 21:01:00,506 org.apache.ibatis.datasource.pooled.PooledDataSource - Returned connection 1369543768 to pool.
7 [INFO] 2019-11-02 21:01:00,506 cn.smbms.dao.test.UserMapperTest - 用户名:赵燕,密码:0000000,用户角色:普通员工

原文地址:https://www.cnblogs.com/dongyaotou/p/11784064.html

时间: 2024-10-08 10:31:47

MyBatis框架-ResultMap节点的相关文章

Mybatis框架-update节点元素的使用

今天我们学习一下mybatis框架中的update节点元素的使用 需求:修改用户表中的一条数据记录,修改编号为21的用户的密码 UserMapper.xml UserMapper.java 编写测试方法: 1 @Test 2 public void testUpdate() { 3 SqlSession sqlSession = null; 4 User user=new User(); 5 user.setUserPassword("000000"); 6 user.setId(21

mybatis框架-resultMap的自动映射级别-partial 和full的探讨

现在我们做一个小实验,输出一下上一个案例中没有匹配的属性,注意哦,现在user类中是有内部嵌套的复杂数据类型的 运行结果: 注意到:现在居然连userPassword都打印不出来了,原因就是user类中是有内部嵌套的复杂数据类型的.这是默认的映射级别是:autoMappingBehavior=“partial” 解决这种问题: <settings>       <setting name="logImpl" value="LOG4J" /> 

初识Mybatis框架,实现增删改查等操作

此第一次接触Mybatis框架确实是有点不适应,特别是刚从Hibernate框架转转型过来,那么为什么要使用Mybatis框架,Mybatis框架和Hibernate框架又有什么异同呢? 这个问题在我的另一篇blogs中有专门的讲解,今天我主要是带着大家来探讨一下如何简单的使用Mybatis这个框架 可能有的朋友知道,Mybatis中是通过配置文件来实现这个的,这里面有很多的东西,我们就一点一点的讲吧 我们想要配置成功,首要的就是jar包,先从官网下载相应的jar包作为程序的支撑 有了jar包之

mybatis框架入门

初识mybatis 对原生jdbc程序(单独使用jdbc开发)问题总结 mybatis框架原理 mybatis入门程序 用户的增删查改 mybatis开发dao两种方法 原始dao开发方法(程序需要编写dao接口和dao实现类) mybatis的mapper接口(相当于dao接口)代理开发方法 mybatis配置文件SqlMapConfig.xml mybatis核心 mybatis输入映射 mybatis输出映射 mybatis的动态sql 第二天 订单商品的数据分析 改机映射(一对一.一对多

【Java】MyBatis框架初步学习总结

本篇篇幅较长,请善用 Ctrl + F 搜索功能. 结尾补充了 MyBatis 中 resultMap 的映射级别. -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

MyBatis框架(一)

MyBatis介绍: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github. MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statement.手动设置参数.结果集检索等jdbc繁杂的过程代

MyBatis框架中Mapper映射配置的使用及原理解析(三) 配置篇 Configuration

从上文<MyBatis框架中Mapper映射配置的使用及原理解析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder> 我们知道XMLConfigBuilder调用parse()方法解析Mybatis配置文件,生成Configuration对象. Configuration类主要是用来存储对Mybatis的配置文件及mapper文件解析后的数据,Configuration对象会贯穿整个Mybatis的执行流程,为Mybatis的执行过程提供必要的配

MyBatis框架中Mapper映射配置的使用及原理解析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder

在 <MyBatis框架中Mapper映射配置的使用及原理解析(一) 配置与使用> 的demo中看到了SessionFactory的创建过程: SqlSessionFactory sessionFactory = null; String resource = "mybatisConfig.xml"; try { sessionFactory = new SqlSessionFactoryBuilder().build(Resources .getResourceAsRea

mybatis框架搭建学习初步

mybatis框架搭建步骤:1. 拷贝jar到lib目录下,而且添加到工程中2. 创建mybatis-config.xml文件,配置数据库连接信息 <environments default="development"> <environment id="mysql"> <transactionManager type="JDBC"></transactionManager> <dataSou