问:查询完成后,结果列只能展示单表内的字段,比如用户表表中只记录角色编号,没有角色名称。结果列要如何展示在另一个表内的字段——角色名称呢?

答:通过resultMap映射自定义结果显示该字段。

1.resultMap的节点与属性值

id属性:唯一标识,次id值用于select元素resultMap属性的引用

type属性:表示该resultMap的映射结果类型,一般来说resultMap的type与select节点中的parameterType类型一致

result子节点:用于表示一些简单的属性

(1)column属性:表示从数据库中查询的字段名

(2)property:表示查询出来的字段对应的值赋给实体对象的哪个属性

2.使用方法

(1)SQL映射文件

select u.*,r.roleName

from smbms_user u,smbms_role r

where u.userRole = r.id

and userName like concat('%',#{userName},'%')

and userRole = #{userRole}

(2)UserMapper接口

public List getUserListByUser(User user);

(3)User.java

public classUser {private Integer id; //用户编号

private String userCode; //用户编码

private String userName; //用户名

private String userPassword; //密码

private Integer gender; //性别

private Date birthday; //生日

private String phone; //电话

private String address; //地址

private String userRole; //角色id//配合resultMap显示另一个表内的字段:角色名称//添加getter与setter方法

private String userRoleName; //

private Integer createdBy; //创建人

private Date creationDate; //创建日期

private Integer modifyBy; //修改人

private Date modifyDate; //修改日期//用户对应角色,可以通过用户访问到角色的所有信息,复杂映射

privateRole role;publicInteger getId() {returnid;

}public voidsetId(Integer id) {this.id =id;

}publicString getUserCode() {returnuserCode;

}public voidsetUserCode(String userCode) {this.userCode =userCode;

}publicString getUserName() {returnuserName;

}public voidsetUserName(String userName) {this.userName =userName;

}publicString getUserPassword() {returnuserPassword;

}public voidsetUserPassword(String userPassword) {this.userPassword =userPassword;

}publicInteger getGender() {returngender;

}public voidsetGender(Integer gender) {this.gender =gender;

}publicDate getBirthday() {returnbirthday;

}public voidsetBirthday(Date birthday) {this.birthday =birthday;

}publicString getPhone() {returnphone;

}public voidsetPhone(String phone) {this.phone =phone;

}publicString getAddress() {returnaddress;

}public voidsetAddress(String address) {this.address =address;

}publicString getUserRole() {returnuserRole;

}public voidsetUserRole(String userRole) {this.userRole =userRole;

}publicInteger getCreatedBy() {returncreatedBy;

}public voidsetCreatedBy(Integer createdBy) {this.createdBy =createdBy;

}publicDate getCreationDate() {returncreationDate;

}public voidsetCreationDate(Date creationDate) {this.creationDate =creationDate;

}publicInteger getModifyBy() {returnmodifyBy;

}public voidsetModifyBy(Integer modifyBy) {this.modifyBy =modifyBy;

}publicDate getModifyDate() {returnmodifyDate;

}public voidsetModifyDate(Date modifyDate) {this.modifyDate =modifyDate;

}publicString getUserRoleName() {returnuserRoleName;

}public voidsetUserRoleName(String userRoleName) {this.userRoleName =userRoleName;

}publicRole getRole() {returnrole;

}public voidsetRole(Role role) {this.role =role;

}

}

(4)UserService.java

@Testpublic voidtestGetUserListByUser(){

SqlSession session= null;

List userList = null;try{

session=MybatisUtil.createSqlSession();

User user1= newUser();

user1.setUserName("用户");

user1.setUserRole("1");

userList=session.getMapper(UserMapper.class).getUserListByUser(user1);

session.commit();

}catch(Exception e) {

e.printStackTrace();if (session != null) {

session.rollback();

}

}finally{if (session != null) {

session.close();

}

}for(User user : userList){

log.debug("user =====> "+user.getUserName()+"\t"+user.getUserRoleName());

}

}

3.步骤总结

(1)首先在User类加入userRoleName属性,加入该属性的getter与setter方法

(2)修改UserMapper接口中的对应查询方法

(3)修改UserMapper.xml中中的resultType属性为resultMap,注意其值为resultMap节点的id属性值

(4)注意resultMap中的property属性值与column属性值

(5)若要使用自动映射,则实体对象的属性名要与数据库字段名一致,否则就自定义结果映射(如本例)

mybatis 显示自定义多个统计_myBatis查询结果显示多表内的字段——通过resultMap映射自定义结果...相关推荐

  1. 查询数据库里所有表名和字段名的语句

    查询数据库里所有表名和字段名的语句 SQL 查询所有表名: SELECT NAME FROM SYSOBJECTS WHERE TYPE='U' SELECT * FROM INFORMATION_S ...

  2. MySQL - 查询数据库里所有表名和字段名

    查询数据库里所有表名和字段名的语句 SQL 查询所有表名 SELECT NAME FROM SYSOBJECTS WHERE TYPE='U' SELECT * FROM INFORMATION_SC ...

  3. mysql 查询案例dept,emp表内数据

    mysql 查询案例dept,emp表内数据 部门表 员工表 工资等级表 查询案例: 部门表 CREATE TABLE DEPT( DEPTNO INT PRIMARY KEY, – 部门编号 DNA ...

  4. 达梦数据库查询模式名,表名,字段名

    达梦数据库查询模式名,表名,字段名 查询所有的模式名 SELECT DISTINCT object_name FROM ALL_OBJECTS WHERE OBJECT_TYPE = 'SCH' 根据 ...

  5. mysql连接查询(两个表内和多个表内连接查询)

    连接是关系数据模型的主要特点,连接查询是关系数据库中最主要的查询,包括内连接.外连接等. 当两个或多个表中存在相同意义的字段时,便可以通过这些字段对不同的表进行 连接查询,得到存放在多个表中的记录数据 ...

  6. hive SQL 创建数据库,创建hive表、查询时,其表名,字段,统统不区分大写(在底层一律转换为小写)

    hive SQL 创建数据库,创建hive表.查询时,其表名,字段,统统不区分大写(在底层一律转换为小写) (1).默认default数据库 hive默认自带一个名为default的数据库,如果建表时 ...

  7. sql server查询不显示结果_仅凭网上查询结果显示邮件由行政机关签收,能证明行政机关一定收到了当事人的申请吗?...

    仅凭网上查询结果显示邮件由行政机关签收,能证明行政机关一定收到了当事人的申请吗? 蓝承烈与中国人民银行二审行政裁定书 北京市高级人民法院 行 政 裁 定 书 (2018)京行终2922号 上诉人(一审 ...

  8. oracle 查询表字段6,Oracle 查询库中所有表名、字段名、字段名说明,查询表的数据条数、表名、中文表名、...

    --创建用户 create user "用户名" identitied by "密码": --给自己修改密码 查询所有表名: select t.table_na ...

  9. hive表指定分区字段搜索_Spark SQL解析查询parquet格式Hive表获取分区字段和查询条件...

    首先说一下,这里解决的问题应用场景: sparksql处理Hive表数据时,判断加载的是否是分区表,以及分区表的字段有哪些?再进一步限制查询分区表必须指定分区? 这里涉及到两种情况:select SQ ...

最新文章

  1. SpringBoot+Vue视频干货
  2. android开发检测用户是否使用了虚拟定位
  3. 【转】Android Camera 相机开发详解
  4. 20170102-文件处理
  5. 循序渐进DB2 (第2版)——DBA系统管理、运维与应用案例
  6. DP(三)——简单的完全背包
  7. Linux学习总结(37)——CentOS7下Firewall防火墙配置用法详解
  8. 设置mysql表名不区分大小写
  9. PHP Excel导入数据到MySQL数据库
  10. mysql jpa缓存,如何在Spring Data JPA CRUDRepository中添加缓存功能
  11. Linux下安装anaconda,创建虚拟环境python3.7,并且安装深度学习框架pytorch进行模型训练
  12. Unity功能点---动画控制CrossFade方法的使用和简单说明
  13. Qt编写物联网管理平台13-短信告警
  14. html缩小照片尺寸像素不变,怎么把图片变小 像素不变
  15. JS: exec()方法
  16. linux重启文件被删除,linux 误删文件恢复方法(debugfs)
  17. Excel2010分成两个或者多个独立窗口
  18. fn映射 mac 键盘_Mac 学习笔记(五)键位映射
  19. Comet OJ 夏季欢乐赛 完全k叉树
  20. 数据分析师需要学什么?数据分析师需要掌握什么技能呢?

热门文章

  1. MongoDB 4.0 事务实现解析
  2. 20180625笔记
  3. 【C#】list 去重
  4. Java:字符串类String的功能介绍
  5. Android开发之CoordinatorLayout使用详解一
  6. Android Service的绑定 基础概念篇
  7. js中判断两个数字的大小
  8. jQuery源码解析对象实例化与jQuery原型及整体构建模型分析(一)
  9. linux 新建用户和权限分配
  10. 掌握 需求过程阅读笔记06