- 浏览: 2244422 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (423)
- FileNet相关 (3)
- 应用服务器相关 (22)
- Java综合 (77)
- 持久层 (24)
- struts (11)
- webservice (8)
- 虚拟机 (2)
- 光盘刻录 (0)
- AD及AD集群 (1)
- JS (33)
- F5 (0)
- loadrunner8.1 (0)
- Java 反编译工具 (2)
- DataBase (62)
- ant (1)
- 操作系统 (29)
- 我的任务 (3)
- 平台架构 (16)
- 业务规则引擎 (2)
- 模板 (1)
- EJB (5)
- spring (24)
- CMMI (1)
- 项目管理 (20)
- LDAP (13)
- JMS (10)
- JSP (19)
- JBPM (2)
- web MVC框架设计思想 (2)
- 第三方支付平台 (2)
- BUG管理工具 (1)
- 垃圾站 (2)
- php (1)
- swing (1)
- 书籍 (1)
- QQ qq (2)
- 移动互联网 (26)
- 爱听的歌曲 (0)
- hadoop (4)
- 数据库 (9)
- 设计模式 (1)
- 面试经验只谈 (1)
- 大数据 (9)
- sp (1)
- 缓存数据库 (8)
- storm (2)
- taobao (2)
- 分布式,高并发,大型互联网,负载均衡 (6)
- Apache Ignite (0)
- Docker & K8S (0)
最新评论
-
wangyudong:
新版本 Wisdom RESTClienthttps://gi ...
spring rest mvc使用RestTemplate调用 -
wangyudong:
很多API doc生成工具生成API文档需要引入第三方依赖,重 ...
spring rest mvc使用RestTemplate调用 -
zhaoshijie:
cfying 写道大侠,还是加载了两次,怎么解决啊?求。QQ: ...
spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) -
xinglianxlxl:
对我有用,非常感谢
spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) -
k_caesar:
多谢,学习了
利用maven的resources、filter和profile实现不同环境使用不同配置文件
关键字:mybatis级联查询的两种方式
第一种配置方式:
1.定义四个实体。User Role Privilege Resource,他们之间的对于关系为
2.需求:我通过用户名username查找出该用户对应的角色以及角色对应的权限和资源
3.实体
public class User implements Serializable {
private String id;
private String username;
private String password;
private Set<Role> role = new HashSet<Role>();
public class Role implements Serializable {
private String id;
private String name;
private String des;
private Set<Privilege> privilege = new HashSet<Privilege>();
public class Privilege implements Serializable { private String id; private String name; private String des;
private Set<Resource> resource = new HashSet<Resource>(); private Privilege parent; private Set<Privilege> child = new HashSet<Privilege>();
public class Resource implements Serializable {
private String id;
private String uri;
private String des;
4.UserMapper.xml的查询方法为
<resultMap type="user" id="userResult">
<id column="id" property="id"/>
<result column="username" property="username"/>
<collection property="role" javaType="java.util.Set" resultMap="roleResult"/>
</resultMap>
<resultMap type="role" id="roleResult">
<id column="rid" property="id"/>
<result column="rname" property="name"/>
<result column="rdes" property="des"/>
<collection property="privilege" javaType="java.util.Set" resultMap="privilegeResult"/>
</resultMap>
<resultMap type="privilege" id="privilegeResult">
<id column="pid" property="id"/>
<result column="pname" property="name"/>
<collection property="resource" javaType="java.util.Set" resultMap="resourceResult"/>
</resultMap>
<resultMap type="resource" id="resourceResult">
<id column="resid" property="id"/>
<result column="resuri" property="uri"/>
</resultMap>
<select id="findUserByUserName" parameterType="string" resultMap="userResult">
select u.id,u.username,r.id as rid,r.name as rname,r.des as rdes,p.id as pid,p.name as pname,res.id as resid,res.uri as resuri
from tb_user u
left join user_role ur on ur.user_id=u.id
join tb_role r on r.id=ur.role_id
join role_privilege rp on rp.role_id=r.id
join tb_privilege p on p.id=rp.privilege_id
join tb_resource res on res.privilege_id=p.id
where u.username=#{username}
</select>
5.UserMapper.java定义方法
@Component
public interface UserMapper {
User findUserByUserName(@Param(value="username")String username);
}
第二种配置方式:
级联(关联)查询,mybatis已经有了很好的支持,配置也相当简单,示例:
一种是一对一的,一种是一结多的, association用于前者,collection用于后者。下面都有相应配置。
当然一对一的,可以直接配置在一起,就不用两次查询了。
<resultMap id="usersResult" type="com.zlwh.member.model.Users">
<result property="id" column="id"/>
<result property="loginName" column="login_name"/>
<result property="userName" column="user_name"/>
<result property="password" column="password"/>
<result property="email" column="email"/>
<result property="status" column="status"/>
<result property="userType" column="user_type"/>
<result property="memberType" column="member_type"/>
<result property="imgPath" column="img_path"/>
<result property="imgStatus" column="img_status"/>
<result property="identification" column="identification"/>
<result property="certificateCode" column="certificate_code"/>
<result property="countyCode" column="county_code"/>
<result property="schoolId" column="school_id"/>
<result property="classId" column="class_id"/>
<result property="grade" column="grade"/>
<result property="sex" column="sex"/>
<result property="birthday" column="birthday"/>
<result property="mobile" column="mobile"/>
<result property="inviteCode" column="invite_code"/>
<result property="subjectId" column="subject_id"/>
<result property="certificationStatus" column="Certification_status"/>
<result property="createTime" column="create_time"/>
<result property="validTime" column="valid_time"/>
<result property="institutionId" column="institution_id"/>
<result property="depName" column="dep_name"/>
<result property="jobName" column="job_name"/>
<association column="school_id" property="school"
javaType="com.zlwh.member.model.School" select="getSchoolById" />
</resultMap>
<resultMap id="schoolResult" type="com.zlwh.member.model.School">
<result property="id" column="id"/>
<result property="schoolName" column="school_name"/>
<result property="schoolCode" column="school_code"/>
<result property="county" column="county"/>
<result property="address" column="address"/>
<result property="phase" column="phase"/>
</resultMap>
<select id="getSchoolById" resultMap="schoolResult">
SELECT * FROM school WHERE id = #{id}
</select>
<resultMap id="usersResultForT" type="com.zlwh.member.model.Users">
<result property="id" column="id"/>
<result property="loginName" column="login_name"/>
<result property="userName" column="user_name"/>
<result property="inviteCode" column="invite_code"/>
<collection property="userSubscriptions" column="id" select="getUserSubscriptionsByUserId" ></collection>
</resultMap>
<resultMap id="userSubscriptionResult" type="com.zlwh.member.model.UserSubscription">
<result property="id" column="id"/>
<result property="userId" column="user_id"/>
<result property="subscriptionId" column="subscription_id"/>
<result property="beginDate" column="begin_date"/>
<result property="endDate" column="end_date"/>
<result property="status" column="status"/>
<result property="createTime" column="create_time"/>
<result property="orderId" column="order_id"/>
<result property="orderPrice" column="order_price"/>
<result property="payTime" column="pay_time"/>
</resultMap>
<select id="getStudentsByInviteCode" resultMap="usersResultForT">
<![CDATA[SELECT id,login_name,user_name,invite_code FROM users WHERE invite_code = #{inviteCode} and member_type=1]]>
</select>
<select id="getById" resultMap="usersResult">
SELECT <include refid="commonColumns" />
<![CDATA[
FROM users
WHERE
id = #{id}
]]>
</select>
<!-- 查所有已支付的订阅 -->
<select id="getUserSubscriptionsByUserId" resultMap="userSubscriptionResult">
SELECT * FROM user_subscription WHERE (status=1 or status=3) and user_id = #{userId} order by subscription_id asc
</select>
<!-- 用于select查询公用抽取的列 -->
<sql id="commonColumns">
<![CDATA[
id ,
login_name ,
user_name ,
password ,
email ,
status ,
user_type ,
member_type ,
img_path ,
img_status ,
identification ,
certificate_code ,
county_code ,
school_id ,
class_id ,
grade ,
sex ,
birthday ,
mobile ,
invite_code ,
subject_id ,
Certification_status ,
create_time ,
valid_time ,
institution_id ,
dep_name ,
job_name
]]>
</sql>
第一种配置方式:
1.定义四个实体。User Role Privilege Resource,他们之间的对于关系为
2.需求:我通过用户名username查找出该用户对应的角色以及角色对应的权限和资源
3.实体
public class User implements Serializable {
private String id;
private String username;
private String password;
private Set<Role> role = new HashSet<Role>();
public class Role implements Serializable {
private String id;
private String name;
private String des;
private Set<Privilege> privilege = new HashSet<Privilege>();
public class Privilege implements Serializable { private String id; private String name; private String des;
private Set<Resource> resource = new HashSet<Resource>(); private Privilege parent; private Set<Privilege> child = new HashSet<Privilege>();
public class Resource implements Serializable {
private String id;
private String uri;
private String des;
4.UserMapper.xml的查询方法为
<resultMap type="user" id="userResult">
<id column="id" property="id"/>
<result column="username" property="username"/>
<collection property="role" javaType="java.util.Set" resultMap="roleResult"/>
</resultMap>
<resultMap type="role" id="roleResult">
<id column="rid" property="id"/>
<result column="rname" property="name"/>
<result column="rdes" property="des"/>
<collection property="privilege" javaType="java.util.Set" resultMap="privilegeResult"/>
</resultMap>
<resultMap type="privilege" id="privilegeResult">
<id column="pid" property="id"/>
<result column="pname" property="name"/>
<collection property="resource" javaType="java.util.Set" resultMap="resourceResult"/>
</resultMap>
<resultMap type="resource" id="resourceResult">
<id column="resid" property="id"/>
<result column="resuri" property="uri"/>
</resultMap>
<select id="findUserByUserName" parameterType="string" resultMap="userResult">
select u.id,u.username,r.id as rid,r.name as rname,r.des as rdes,p.id as pid,p.name as pname,res.id as resid,res.uri as resuri
from tb_user u
left join user_role ur on ur.user_id=u.id
join tb_role r on r.id=ur.role_id
join role_privilege rp on rp.role_id=r.id
join tb_privilege p on p.id=rp.privilege_id
join tb_resource res on res.privilege_id=p.id
where u.username=#{username}
</select>
5.UserMapper.java定义方法
@Component
public interface UserMapper {
User findUserByUserName(@Param(value="username")String username);
}
第二种配置方式:
级联(关联)查询,mybatis已经有了很好的支持,配置也相当简单,示例:
一种是一对一的,一种是一结多的, association用于前者,collection用于后者。下面都有相应配置。
当然一对一的,可以直接配置在一起,就不用两次查询了。
<resultMap id="usersResult" type="com.zlwh.member.model.Users">
<result property="id" column="id"/>
<result property="loginName" column="login_name"/>
<result property="userName" column="user_name"/>
<result property="password" column="password"/>
<result property="email" column="email"/>
<result property="status" column="status"/>
<result property="userType" column="user_type"/>
<result property="memberType" column="member_type"/>
<result property="imgPath" column="img_path"/>
<result property="imgStatus" column="img_status"/>
<result property="identification" column="identification"/>
<result property="certificateCode" column="certificate_code"/>
<result property="countyCode" column="county_code"/>
<result property="schoolId" column="school_id"/>
<result property="classId" column="class_id"/>
<result property="grade" column="grade"/>
<result property="sex" column="sex"/>
<result property="birthday" column="birthday"/>
<result property="mobile" column="mobile"/>
<result property="inviteCode" column="invite_code"/>
<result property="subjectId" column="subject_id"/>
<result property="certificationStatus" column="Certification_status"/>
<result property="createTime" column="create_time"/>
<result property="validTime" column="valid_time"/>
<result property="institutionId" column="institution_id"/>
<result property="depName" column="dep_name"/>
<result property="jobName" column="job_name"/>
<association column="school_id" property="school"
javaType="com.zlwh.member.model.School" select="getSchoolById" />
</resultMap>
<resultMap id="schoolResult" type="com.zlwh.member.model.School">
<result property="id" column="id"/>
<result property="schoolName" column="school_name"/>
<result property="schoolCode" column="school_code"/>
<result property="county" column="county"/>
<result property="address" column="address"/>
<result property="phase" column="phase"/>
</resultMap>
<select id="getSchoolById" resultMap="schoolResult">
SELECT * FROM school WHERE id = #{id}
</select>
<resultMap id="usersResultForT" type="com.zlwh.member.model.Users">
<result property="id" column="id"/>
<result property="loginName" column="login_name"/>
<result property="userName" column="user_name"/>
<result property="inviteCode" column="invite_code"/>
<collection property="userSubscriptions" column="id" select="getUserSubscriptionsByUserId" ></collection>
</resultMap>
<resultMap id="userSubscriptionResult" type="com.zlwh.member.model.UserSubscription">
<result property="id" column="id"/>
<result property="userId" column="user_id"/>
<result property="subscriptionId" column="subscription_id"/>
<result property="beginDate" column="begin_date"/>
<result property="endDate" column="end_date"/>
<result property="status" column="status"/>
<result property="createTime" column="create_time"/>
<result property="orderId" column="order_id"/>
<result property="orderPrice" column="order_price"/>
<result property="payTime" column="pay_time"/>
</resultMap>
<select id="getStudentsByInviteCode" resultMap="usersResultForT">
<![CDATA[SELECT id,login_name,user_name,invite_code FROM users WHERE invite_code = #{inviteCode} and member_type=1]]>
</select>
<select id="getById" resultMap="usersResult">
SELECT <include refid="commonColumns" />
<![CDATA[
FROM users
WHERE
id = #{id}
]]>
</select>
<!-- 查所有已支付的订阅 -->
<select id="getUserSubscriptionsByUserId" resultMap="userSubscriptionResult">
SELECT * FROM user_subscription WHERE (status=1 or status=3) and user_id = #{userId} order by subscription_id asc
</select>
<!-- 用于select查询公用抽取的列 -->
<sql id="commonColumns">
<![CDATA[
id ,
login_name ,
user_name ,
password ,
email ,
status ,
user_type ,
member_type ,
img_path ,
img_status ,
identification ,
certificate_code ,
county_code ,
school_id ,
class_id ,
grade ,
sex ,
birthday ,
mobile ,
invite_code ,
subject_id ,
Certification_status ,
create_time ,
valid_time ,
institution_id ,
dep_name ,
job_name
]]>
</sql>
发表评论
-
数据库连接池选型
2014-12-04 18:32 1130关键字:数据库连接池选型 proxool(与spring不太 ... -
Mybatis物理分页插件(目前mybatis下最好的物理分页)
2014-12-03 22:36 45624关键字:Mybatis物理分页插件(目前mybatis下最好的 ... -
atomikos(com.atomikos.icatch.SysException: Error in init(): Log already in use)
2014-10-15 13:12 8447关键字:atomikos(com.atomikos.icatc ... -
Mybatis 打印SQL(sql)
2014-02-28 13:26 2792关键字:Mybatis 打印SQL(sql) ####### ... -
ibatis泛型dao(spring SqlMapClientTemplate支持)
2011-12-04 21:11 3685关键字:ibatis泛型dao(spring SqlMapC ... -
跟踪 C3p0 连接池连接泄漏之参数优化与日志分析
2011-09-13 11:48 11259<property name="un ... -
Hibernate注释大全收藏
2011-06-22 15:00 882关键字:Hibernate注释大全收藏 声明实体Bean ... -
hibernate调用MySql存储过程
2011-06-21 09:38 2564关键字:hibernate调用MySql存储过程 Java ... -
hibernate hql where语句拼接工具类
2011-05-27 01:18 3510附件是:hibernate hql where语句拼接工具类 ... -
Hibernate Mysql注解设置自动增长列
2011-05-08 05:14 10049@Entity @Table(name = "T_P ... -
hibernate二级缓存(包括注解方式)
2011-04-11 20:33 12238二级缓存配置(spring+hibernate) 说明:本人 ... -
Hibernate泛型DAO(结合spring模板支持)
2011-03-31 19:49 965详细介绍 Hibernate 泛 ... -
hibernate注解
2011-03-31 15:35 57附件是hibernate注解相关资料。 -
Eclipse中配置及使用iBATIS插件—ibator
2011-03-17 18:37 3671ibator,大快人心,以下对其配置及使用做个简单介绍. 一 ... -
Hibernate帮助文档及API
2011-03-05 22:16 2077附件是:Hibernate帮助文档及API,欢迎下载学习。 -
如何配置hibernate二级缓存呢?
2011-01-31 17:16 927配置二级缓存网站推荐: http://www.ineeke. ... -
String之HibernateTemplate经典查询
2010-12-08 15:49 1904一、find(String queryString); ... -
Hibernate之Criteria使用经典
2010-12-08 14:32 978创建一个Criteria 实例 org.hibernate. ... -
SchemaExport工具实战(hibernate)
2010-12-05 15:30 1125SchemaExport工具实战 通常我们使用生成数据库架构 ... -
Hibernate条件查询(DetachedCriteria)
2010-11-21 01:28 1750Hibernate条件查询(DetachedCriteria) ...
相关推荐
里面描述的了mybatis关联/级联的使用方法,还有常见的几种动态sql的使用方法 比如<if></if><where></where>
创建数据库,创建一个客户表(customer), 包括客户id,姓名(name),年龄(age),职业(occupation)...应用Mybatis级联查询功能,根据客户id查询表记录信息映射到Customer类对象(包括id,姓名, 年龄,职业,卡号,卡级别)
资源里面包含两个项目,是springboot集成mybatis的两种方式,一个项目是使用老的xml的配置方式,一个是使用注解的方式。
mybatis自动生成的两种方式
主要给大家介绍了关于Spring boot整合Mybatis实现级联一对多CRUD操作的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
Mybatis的级联一对一,一对多,简单小例子。欢迎下载,保证可以运行出来。
主要介绍了MyBatis之自查询使用递归实现 N级联动效果,本文给大家分享两种实现方式,需要的的朋友参考下吧
mybatis_01 入门配置 Dao的两种开发方法,非常适合新手学习。
这是一个springboot架构搭建的一个整合mybatis递归查询的demo,其中整合了分布式事物jta,mybatis的分页插件等
mybatis、mybatis详细设计、mybatis配置
spring整合mybatis时需要用到的配置文件
Mybatis框架(子查询)
mybatis+spring 框架中配置日志中显示sql语句
1.log4j配置sql打印 (sql参数?) 2.mybatis拦截器sql打印(sql参数 实参)
本资源是手写mybatis实现查询所有操作,详细描述了mybatis框架查询所有操作的实现过程,通过手动模拟mybatis框架的实现过程对mybatis框架有更深刻的认识。
SSM(Spring+SpringMVC+MyBatis)多数据源配置框架,精简版
本系统适合于刚刚学习springboot+mybatis的开发人员,内有多表联查,动态sql,批量删除。用mysql数据库
给大家总结了常用的两种spring、mybatis 配置方式,本文给大家介绍的非常详细,需要的朋友参考下吧
springboot-mybatis整合多数据源方式之一配置法(亦称分包方式)
此工具自动生成非注解时Spring整合MyBatis时需要的一些配置文件,对于使用较新版本的spring,可以忽视生成的dao的配置文件,建议采用spring的扫描方式。生成的GeneratorConfigXML修改jdbc驱动位置后可直接用使用...