Mybatis框架-联表查询显示问题解决
需求:查询结果要求显示用户名,用户密码,用户的角色
因为在用户表中只有用户角色码值,没有对应的名称,角色名称是在码表smbms_role表中,这时我们就需要联表查询了。
这里需要在User实体类中添加一个字段-userRoleName并添加相应的set get方法
User.java

UserMapper.xml 注意:据库中的字段名和User实体类中的属性名是不一致的,必须进行手动映射
<!--查询结果要显示用户名,密码和用户的角色名称,需要连表查询
注意:roleName最后运行程序的结果是null
原因是:数据库中的字段名和User实体类中的属性名是不一致的,必须进行手动映射 r.roleName as userRoleName-->
<select id="getUserListByUserName4" parameterType="map" resultType="User" >
select a.*,r.roleName as userRoleName from smbms_user a,smbms_role r
where username like CONCAT ('%',#{userName1},'%')
and userRole = #{userRole1} and a.userRole=r.id
</select>
UserMapper.java

编写对应的测试方法:
@Test
public void test8() {
Map<String, String> map = new HashMap<String, String>();
map.put("userName1", "赵");
map.put("userRole1", "3"); SqlSession sqlSession = null;
java.util.List<User> userList2 = new ArrayList<User>();
try {
sqlSession = MyBatisUtil.createSqlSession();
//使用mapper映射的方式实现
//userList2 = sqlSession.selectList("cn.smbms.dao.user.UserMapper.getUserListByUserName",userNameString);
//调用mapper接口的方式实现
userList2 = sqlSession.getMapper(UserMapper.class).getUserListByUserName4(map);
int size = userList2.size();
mlogger.info("获取到的记录数是:" + size); } catch (Exception e) {
// TODO: handle exception
} finally {
// 最后一定要注意:关闭会话
MyBatisUtil.closeSqlSession(sqlSession); }
for (User user2 : userList2) {
mlogger.info("用户名:" + user2.getUserName() + ",密码:" + user2.getUserPassword()+",用户角色:"+user2.getUserRoleName());
} }
运行结果:
[DEBUG] 2019-11-02 19:59:50,022 cn.smbms.dao.user.UserMapper.getUserListByUserName4 - ==> Preparing: select a.*,r.roleName as userRoleName from smbms_user a,smbms_role r where username like CONCAT ('%',?,'%') and userRole = ? and a.userRole=r.id
[DEBUG] 2019-11-02 19:59:50,157 cn.smbms.dao.user.UserMapper.getUserListByUserName4 - ==> Parameters: 赵(String), 3(String)
[INFO] 2019-11-02 19:59:50,260 cn.smbms.dao.test.UserMapperTest - 获取到的记录数是:1
[DEBUG] 2019-11-02 19:59:50,260 org.apache.ibatis.transaction.jdbc.JdbcTransaction - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@ed0220c]
[DEBUG] 2019-11-02 19:59:50,261 org.apache.ibatis.transaction.jdbc.JdbcTransaction - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@ed0220c]
[DEBUG] 2019-11-02 19:59:50,262 org.apache.ibatis.datasource.pooled.PooledDataSource - Returned connection 248521228 to pool.
[INFO] 2019-11-02 19:59:50,262 cn.smbms.dao.test.UserMapperTest - 用户名:赵燕,密码:0000000,用户角色:普通员工
Mybatis框架-联表查询显示问题解决的更多相关文章
- mybatis之联表查询
今天碰到了一个问题,就是要在三张表里面各取一部分数据然后组成一个list传到前台页面显示.但是并不想在后台做太多判断,(因为涉及到for循环)会拉慢运行速度.正好用的框架是spring+springM ...
- MyBatis框架——多表查询
MyBatis多表查询, 从表中映射主表,使用 association 标签,通过设置 javaType 属性关联实体类: 主表映射从表,使用 collection 标签,通过 ofType 属性关联 ...
- MyBatis框架——单表查询
Mybatis单表查询,示例 1.创建数据库 /* Navicat MySQL Data Transfer Source Server : localhost Source Server Versio ...
- mybatis一对一联表查询的两种常见方式
1.一条语句执行查询(代码如下图) 注释:class表(c别名),teacher表(t别名)teacher_id为class表的字段t_id为teacher表的字段,因为两者有主键关联的原因,c_i ...
- vb.net DBEntities框架联表查询 Join
在项目中配置好DBEntities 使用两个表:主表Table, 子表Table_Item 主要是用到了委托和泛型,ForEach用的是不带返回值的委托 Sub GetDb() Dim st As N ...
- MyBatis联表查询
MyBatis逆向工程主要用于单表操作,那么需要进行联表操作时,往往需要我们自己去写sql语句. 写sql语句之前,我们先修改一下实体类 Course.java: public class Cours ...
- mybatis 联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- MyBatis学习存档(5)——联表查询
之前的数据库操作都是基于一张表进行操作的,若一次查询涉及到多张表,那该如何进行操作呢? 首先明确联表查询的几个关系,大体可以分为一对一和一对多这两种情况,接下来对这两种情况进行分析: 一.建立表.添加 ...
- Mybatis入门(四)------联表查询
Mybatis联表查询 一.1对1查询 1.数据库建表 假设一个老师带一个学生 CREATE TABLE teacher( t_id INT PRIMARY KEY, t_name VARCHAR(3 ...
随机推荐
- 快排 PAT 1101
1101 Quick Sort (25 分) There is a classical process named partition in the famous quick sort algor ...
- Docker之Alpine制作镜像且上传至阿里云
目的: Alpine制作jdk镜像 Alpine制作jre镜像(瘦身) Docker镜像上传至阿里云 Alpine制作jdk镜像 alpine Linux简介 Alpine Linux是一个轻型Lin ...
- docker-compose up 启动容器服务超时错误:ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.
问题: 本人正在使用docker运行一个中型的项目,包含40多个微服务及相关的docker.由于docker-compose up 同时启动的服务过多,超过了请求HTTP限制的60s时间仍未全部成功启 ...
- python代码执行SQL文件(逐句执行)
一.简介 关于Python如何连接数据库并执行SQL语句,几乎所有的Python教程都会讲,教程里基本只介绍了执行单条SQL语句的方法,但是实际生产过程中可不只是执行一两条语句,动辄几十条甚至上百条的 ...
- 原!linux comm命令文件 比较 输出交集,差集。
文件内容大致如下: 112805|300011222483|OL海12卓|47397c33e36cdbed26637c50dd305973|2019-08-06 10:50:13|登B录123|suc ...
- 解决使用RabbitTemplate操作RabbitMQ,发生The channelMax limit is reached. Try later.问题
使用RabbitTemplate操纵RabbitMQ,每个RabbitTemplate等于一个connection,每个connection最多支持2048个channel,当hannel达到2048 ...
- JS前端加密JAVA后端解密详解
最近有一个加解密的需求,其实没有什么难度,但是实践过程中踩了很多坑,把踩坑过程分享出来. 1.前端JS加密 /** * 加密(需要先加载aes.min.js文件) * @param word * @r ...
- Vue 项目 VSCode 调试
调试Vue搭建的前端项目 在项目根目录下的vue.config.js中添加: module.exports = { lintOnSave: false, //关闭eslint语法校验 //填写这部分 ...
- P1108 低价购买 (DP)
题目 P1108 低价购买 解析 这题做的我身心俱惫,差点自闭. 当我WA了N发后,终于明白了这句话的意思 当二种方案"看起来一样"时(就是说它们构成的价格队列一样的时候),这2种 ...
- AS shortcuts
stl => statelessstf => statefulalt+enter, select element => add pading or somethingselect c ...