JavaEE框架---Mybatis第二部分

目录: 

  1. 输入映射和输出映射
    1. 输入参数映射
    2. 返回值映射
  2. 动态sql
    1. If标签
    2. Where标签
    3. Sql片段
    4. Foreach标签
  3. 关联查询
    1. 一对一关联
    2. 一对多关联
  4. Mybatis整合spring
    1. 如何整合spring
    2. 使用原始的方式开发dao
    3. 使用Mapper接口动态代理

Mybatis逆向工程(了解)


 2.1parameterType(输入类型)

  • 传递简单类型

    参考第一天内容。使用#{}占位符,或者${}进行sql拼接。

  • 传递pojo对象

    参考第一天的内容。Mybatis使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称。

  • 传递pojo包装对象

开发中通过可以使用pojo传递查询条件。

查询条件可能是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如查询用户信息的时候,将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。

包装对象:Pojo类中的一个属性是另外一个pojo。

需求:根据用户名模糊查询用户信息,查询条件放到QueryVo的user属性中。

1)编写QueryVo

2)Mapper.xml文件

3)Mapper接口

4)测试方法

2.2 resultType(输出类型)

  • 输出简单类型

需求:查询用户表数据条数

1)Mapper.xml文件

2)Mapper接口

3).测试方法

  • 输出pojo对象
  • 输出pojo列表

2.3 resultMap

       resultType可以指定将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。

       如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射到pojo对象中。

       resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。

需求:查询订单表order的所有数据

2.3.1声明pojo对象

2.3.2 Mapper.xml文件

创建OrderMapper.xml配置文件,如下:

2.3.3 Mapper接口

2.3.4测试方法

3.动态sql

通过mybatis提供的各种标签方法实现动态拼接sql。

需求:根据性别和名字查询用户

3.1. If标签

3.2. Where标签

3.1.1. Mapper.xml文件

UserMapper.xml配置sql,如下:

3.1.2. Mapper接口

编写Mapper接口,如下图:

3.1.3. 测试方法

3.3. Sql片段

Sql中可将重复的sql提取出来,使用时用include引用即可,最终达到sql重用的目的。

把上面例子中的id, username, birthday, sex, address提取出来,作为sql片段,如下:

如果要使用别的Mapper.xml配置的sql片段,可以在refid前面加上对应的Mapper.xml的namespace

3.4. foreach标签 

向sql传递数组或List,mybatis使用foreach解析,如下:

根据多个id查询用户信息

3.4.1. 改造QueryVo

3.4.2. Mapper.xml文件

3.4.3 Mapper接口

3.4.4测试方法

4.    关联查询

4.1. 商品订单数据模型

4.2. 一对一查询

需求:查询所有订单信息,关联查询下单用户信息。

注意:因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询。如果从用户信息出发查询用户下的订单信息则为一对多查询,因为一个用户可以下多个订单。

4.2.1使用resultMap

使用resultMap,定义专门的resultMap用于映射一对一查询结果。

4.2.1.1. 改造pojo类

在Order类中加入User属性,user属性中用于存储关联查询的用户信息,因为订单关联查询用户是一对一关系,所以这里使用单个User对象存储关联查询的用户信息。

改造Order如下图:

4.2.1.2. Mapper.xml

这里resultMap指定orderUserResultMap,如下:

4.2.1.3. Mapper接口

编写UserMapper如下图:

4.2.1.4测试方法

4.3. 一对多查询

案例:查询所有用户信息及用户关联的订单信息。

用户信息和订单信息为一对多关系。

4.3.1. 修改pojo类

4.3.2. Mapper.xml

4.3.3. Mapper接口 

4.3.4. 测试方法


                               5.    Mybatis整合spring

5.1. 整合思路

  1. SqlSessionFactory对象应该放到spring容器中作为单例存在。
  2. 传统dao的开发方式中,应该从spring容器中获得sqlsession对象。
  3. Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象。
  4. 数据库的连接以及数据库连接池事务管理都交给spring容器来完成。

