首页 > 代码库 > 使用MyBatis的resultMap高级查询时常用的方式总结
使用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
使用MyBatis的resultMap高级查询时常用的方式总结
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。