BuBu笔记——MyBatis进阶-多表查询(秃头BUBu的超详细备注,一定要看哦)
MyBatis的多表查询
- 前言
- MyBatis多表配置方式
- 一对一配置:使用< resultMap >做配置
- 一对一配置:使用< resultMap > + < association >做配置
- 一对多配置:使用< resultMap > + < collection >做配置
- 多对多配置:使用< resultMap > + < collection >做配置
- MyBatis的注解开发
- 常用注解:
- 使用注解进行增删改查操作
- 注解实现复杂映射开发
- ssm框架整合
- 原始方式整合
- 整合步骤
- MyBatis整合Spring
- 整合思路
- 主要配置
- 声明式事务控制实现
- 总结
前言
Mybatis入门教程最后一个阶段啦
MyBatis多表配置方式
一对一配置:使用< resultMap >做配置
Mapper.xml文件的配置
<resultMap id="orderMap" type="order"><id column="" property=""></id> //手动指定字段与实体属性的映射关系<result column="" property=""></result>//column:数据表的字段名称 property:实体的属性名称
</resultMap>
<select id="findAll" resultMap="orderMap">select *,o.id oid from order s,user u whereo.uid=u.id
</select>
一对一配置:使用< resultMap > + < association >做配置
<resultMap id="orderMap" type="order"><id column="" property=""></id><result column="" property=""></result><association property="user" javaType="user"> //association:匹配<id column="" property=""></id><result column="" property=""></result>//property:当前实体(order)中的属性名称(private User user) //javaType:当前实体(order)中的属性的类型(User)</association></resultMap>
<select id="findAll" resultMap="orderMap">select *,o.id oid from order s,user u whereo.uid=u.id
</select>
一对多配置:使用< resultMap > + < collection >做配置
<resultMap id="orderMap" type="order"><id column="" property=""></id><result column="" property=""></result>//配置集合信息//property:集合名称 osType:当前集合中的数据类型<collection property="orderList" ofYype="order">//封装对象的数据<id column="" property=""></id><result column="" property=""></result></collection>
</resultMap>
多对多配置:使用< resultMap > + < collection >做配置
<resultMap id="userRoleMap" type="user">//user的信息<id column="" property=""></id><result column="" property=""></result>//user内部的roleList信息<collection property="roleList" ofType="role"><id column="结果中取值" property=""></id><result column="" property=""></result></collection>
</resultMap>
一对多查询与多对多查询,在配置上基本一致,区别主要是SQL语句的不同,多对多查询需要额外引入一张中间表。
MyBatis的注解开发
常用注解:
@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以和@Result一起使用,封装多个结果集
@One:实现一对一结果集封装
@Many:实现一对多结果集封装
使用注解进行增删改查操作
//核心文件加载映射关系
<mappers>
<!--指定接口所在的包-->
<package name="包名" ></package>
</mappers>
注解实现复杂映射开发
使用@Results注解,@Result注解,@One注解,@Many注解组合完成复杂关系的配置
注解 | 说明 |
---|---|
@Results | 代替了标签< resultMap > 该注解可以使用单个@Result注解,也可以使用@Result集合使用格式:@Results({@Result(),@Result()})或@Results(@Result()) |
@Result | 代替了< id >标签和< result >标签@Result中属性介绍column:数据库的列名property:需要装配的属性名one:需要使用@One注解( @Result( one = @One ) () )many:需要使用@Many注解( @Result( many = @Many ) () ) |
@One(一对一) | 代替了< assocation >标签,是多表查询的关键,在注解中用来指定子查询返回单一对象。@One注解属性介绍select:指定用来多表查询的sqlmapper 使用格式@Result(column=" “,property=” “,one=@One(select=” ")) |
@Many(多对一) | 代替了< collection >标签,是多表查询的关键,在注解中用来指定子查询返回对象集合。使用格式:@Result(property=" “,column=” “,many=@Many(select=” ")) |
ssm框架整合
原始方式整合
整合步骤
1、创建表
2、创建Maven工程
3、导入Maven坐标
4、编写实体类
5、编写Mapper接口
6、编写Service接口
7、编写Service接口的实现
8、编写Controller
9、编写添加页面
10、编写列表页面
11、编写相应配置文件
12、测试
MyBatis整合Spring
整合思路
SqlSession sqlSession = MyBatisUtils.openSession();
AccountMapper accountMapper =sqlSession.getMapper(AccountMapper.class);
将Session工厂交给Spring容器管理,从容器中获得执行操作的Mapper实例即可
sqlSession.commit();
sqlSession.close();
将事务的控制交给Spring容器进行声明式事务控制
主要配置
1、在applicationContext.xml文件中配置
<!--加载propeties文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--配置数据源信息-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="${jdbc.driver}"></property><property name="jdbcUrl" value="${jdbc.url}"></property><property name="user" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property>
</bean>
2、将SqlSessionFactory配置到Spring容器中
<!--配置sessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><!--加载mybatis核心文件--><property name="configLocation" value="classpath:sqlMapConfig-spring.xml"></property>
</bean>
<!--扫描mapper所在的包 为mapper创建实现类-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.itheima.mapper"></property>
</bean>
声明式事务控制实现
<!--平台事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property>
</bean>
<!--配置事务增强-->
<tx:advice id="txAdvice"><tx:attributes><tx:method name="*"/></tx:attributes>
</tx:advice>
<!--事务的aop置入-->
<aop:config><aop:advisor advice-ref="txAdvice" pointcut="execution(* com.itheima.service.impl.*.*(..))"></aop:advisor>
</aop:config>
总结
MyBatis笔记就到这里啦,随后会有其他内容的笔记逐渐更新,希望大家多多支持,有问题的话多多指正
BuBu笔记——MyBatis进阶-多表查询(秃头BUBu的超详细备注,一定要看哦)相关推荐
- 【Mybatis】MyBatis 实现多表查询
大纲 Auto Mapping 单表实现(别名方式) <resultMap>实现单表配置 单个对象关联查询(N+1,外连接) 集合对象关联查询 注解开发 MyBatis 运行原理 准备:创 ...
- MySQL学习笔记06【多表查询、子查询、多表查询练习】
MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...
- MyBatis 实现多表查询、resultMap 标签、MyBatis 注解、mybatis运行原理
内容 Auto Mapping 单表实现(别名方式) 实现单表配置 单个对象关联查询(N+1,外连接) 集合对象关联查询 注解开发 MyBatis 运行原理 一.MyBatis 实现多表查询 Myba ...
- 【MyBatis】多表查询
MyBatis的多表查询 表之间的关系:一对多,多对一,一对一,多对多. 一对多:一个班级对应多个学生 多对一:多个学生对应一个班级 一对一:一个人对应一个身份证号码 多对多:一个订单可以有多个商品, ...
- mybatis分页多表查询
mybatis分页多表查询 我们常遇到一种情况,数据量比较大,如果使用前台分页,在前台如果有权限,有逻辑判断,都会大大降低页面加载的速度,我们需要分页,单表查询的网上方法很多,这里就不赘余了,多表关联 ...
- Mybatis实现关联表查询
Mybatis实现关联表查询 6.1. 一对一关联 1). 提出需求 根据班级 id 查询班级信息(带老师的信息) 2). 创建表和数据 [](javascript:void(0)
- Mybatis连3表查询数据resultMap结果映射
Mybatis连结3表查询数据resultMap结果映射 一.前言 Mybatis实现了sql与java代码的分离,达到了解耦合的目的,配置sql语句时有个resultType="" ...
- DM数据库——模式、表、索引管理基础(超详细版)
DM数据库--模式.表.索引管理基础(超详细版) 一.管理模式对象的空间 1.DM8对普通表和索引提供的参数 2.DM8对HUGE表提供的参数 3.空间限制 4.查看占用的空间 二.管理表 1.设计表 ...
- Mybatis系列(三):Mybatis实现关联表查询
原文链接:http://www.cnblogs.com/xdp-gacl/p/4264440.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 ...
- MyBatis中多表查询(多表查询语句实现)重点
–查询所有学生所在班级的信息(一对一) –班级查询学生的操作(一对多) –遇到的问题: 查询的SQL语句非常的简单,但是如何把查询的数据接受这个就是一个问题 [1]把每一个实体中的字段拿出来组建成一个 ...
最新文章
- hibernate tools for eclipse plugins在线怎么安装
- 转:MFC 的程序中GetAt()的理解
- Python 3.X 要使用urllib.request 来抓取网络资源。转
- 210108阶段三进程管理,多进程编程
- C#阻塞队列BlockingCollection
- 你根本想象不到,学霸到底经历过什么
- 前端做CRM管理系统是做什么_代办行业的CRM客户关系管理系统应该是什么样子的?...
- 四五六年级计算机教学计划,五六年级信息技术教学计划
- Leetcode刷题(1)两数之和
- 用链表队列实现基数排序;
- Swift 团队开源 Collections,提供更多高效数据结构
- 10.1综合强化刷题 Day2 morning
- 官方指南:小米手机微信双开
- 112-RTKLIB中关于dcb文件读取的问题
- 运动耳机怎么选,盘点目前适合运动的几款耳机
- vue.js最新版获取QQ音乐播放源
- Vue实现底部导航栏切换页面及图片
- iOS 图片解压缩的过程
- 这个水卡算法规律有会的吗?
- 三级分销软件开发技术分销系统模式
热门文章
- php es6写法,深入浅出es6模板字符串
- 如何用cocos2d-x来开发简单的Uphone游戏:(三) 射击子弹 碰撞检测
- ThinkPHP 验证码错误
- mysql命令桌面壁纸_【upupoo动态桌面壁纸和mysql-jdbc.jar哪个好用】upupoo动态桌面壁纸和mysql-jdbc.jar对比-ZOL下载...
- iOS转前端之仿写宠物网(适配不同尺寸)
- 从浏览器中获取headers
- 添加打印机,本地打印后台处理程序服务没有运行
- Django + MySQL + Redis 编写简单的高校求职招聘管理系统 in English(毕设+源码)
- 学计算机的能看出批图吗,P过的图片能看出来吗?给你4个鉴别方法!
- kindeditor导入word文档 kindeditor word导入插件