Spring Framework,MyBatis,PostgreSQL整合示例
Spring Framework,MyBatis,PostgreSQL整合
简介
Spring Framework是优秀的JAVA应用程序开发框架和IoC容器,支持依赖注入,事务管理,Web MVC模式开发,数据存取,JMS等,是全功能(full stack)的开发框架。
MyBatis是ORM半自动映射框架,是支持普通SQL查询,存储过程和高级映射的优秀持久层框架,其架构十分灵活,允许用户定制OR影射规则,其精华在mapper。
PostgreSQL是最好的开源关系数据库,虽然现在使用的并不是很广泛。
企业应用开发可以整合Spring MVC,Spring,Mybatis,PostgreSQL实现一个完整的体系架构。Spring MVC作为MVC开发框架,Spring作为IoC容器,
MyBatis则为ORM持久层框架,底层使用PostgreSQL数据库。Spring MVC本来就是Spring Framework中的一个组件,所以二者是天然集成在一起的。
集成配置
依赖
因为Spring 3发布时,MyBatis 3尚未完成,所以MyBatis提供了与Spring集成的包MyBatis-Spring。所以需要下载MyBatis和MyBatis两个依赖包。
因为要使用数据库,所以需要Spring Famework提供的数据库相关的包,又因为Spring的事务管理框架是基于AOP实现的,所以还需要Spring AOP相关的jar包。
使用PostgresQL需要官方提供的PostgreSQL JDBC驱动。
使用C3P0连接池,需要C3P0的相关包。
整合需要添加的jar包汇总如下:
1 | Spring: |
以上jar包都放入WEB-INF/lib目录下
配置
Spring配置文件spring-servlet.xml
1 | <!-- C3P0 pooled datasource --> |
其中配置了C3P0 jdbc数据源dataSource,使用刚配置好的spring数据源dataSource配置MyBatis的SqlSessionFactoryBean,用来产生mapper需要的sqlsession,最后是自动扫描包下面的mapper,并生成相应接口的代理实现类。
不要忘了在spring-servlet.xml中添加mybatis 名字空间,如下:
1 | <beans xmlns="http://www.springframework.org/schema/beans" |
WEB-INF/jdbc.properties文件
1 | jdbc.driverClassName=org.postgresql.Driver |
MyBatis的其他配置可以设置在WEB-INF/mybatis.xml文件中,但不用再设置environments元素,因为MyBatis-Spring会使用spring配置的数据库环境包括数据源和事务配置。
这样配置就算完成了,MyBatis-Spring会自动扫描类classpath下包net.openwares.test.mapper里面的mapper配置xml和接口,生成mapper接口的代理实现类,并自动注入sqlSessionFactory为mapper提供可用的sqlSession。
如果有多个包需要扫描,只需用逗号或分号分隔包名即可。这是设置mapper bean最简单的方式。
而且,MyBatis-Spring自动扫描产生的mapper接口实现类是线程安全的,也完全不用再与sqlsession打交道,MyBatis-Spring会在背后默默的处理好这一切。
Rather than code data access objects (DAOs) manually using SqlSessionDaoSupport or SqlSessionTemplate, Mybatis-Spring can create a thread safe mapper that you can inject directly into other beans
简单示例代码
与前面的例子一样,这里只是把前端提交的加数augend和被加数addend存入postgresql数据库,PostgreSQL建库脚本testdb.sql如下:
1 | CREATE DATABASE testdb; |
然后执行命令行建库,psql的简单使用参见 PostgreSQL初步
1 | $ psql -U postgres -h localhost -f testdb.sql |
MyBatis mapper
mapper分为两部分,一个是java接口,另一个是xml配置文件,这两个文件要放置在一个目录下,而且接口的全限定接口名一定要与xml配置文件中mapper元素的命名空间完全一致。MyBatis会扫描xml为mapper接口生成实现类,并注册到spring容器中,供应用程序使用。这个mapper接口实际上就是一个DAO接口。
先看mapper配置文件
1 |
|
mapper接口代码:
1 | package net.openwares.test.mapper; |
接口全限定类名和xml配置文件中mapper的命名空间都为net.openwares.test.mapper.AttenderMapper,有了这些信息,无需实现mapper接口,
mybatis会自动提供接口的实现。
最后使用此接口将客户提交的数据持久化到数据库
1 |
|
使用@Autowired(required=true)自动注入依赖attenderMapper即可。
因为是简单的示例,这里没有使用事务管理,也没有仔细的分层,将代码直接写入了controller。