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

来源:互联网 发布:node.js userlist 编辑:程序博客网 时间:2024/06/08 18:27
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.Driverurl=jdbc:mysql://localhost:3306/schooldb?useUnicode=true&characterEncoding=UTF8username=rootpassword=rootinitialSize=0maxActive=20maxIdle=20minIdle=1maxWait=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配置文件中。


原创粉丝点击