SSM框架实战系列之十_MyBatis框架

SSM框架实战系列之十_MyBatis框架

  接下来,就是最后一个框架:MyBatis框架。

  一、MyBatis框架的基本概念
  1、ORM
  ORM:即对象关系映射(Object Relational Mapping)。Java语言是面向对象(Object)的编程语言,而数据库通常是关系型(Relational)的,它们之间存在着天然的不匹配。在开发过程中经常需要将一个Java对象写入数据库,变成一条记录,也经常需要将数据库的一条记录读入内存,变成一个Java对象。
  以往这部分代码通常比较繁琐,写过JDBC程序的开发者应该深有体会。
  一个成熟的ORM框架可以自动地将Java对象写入数据库(自动生成INSERT语句),也可以自动地将记录变成Java对象(根据查询结果封装对象)。

  2、MyBatis框架与Hibernate框架的差异
  二者都是成熟的ORM框架,也存在着一些差异:
  (1) 开发工作量:Hibernate框架会自动生成增删改查所需的SQL语句,完全不需要开发人员编写SQL语句;MyBatis框架依赖开发人员自己编写SQL语句;当然,MyBatis框架也有自动化工具可以辅助生成SQL语句。
  (2) 灵活性:由于Hibernate框架自动生成SQL语句的,如果对Hibernate框架不够了解,性能优化比较困难;MyBatis框架由开发人员自己编写SQL语句,容易进行性能优化,例如可以让DBA协助优化SQL语句的性能。
  (3) 数据库可移植性:Hibernate框架可指定数据库“方言”,然后会自动生成不同数据库环境下的SQL语句,可移植性较强;MyBatis框架的SQL语句由开发人员书写,因为不同数据库的SQL语句会有差异,所以可移植性较差。

  由于大型系统通常数据库选型比较谨慎,不会轻易换数据库,并且大型系统对性能要求比较重视,所以MyBatis框架相对而言是有优势的,简单的SQL语句也有自动化工具可以生成,因此MyBatis框架是大型项目的首选ORM框架。

  二、Web项目中配置MyBatis框架
  以前MyBatis框架有自己的配置文件,不过现在通常是在Spring框架的配置文件中配置MyBatis。

  1、在resources/config目录下,创建一个jdbc.properties文件,用于保存数据库的各项信息:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/schooldb?useUnicode=true&characterEncoding=UTF8
username=root
password=root
initialSize=0
maxActive=20
maxIdle=20
minIdle=1
maxWait=60000

  这个文件中包含了如下信息:
  × driver:数据库的JDBC驱动类名
  × url:数据库连接的URL
  × username:数据库用户名
  × password:密码
  × initialSize:初始连接数
  × maxActive:最大连接数
  × maxIdle:最大空闲连接数
  × minIdle:最小空闲连接数

  × maxWait:超时等待时间,以毫秒为单位


  2、在resources/config目录下,添加一个spring-mybatis.xml文件,内容如下:

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

	<!-- 用于读入外部properties文件 -->
	<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location" value="classpath:config/jdbc.properties" />
	</bean>

	<!-- 数据源,这里使用dbcp连接池 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="${driver}" />
		<property name="url" value="${url}" />
		<property name="username" value="${username}" />
		<property name="password" value="${password}" />
		<property name="initialSize" value="${initialSize}" />
		<property name="maxActive" value="${maxActive}" />
		<property name="maxIdle" value="${maxIdle}" />
		<property name="minIdle" value="${minIdle}" />
		<property name="maxWait" value="${maxWait}" />
	</bean>

	<!-- mybatis的session工厂 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<!-- 指定映射文件的位置 -->
		<property name="mapperLocations" value="classpath:com/hanhf/ssm/dao/*.xml" />
	</bean>

	<!-- 扫描mapper接口,spring将创建mapper接口的动态代理 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.hanhf.ssm.dao" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
	</bean>

	<!-- 事务管理器 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>

	<!-- 注解驱动的事务管理,@Transactional -->
	<tx:annotation-driven transaction-manager="transactionManager" />
</beans>

  下面,分析一下该配置文件中的配置项。

  (1) propertyConfigurer

  该部分指定一个properties文件的处理类,并指定properties文件的位置。properties文件采用键值方式存储配置,方便易用,Spring框架中的PropertyPlaceholderConfigurer类可以辅助读取properties文件。


  (2) dataSource

  此处配置一个数据源,在实际应用中,往往使用数据库连接池技术,即在一个缓存池中事先存储多个已经建立好连接的数据库连接,需要时从连接池中取出一个,不用时再归还到连接池中,这样做可以提升连接速度。

  连接池的厂商很多,此处使用了apache的dbcp连接池。

  此处还配置了连接池的各项参数,其数据取自properties文件。


  (3) sqlSessionFactory

  Session工厂是MyBatis中的一个重要概念。

  在MyBatis中要执行数据操作例如增删改查,必须先取得数据库连接(即Session,数据库会话)。Session工厂采用工厂模式辅助生成数据库连接,工厂模式大家应该都懂,因为数据库厂商各异,取得数据库连接的代码也就各异,工厂模式掩盖了这些差异,对外提供了统一的获取连接的方法。

  此处,配置了Session工厂类的类名为SqlSessionFactoryBean,这是MyBatis框架中常用的Session工厂类。

  另外,还配置了MyBatis映射文件的位置。


  (4) MapperScannerConfigurer

  此处是MyBatis框架对Spring框架的一个适配(org.mybatis.spring.mapper.MapperScannerConfigurer,从包名可以看出这是MyBatis提供的一个类),它指定扫描一个包下的所有DAO接口,并生成DAO实现类。


  (5) 事务

  事务部分有两项:一个是事务管理器,一个是注解驱动的事务。有时也将事务部分独立出来,放在另一个Spring配置文件中。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值