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