使用MyBatis的resultMap高级查询时常用的方式总结

以下内容已经通过楼主测试, 从pd设计数据库到测试完成, 之前楼主也没有过Mybatis 使用resultMap觉得有点乱,最近抽出时间总结了一下也算对MyBatis的resultMap进行一次系统的学习, 希望与大家分享学习心得, 有说的不对的地方请大家帮指教

下面是PD设计的几张数据库模型

先说下表吧 多对多 采用 传统而经典的 用户角色表,并没有采用当今流行的联合主键方式 而是将 用户表_id 和 角色表_id 进行Unique

详情参见http://www.cnblogs.com/YingYue/p/3983611.html

,   单项一对多采用 班级学生表 (一个班级有多个学生, 一个学生只能在一个班级, 大学除外否则就是多对多了, 哈哈)

Mybatis的resultMap操作多表的方式 大致如下几种方式

  方式一: 在resultMap中指定其他表的列名用column指向其他表的column同时在当前表对应的实体类中添加一个标识字段

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="UserMapper" >
  <resultMap id="BaseResultMap" type="entity.User" >
    <id column="ID" property="id" jdbcType="VARCHAR" />
    <result column="USER_NAME" property="userName" jdbcType="VARCHAR" />
    <result column="PASSWORD" property="password" jdbcType="VARCHAR" />
      <!-- USER_ID这个列USER表中并不存在, 这个列存在于USER_ROLE中 通过flag指向USER_ROLE的USER_ID列 -->  <result column="USER_ID" property="flag" jdbcType="VARCHAR" />
  </resultMap>
<!-- 查询用户带有的角色 -->
  <select id="selectUserOfRole" resultMap="BaseResultMap" parameterType="java.lang.String" >
    select
    *
    from user u left join user_role ur on u.id = ur.user_id
    <if test="id != null">
    where ID = #{id,jdbcType=VARCHAR}
    </if>
    <if test="userName != null">
    where USER_NAME = #{userName,jdbcType=VARCHAR}
    </if>
  </select>
</mapper>

java

package entity;

public class User {
    private String id;

    private String userName;

    private String password;
    //这个就是在标示字段, 数据库中并不存在, 而是通过 USER_ID 指向 USER_ROLE的USER_ID列
    private String flag;

    public String getFlag() {        return flag;    }

    public void setFlag(String flag) {        this.flag = flag;    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id == null ? null : id.trim();
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName == null ? null : userName.trim();
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password == null ? null : password.trim();
    }
}

方式二:

http://www.cnblogs.com/YingYue/diary/2014/09/18/3978422.html

时间: 2024-12-26 01:28:32

使用MyBatis的resultMap高级查询时常用的方式总结的相关文章

Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办--转自http://www.jb51.net/article/88236.htm

这篇文章主要介绍了Mybatis使用MySQL模糊查询时输入中文检索不到结果的解决办法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 项目开发中,在做Mybatis动态查询时,遇到了一个问题:MySQL在进行LIKE模糊查询时,输入英文可以正常检索出结果,但是输入中文后检索得到的结果为空. 由于是使用GET方式请求,所以为了确保中文不乱码,在控制台接收到请求参数后,对中文进行了一次编码. ? 1 2 3 4 5 try { realName = new String(realNam

关于EXT gridPanel进行高级查询时load提交后台乱码以及其他方式更新store的方法及遇到的问题

Ext.data.Store  加载数据的几个方法及注意的事项 下面为定义的Store var ds_edisCommonUser = new Ext.data.uStore({ storeId:'edisCommonUser', model:'Edis_CommonUser', pageSize:itemPerPage, autoLoad:false, proxy:{ type:'ajax', method:'POST', url:'EdisCommonUser/getUsers.action

SpringBoot集成Mybatis实现多表查询的两种方式(基于xml)

 下面将在用户和账户进行一对一查询的基础上进行介绍SpringBoot集成Mybatis实现多表查询的基于xml的两种方式.   首先我们先创建两个数据库表,分别是user用户表和account账户表     user表:  account表:  然后创建实体类        **第一种通过创建子类的方式查询                             需求:查询所有的用户基础信息以及其所属的账户中的金额     1.创建想要得到多表查询数据的实体类(子类)            

MyBatis(四):mybatis中使用in查询时的注意事项

准备工作 1)创建测试表jobitem CREATE TABLE "jobitem" ( "id" bigint(20) NOT NULL AUTO_INCREMENT COMMENT '唯一键 pk', "appId" varchar(32) NOT NULL COMMENT 'yarn任务id(applicationId)', "submitFilePath" varchar(256) NOT NULL COMMENT '

mybatis sql in 查询(mybatis sql语句传入参数是list)mybatis中使用in查询时in怎么接收值

1.in查询条件是list时 <select id="getMultiMomentsCommentsCounts" resultType="int"> select moment_comment_count from tbl_moment_commentCount where mid in <foreach item="item" index="index" collection="list&quo

MyBatis做动态模糊查询时,like后面要不要加单引号??

做项目遇到了个奇怪的问题,项目里面要对商品.账户.进行分别的多条件查询,于是我就采用动态多条件分页查询,起初在做账户部分的时候Mybatis是这样写的 <!-- 动态多条件分页查询 --> <select id="searchPageUseDyc" parameterType="page" resultMap="accountResultMap"> select acc_id,acc_login,acc_name,acc_

mybatis中使用in查询时的注意事项

1. 当查询的参数只有一个时   findByIds(List<Long> ids)  1.a 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list  <select id="findByIdsMap" resultMap="BaseResultMap">          Select         <include refid="Base_Column_List" /> 

优化jeecg底层高级查询,支持bool值和下拉框查询

最近在用jeecg做项目,在使用高级查询的时候发现它不支持布尔值的查询以及列表的下拉框的查询,所以小编修改了底层代码,完善了高级查询,现在与大家一起分享.先上一张图给大家看一下修改前的高级查询. 它只支持了文本的查询以及日期格式的查询,很难满足在使用过程中的要求.所以小编把他的功能丰富了一下,下面把源码分享给大家. 首先先简单介绍一下jeecg高级查询的原理,一切的秘密都在DataGridTag这个标签类里面,在打开一个页面的时候,这个类会对页面的左右变迁进行初始化,以及对高级查询的页面进行构造

Mybatis学习记录(四)--高级查询和缓存

这些都是连贯的学习笔记,所以有的地方因为之前都说过,所以也就没怎么写详细了,看不太明白的可以看看之前的笔记. 一.高级查询 高级查询主要是一对一查询,一对多查询,多对多查询 1.一对一查询 有用户和订单两个表,用户对订单是1对1查询.也就是订单中有一个外键是指向用户的. 先创建实体类: User.java public class User { private int id; private String username; private String password; private St