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 ...
随机推荐
- 用NDK生成cURL和OpenSSL库
最近在用Qt开发Android应用时需要获取https页面内容,但Qt内置的QNetworkAccessManager类只支持下面这些协议(调用其supportedSchemes成员函数获取): (& ...
- [译]开发者须知的SOLID原则
原文:SOLID Principles every Developer Should Know – Bits and Pieces SOLID Principles every devloper sh ...
- 函数this指向哪个对象?
函数的this指向是根据函数调用时所处的执行环境来确定的. this指向对象的情况有四种: 1.使用new关键字时:this会绑定构造函数所创建的对象. function Foo(){ this.a ...
- MySQl数据库面试题
1. MySQL中索引什么作用? 索引的定义和创建的目的 1) 索引是对数据库表中一列或者多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息 2) 索引的分类:主键索引,唯一索引,常规 ...
- SpringBoot整合freemarker 引用基础
原 ElasticSearch学习笔记Ⅲ - SpringBoot整合ES 新建一个SpringBoot项目.添加es的maven坐标如下: <dependency> <groupI ...
- Java调用Http/Https接口(4)--HttpClient调用Http/Https接口
HttpClient是Apache HttpComponents项目下的一个组件,是Commons-HttpClient的升级版,两者api调用写法也很类似.文中所使用到的软件版本:Java 1.8. ...
- 【开发笔记】- Velocity中特殊符号展示乱码的问题
问题 需求是需要在后台将收货国家对应的币种.币种符号返回给前台并展示,在返回给前端后出现了页面币种符号展示乱码的问题. 解决方式 在获取货币符号时添加以下代码,防止velocity对特殊符号进行转义处 ...
- js数组(五)
一.数组的声明方法一:[构造函数形式声明] var array = new Array(); //[] var array = new Array(10); //数组长度:array.length = ...
- eclipse如何为java项目生成API文档
文章转载自: https://www.cnblogs.com/wdh1995/p/7705494.html 当我们的项目很大,编写了很多代码的时候,就需要生成一个标准的API文档,让后续的开发人员,或 ...
- DoNetCore Web Api 采用Swagger进行接口文档管理
第一步:创建API项目 步骤这里不说明 第二步:就是Nuget 包, 两种方式:1.工具->Nuget管理->程序包管理控制台 Install-Package Swashbuckle.As ...