5.2. 整合需要的jar包

  1. spring的jar包
  2. Mybatis的jar包
  3. Spring+mybatis的整合包。
  4. Mysql的数据库驱动jar包。
  5. 数据库连接池的jar包。

5.3. 整合的步骤

5.3.1. 创建工程

5.3.2. 导入jar包

5.3.3. 加入配置文件

5.3.3. 加入配置文件

  1. mybatisSpring的配置文件
  2. 的配置文件sqlmapConfig.xml
    1. 数据库连接及连接池
    2. 事务管理(暂时可以不配置)
    3. sqlsessionFactory对象,配置到spring容器中
    4. mapeer代理对象或者是dao实现类配置到spring容器中。

5.3.3.1. SqlMapConfig.xml

5.3.3.2. applicationContext.xml

SqlSessionFactoryBean属于mybatis-spring这个jar包

对于spring来说,mybatis是另外一个架构,需要整合jar包。

在项目中加入mybatis-spring-1.2.2.jar的源码,如下图

applicationContext.xml,配置内容如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

   <!-- 加载配置文件 -->
   <context:property-placeholder location="classpath:db.properties" />

	<!-- 数据库连接池 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="maxActive" value="10" />
		<property name="maxIdle" value="5" />
	</bean>

	<!-- 配置SqlSessionFactory -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 配置mybatis核心配置文件 -->
		<property name="configLocation" value="classpath:SqlMapConfig.xml" />
		<!-- 配置数据源 -->
		<property name="dataSource" ref="dataSource" />
	</bean>
	
	<!-- 原始Dao -->
	<bean id="userDao" class="com.itheima.mybatis.dao.impl.UserDaoImpl">
		<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
	</bean>
	
	<!-- Mapper动态代理开发 -->
	<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
		<property name="mapperInterface" value="com.itheima.mybatis.mapper.UserMapper"/>
	</bean>
	
	<!--Mapper动态代理开发  扫描  -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- 导入基本包 -->
		<property name="basePackage" value="com.itheima.mybatis.mapper"/>
	</bean>
	
	
</beans>

5.3.3.3. db.properties

5.3.3.4. log4j.properties

5.3.3.5. 效果:

加入的配置文件最终效果如下:

5.4. 原始Dao的开发

两种dao的实现方式:

  1. 原始dao的开发方式
  2. 使用Mapper代理形式开发方式
    1. 直接配置Mapper代理
    2. 使用扫描包配置Mapper代理

需求:

  1. 实现根据用户id查询
  2. 实现根据用户名模糊查询
  3. 添加用户

5.4.1. 创建pojo

5.4.2. 传统dao的开发方式

原始的DAO开发接口+实现类来完成。

需要dao实现类需要继承SqlsessionDaoSupport类

5.4.2.1. 实现Mapper.xml

5.4.2.2. 加载Mapper.xml
在SqlMapConfig如下图进行配置:

5.4.2.3. 实现UserDao接口

5.4.2.4. 实现UserDaoImpl实现类

编写DAO实现类,实现类必须集成SqlSessionDaoSupport

SqlSessionDaoSupport提供getSqlSession()方法来获取SqlSession

5.4.2.5. 配置dao

把dao实现类配置到spring容器中,如下图

5.4.3. Mapper代理形式开发dao

5.4.3.1. 实现Mapper.xml

编写UserMapper.xml配置文件,如下:

5.4.3.2. 实现UserMapper接口

5.4.3.3. 方式一:配置mapper代理

在applicationContext.xml添加配置

MapperFactoryBean也是属于mybatis-spring整合包

测试方法:

5.4.3.5. 方式二:扫描包形式配置mapper 

每个mapper代理对象的id就是类名,首字母小写

 

6.    Mybatis逆向工程。。。。。。。。。。。。。。。。。。。。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值