0%

13.3 实现DAO持久层

13.3 实现DAO持久层

MyBatis建议定义接口完成SQL语句的映射,该接口可以直接作为DAO组件使用。使用DAO模式,既能体现业务逻辑组件封装DAO组件的门面模式,也可分离业务逻辑组件和DAO组件的功能:业务逻辑组件负责业务逻辑的变化,而DAO组件负责持久化技术的变化,这正是桥接模式的应用。

引入DAO模式后,每个DAO组件包含了数据库的访问逻辑:每个DAO组件可对一个数据库表完成基本的CRUD等操作.

13.3.1 公共常量类

HrmConstants.java

HrmConstants类中定义了本系统中使用的常量。

13.3.2 定义DAO接口

UserDao接口

下面是UserDao接口的源代码。
Userdao接口中使用了动态SQL提供类:UserDynasqlProvider.

UserDynaSqlProvider.java

通过上面的DAO接口完成数据库的操作,这种简单的实现较之传统的JDBC持久化访问方便。

DeptDao接口

下面是DeptDao接口的源代码:

JobDao接口

下面是JobDao接口的源代码。
JobDao接口中使用了动态SQL提供类JobDynaSqlProvider

JobDynaSqlProvider.java

EmployeeDao.java

下面是EmployeeDao接口的源代码。
EmployeeDao接口中使用了动态SQL提供类EmployeeDynaSqlProvider

EmployeeDynaSqlProvider.java

下面是NoticeDao接口的源代码。

NoticeDao接口

Noticedao接口中使用了动态SQL提供类NoticeDynaSqlProvider

NoticeDynaSqlProvider.java

下面是DocumentDao接口的源代码。

DocumentDao接口

DocumentDao接口中使用了动态SL提供类DocumentDynaSqlProvider

DocumentDynaSqlProvider.java

13.3.3 部署DAO层

通过前面的介绍不难发现,MyBatis的持久化DAO接口只需要通过SqlSessiongetMapper方法获得对应的接口实例,即可以调用接口的方法完成数据库操作。而SpringMyBatis整合的应用中,由Spring容器负责生成并管理DAO组件
MyBatis社区自己开发了一个Mybatis-Spring中间件用来满足MyBatis用户整合Spring的需求。通过SqlSessionFactoryBean类,可以将SqlSessionFactory纳入IoC容器内。
在使用Spring管理DAO组件之前,必须要为其提供对应的数据源,本应用使用C3PO数据源.

db.properties

1
2
3
4
5
6
7
8
dataSource.driverClass=com.mysql.jdbc.Driver
dataSource.jdbcUrl=jdbc:mysql://127.0.0.1:3306/hrm_db
dataSource.user=root
dataSource.password=root
dataSource.maxPoolSize=20
dataSource.maxIdleTime = 1000
dataSource.minPoolSize=6
dataSource.initialPoolSize=5

配置了所需的数据源之后,程序就可以在此数据源基础上配置SqlSessionFactory对象。配置SqlSessionFactory的代码如下:

applicationContext.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?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:context="http://www.springframework.org/schema/context"
xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://mybatis.org/schema/mybatis-spring
http://mybatis.org/schema/mybatis-spring.xsd">
<!-- mybatis:scan会扫描org.fkit.dao包里的所有接口当作Spring的bean配置,之后可以进行依赖注入 -->
<mybatis:scan base-package="org.fkit.hrm.dao"/>
<!-- 扫描org.fkit包下面的java文件,有Spring的相关注解的类,则把这些类注册为Spring的bean -->
<context:component-scan base-package="org.fkit.hrm"/>
<!-- 使用PropertyOverrideConfigurer后处理器加载数据源参数 -->
<context:property-override
location="classpath:db.properties"/>
<!-- 配置c3p0数据源 -->
<bean
id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"/>
<!-- 配置SqlSessionFactory,org.mybatis.spring.SqlSessionFactoryBean是Mybatis社区开发用于整合Spring的bean -->
<bean
id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean"
p:dataSource-ref="dataSource"/>
<!-- JDBC事务管理器 -->
<bean
id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource"/>
<!-- 启用支持annotation注解方式事务管理 -->
<tx:annotation-driven
transaction-manager="transactionManager"/>
</beans>

<mybatis:scan base-package="org.fkit.hrm.dao"/>标签,会扫描org.fkit.hrm.dao包下面的所有接口作为SpringBean配置,之后可以进行依赖注入