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笔记就到这里啦,随后会有其他内容的笔记逐渐更新,希望大家多多支持,有问题的话多多指正