4.1注解配置简介
注释配置相对于 XML 配置具有很多的优势:
(1)它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。如使用 JPA 注释配置 ORM 映射时,我们就不需要指定 PO 的属性名、类型等信息,如果关系表字段和 PO 属性名、类型都一致,您甚至无需编写任务属性映射信息——因为这些信息都可以通过 Java 反射机制获取。
(2)注释和 Java 代码位于一个文件中,而 XML 配置采用独立的配置文件,大多数配置信息在程序开发完成后都不会调整,如果配置信息和 Java 代码放在一起,有助于增强程序的内聚性。而采用独立的 XML 配置文件,程序员在编写一个功能时,往往需要在程序文件和配置文件中不停切换,这种思维上的不连贯会降低开发效率。
因此在很多情况下,注释配置比 XML 配置更受欢迎,注释配置有进一步流行的趋势。但是大量使用注解会影响项目后期维护,因为只要改了一点点配置,就要修改源代码,整个项目需要重新编译再上线。那么,到底是使用注释配置还是XML 配置呢?这就要取决于整个项目的取舍。
4.2整合思路分析
用Spring对MyBatis进行整合,将使得采用MyBatis操作数据库更加方便和简单。由于Spring 3的开发在MyBatis 3官方发布前就结束了,Spring开发团队不想发布一个基于非发布版本的MyBatis的整合支持,因此Spring 3没有提供对MyBatis3的支持。为了使Spring 3支持MyBatis 3,MyBatis团队开发出整合类,让开发者直接在Spring中使用MyBatis。
4.3 Spring和MyBatis整合核心类的介绍
在使用MyBatis-Spring整合之前,我们需要先下载相应的整合JAR包。在MyBatis的官方网站( http://code.google.com/p/mybatis/)上,找到MyBatis Integration,下载整合需要的mybatis-spring-1.2.0-bundle.zip,下载并解压后的目录如下图所示。整合时,在工程中只要包含mybatis-spring-1.2.0.jar就可以了。
MyBatis-Spring包的目录结构
要在Spring中使用MyBatis,需要在Spring的配置文件中定义一些类。下面先了解一下这些核心类。
1. SqlSessionFactoryBean
在MyBatis中,SqlSessionFactory可以使用SqISessionFactoryBuilder来创建,而在MyBatis-Spring中,使用SqISessinFacotryBean来代替,可以直接在Spring通过配置文件的形式配置。
2.MapperFactoryBean
MapperFactoryBean实现了Spring的FactoryBean接口,通过mapperlnterface属性注入接口,将映射接口变成可以注射的Spring Bean。
3. SqlSessionTemplate
SqlSessinTemplate类负责管理MyBatis的SqlSession,调用MyBatis的SQL映射语句,轻松实现数据库的访问。SqlSessionTernplate是线程安全的。当调用SQL方法时,包括通过从映射器getMapper()方法返回的映射器的方法,SqlSessionTemplate会保证使用的SqlSession是和当前Spring事务相关联的。此外,它管理会话的生命周期,包括必要的关闭、提交和回滚操作。
4.4 开发环境
开发工具:myeclipse8.6.1
数据库:mysql5.5.23
服务器: tomcat6.0.37
框架版本: spring3.2.2+mybatis3.2.2
4.5 案例开发步骤
步骤一:在myeclipse8.6中新建web工程AnnoSMMvc,拷贝如下包到lib目下:
代码的目录结构如下图所示:
步骤二:编写web.xml 配置文件,代码如下:
=================================web.xml========================
<?xml version="1.0"encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 配置统一错误处理页面start -->
<error-page>
<error-code>404</error-code>
<location>/Err404.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/Err500.html</location>
</error-page>
<!-- 配置统一错误处理页面end -->
<!-- 配置登录验证过滤器start -->
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.wx.filters.LoginFilter</filter-class>
<!-- 不做拦截的请求-->
<init-param>
<param-name>exclusions</param-name>
<param-value>AnnoSMMvc/,.js,.gif,.jpg,.jpeg,.png,.css,.ico,
Login.jsp,Login.php,Register.jsp,register.php,CheckUser.php,
ShowOneUser.jsp,ShowResult.jsp,Trans.php,ShowOneUser.php,quit.php
</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置登录验证过滤器end -->
<!--druid连接池 config start -->
<filter>
<filter-name>DruidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<init-param>
<param-name>exclusions</param-name>
<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
<!--http://localhost:8080/AnnoSMMvc/druid/index.html end-->
<!-- 配置spring mvc的字符集过滤 start-->
<filter>
<filter-name>encode</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param