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的超详细备注,一定要看哦)相关推荐

  1. 【Mybatis】MyBatis 实现多表查询

    大纲 Auto Mapping 单表实现(别名方式) <resultMap>实现单表配置 单个对象关联查询(N+1,外连接) 集合对象关联查询 注解开发 MyBatis 运行原理 准备:创 ...

  2. MySQL学习笔记06【多表查询、子查询、多表查询练习】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  3. MyBatis 实现多表查询、resultMap 标签、MyBatis 注解、mybatis运行原理

    内容 Auto Mapping 单表实现(别名方式) 实现单表配置 单个对象关联查询(N+1,外连接) 集合对象关联查询 注解开发 MyBatis 运行原理 一.MyBatis 实现多表查询 Myba ...

  4. 【MyBatis】多表查询

    MyBatis的多表查询 表之间的关系:一对多,多对一,一对一,多对多. 一对多:一个班级对应多个学生 多对一:多个学生对应一个班级 一对一:一个人对应一个身份证号码 多对多:一个订单可以有多个商品, ...

  5. mybatis分页多表查询

    mybatis分页多表查询 我们常遇到一种情况,数据量比较大,如果使用前台分页,在前台如果有权限,有逻辑判断,都会大大降低页面加载的速度,我们需要分页,单表查询的网上方法很多,这里就不赘余了,多表关联 ...

  6. Mybatis实现关联表查询

    Mybatis实现关联表查询 6.1. 一对一关联 1). 提出需求 根据班级 id 查询班级信息(带老师的信息) 2). 创建表和数据 [](javascript:void(0)

  7. Mybatis连3表查询数据resultMap结果映射

    Mybatis连结3表查询数据resultMap结果映射 一.前言 Mybatis实现了sql与java代码的分离,达到了解耦合的目的,配置sql语句时有个resultType="" ...

  8. DM数据库——模式、表、索引管理基础(超详细版)

    DM数据库--模式.表.索引管理基础(超详细版) 一.管理模式对象的空间 1.DM8对普通表和索引提供的参数 2.DM8对HUGE表提供的参数 3.空间限制 4.查看占用的空间 二.管理表 1.设计表 ...

  9. Mybatis系列(三):Mybatis实现关联表查询

    原文链接:http://www.cnblogs.com/xdp-gacl/p/4264440.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 ...

  10. MyBatis中多表查询(多表查询语句实现)重点

    –查询所有学生所在班级的信息(一对一) –班级查询学生的操作(一对多) –遇到的问题: 查询的SQL语句非常的简单,但是如何把查询的数据接受这个就是一个问题 [1]把每一个实体中的字段拿出来组建成一个 ...

最新文章

  1. hibernate tools for eclipse plugins在线怎么安装
  2. 转:MFC 的程序中GetAt()的理解
  3. Python 3.X 要使用urllib.request 来抓取网络资源。转
  4. 210108阶段三进程管理,多进程编程
  5. C#阻塞队列BlockingCollection
  6. 你根本想象不到,学霸到底经历过什么
  7. 前端做CRM管理系统是做什么_代办行业的CRM客户关系管理系统应该是什么样子的?...
  8. 四五六年级计算机教学计划,五六年级信息技术教学计划
  9. Leetcode刷题(1)两数之和
  10. 用链表队列实现基数排序;
  11. Swift 团队开源 Collections,提供更多高效数据结构
  12. 10.1综合强化刷题 Day2 morning
  13. 官方指南:小米手机微信双开
  14. 112-RTKLIB中关于dcb文件读取的问题
  15. 运动耳机怎么选,盘点目前适合运动的几款耳机
  16. vue.js最新版获取QQ音乐播放源
  17. Vue实现底部导航栏切换页面及图片
  18. iOS 图片解压缩的过程
  19. 这个水卡算法规律有会的吗?
  20. 三级分销软件开发技术分销系统模式

热门文章

  1. php es6写法,深入浅出es6模板字符串
  2. 如何用cocos2d-x来开发简单的Uphone游戏:(三) 射击子弹 碰撞检测
  3. ThinkPHP 验证码错误
  4. mysql命令桌面壁纸_【upupoo动态桌面壁纸和mysql-jdbc.jar哪个好用】upupoo动态桌面壁纸和mysql-jdbc.jar对比-ZOL下载...
  5. iOS转前端之仿写宠物网(适配不同尺寸)
  6. 从浏览器中获取headers
  7. 添加打印机,本地打印后台处理程序服务没有运行
  8. Django + MySQL + Redis 编写简单的高校求职招聘管理系统 in English(毕设+源码)
  9. 学计算机的能看出批图吗,P过的图片能看出来吗?给你4个鉴别方法!
  10. kindeditor导入word文档 kindeditor word导入插件