关联查询分两种:
1,用一个总的sql搞定
这种关联体现在collect用的是标签,sql中查询主实体,被关联实体(由于在一个sql中,注意两个实体(查询结果集)中字段名不能一样
,一样的化会在用pagehelper等自动装配的语句出问题(未明确定义列),还有就是如果id一样会导致多方只查到一个)
此方法看上篇文章,关联查询同名字段问题
2,用子查询,collection中用的是sql子查询代替标签,另外一个总的查询只查询主体,他们的关联体现在子查询的sql中
1,连接,2条件列压入
<resultMap id="BaseResultMapr" type="com.esteel.system.bean.OpmRole" >
<!--
WARNING - @mbggenerated
-->
<id column="ID" property="id" jdbcType="VARCHAR" />
<result column="NAME" property="name" jdbcType="VARCHAR" />
<result column="ORGANID" property="organid" jdbcType="VARCHAR" />
<result column="VALID" property="valid" jdbcType="VARCHAR" />
<result column="MEMO" property="memo" jdbcType="VARCHAR" />
<result column="LEVEL1" property="level1" jdbcType="DECIMAL" />
<result column="SUBSYSTEM" property="subsystem" jdbcType="VARCHAR" />
</resultMap>
<resultMap id="BaseResultMapVo" type="com.esteel.system.beanVo.OpmUserVo" >
<id column="ID" property="id" jdbcType="VARCHAR" />
<result column="CODE" property="code" jdbcType="VARCHAR" />
<result column="PASSWORD" property="password" jdbcType="VARCHAR" />
<result column="NAME" property="name" jdbcType="VARCHAR" />
<result column="TELEPHONE" property="telephone" jdbcType="VARCHAR" />
<result column="EMAIL" property="email" jdbcType="VARCHAR" />
<result column="ORGANID" property="organid" jdbcType="VARCHAR" />
<result column="VALID" property="valid" jdbcType="VARCHAR" />
<result column="MEMO" property="memo" jdbcType="VARCHAR" />
<result column="LEVEL1" property="level1" jdbcType="DECIMAL" />
<result column="LAST_LOGIN_DATE" property="lastLoginDate" jdbcType="VARCHAR" />
<result column="LAST_LOGIN_TIME" property="lastLoginTime" jdbcType="TIMESTAMP" />
<result column="ONLINE_MARK" property="onlineMark" jdbcType="VARCHAR" />
<result column="ONLINE_IP" property="onlineIp" jdbcType="VARCHAR" />
<result column="SESSIONID" property="sessionid" jdbcType="VARCHAR" />
<collection property="opmRole" ofType="com.esteel.system.bean.OpmRole" select="getr" column="{uId=ID}">
</collection>
</resultMap>
<select id="getr" resultMap="BaseResultMapr">
select r.* from opm_role r join opm_user_role ur on ur.roleid = r.id join opm_User o on o.id = ur.userid
and o.id=#{uId}
</select>
<select id="getUserByMarkId" parameterType="map" resultMap="BaseResultMapVo">
select o.*
from opm_User o
where 1 = 1
<if test="organid!=null and organid!=''">
and o.organId=#{organid}
</if>
<if test="valid!=null and valid!=''">
and o.valid=#{valid}
</if>
<if test="level1!=null and level1!=''">
and o.LEVEL1=#{level1}
</if>
order by o.code
</select>
相关推荐
6. **参数映射**: MyBatis支持两种参数映射方式:#{}和${}。#{}是预编译的,可以防止SQL注入;${}则会原样替换,通常用于动态SQL。 7. **事务管理**: 在MyBatis中,事务可以通过编程式或声明式方式进行管理。编程式...
- MyBatis提供了本地缓存和二级缓存两种机制,可以在一定程度上提高性能。开发者可以根据需求配置缓存策略。 7. **插件支持**: - MyBatis允许自定义插件,可以拦截Executor、StatementHandler、ParameterHandler...
在MyBatis中,实现一对多关联有两种方式:集合映射和关联映射。集合映射通常用于一个实体包含一个列表或集合的子实体,而关联映射则允许更复杂的导航结构。在这个系列的第三部分,我们将重点讨论双向关联,这意味着...
- `transactionManager`元素:定义事务管理器,常见的有JDBC和MANAGED两种。JDBC适用于手动管理事务,而MANAGED则适用于容器管理的事务。 5. **映射器(Mappers)**: - `mappers`元素:配置映射文件的位置,可以...
另一种方法是将char类型字段改为varchar2类型。在大多数情况下,varchar2类型是更好的选择,因为它可以存储变长字符串,而char类型只能存储固定长度的字符串。 在使用jdbc查询时,也需要注意char类型字段的特殊性。...
MyBatis提供了两种参数映射方式:自动映射和手动映射。自动映射时,MyBatis会尝试将传入的参数值与SQL中的参数匹配;手动映射则需要使用`@Param`注解指定参数名。 7. **缓存机制** MyBatis内置了一级缓存和二级...
这个查询会在`ProductPrice`中找不到匹配的`productId`时,更新`Product`表的`deleted`字段。 最后,我们也可以同时更新两表中的字段。假设需要在更新`ProductPrice`表的价格的同时,将`Product`表的`dateUpdate`...
- **`transactionManager`**: 配置事务管理器,常见的有JDBC和Managed两种类型。 - **`dataSource`**: 配置数据源,可以是基本的数据源或连接池,例如Druid、HikariCP等。 - **`mappers`**: 指定Mapper配置文件的...
在实际开发中,我们常常会遇到一对一(One-to-One)和一对多(One-to-Many)的关系映射,这两种关系在数据库设计中非常常见。本篇文章将详细探讨 MyBatis 如何处理一对一和一对多的映射,以及在 Oracle 数据库中如何...
在MyBatis中,"多对一"关系映射是一种常见的数据库设计模式,它表示一个实体(如订单)可以与多个相关实体(如订单详情)关联,而另一个实体(订单详情)只对应一个实体(订单)。这个实例展示了如何在MyBatis中配置...
数据库分库分表有两种方式:水平切分和垂直切分。 水平切分是指将一个大型表分割成多个小型表,每个表的结构相同。这种方式适合于解决大规模数据所带来的性能问题。 垂直切分是指将不同的业务模块分离到不同的...
Mybatis提供了本地缓存和二级缓存两种机制。本地缓存是线程级别的,可以避免重复查询;二级缓存是全局的,可以在多个SqlSession之间共享数据,提高性能。 10. **Mybatis Plus扩展** Mybatis Plus是Mybatis的一个...
MyBatis则是一个轻量级的持久层框架,它将SQL语句与Java代码分离,提供了一种更加灵活的数据库操作方式。相比于传统的JDBC,MyBatis更易于维护和调试,因为它允许开发者直接编写SQL,同时可以通过映射文件或注解将...
通过MyBatis的扫描机制,这两个部分会被关联起来,使得在Java代码中调用接口方法时,实际上执行的是XML文件中定义的SQL语句。 8. **Spring整合MyBatis**:如果项目使用Spring框架,那么还需要配置Spring的...
3. **XML配置与注解**:MyBatis支持通过XML配置文件和注解两种方式来定义映射关系。XML配置文件中包含Mapper接口、SQL语句和结果映射等信息,注解则更方便地在Mapper接口和实体类上直接标注。 4. **Mapper接口和XML...
WebSocket是一种在客户端与服务器之间建立持久连接的协议,它允许双方进行全双工通信,即数据可以在两个方向上同时传输,极大地提高了实时性。在"websocket_springmvc+mybaits"这个实例中,我们将探讨如何结合Spring...
SpringMVC和Mybatis是Java Web开发中的两个关键框架,它们在构建现代企业级应用程序时起着核心作用。SpringMVC作为Spring框架的一部分,负责处理HTTP请求和响应,而Mybatis则是一个轻量级的持久层框架,简化了数据库...
CXF 是一款用于构建和服务消费的开源框架,它支持 SOAP 和 RESTful 两种类型的 Web 服务。通过 CXF,我们可以方便地创建服务提供者和服务消费者,同时提供了丰富的功能,如数据绑定、WS-Security 等。 MyBatis 是一...
7. **Executor执行器**:MyBatis提供了两种执行器,SimpleExecutor和BatchExecutor,分别对应简单的SQL执行和批处理操作。CachingExecutor则在前两者的基础上增加了缓存功能。 8. **一级缓存和二级缓存**:MyBatis...
项目不仅使用了MyBatis作为数据访问层的框架,还涉及到了JDBC和JPA(Java Persistence API)两种不同的数据库查询方式,为开发者提供了多种选择。 【描述】中的关键知识点如下: 1. **SpringBoot**: SpringBoot是...