Spring MyBatis PostgreSQL 整合
Spring MyBatis整合,首先来看Spring配置文件,
Spring配置文件如下:
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
">
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="org.postgresql.Driver">
</property>
<property name="url"
value="jdbc:postgresql:testdb">
</property>
<property name="username" value="postgres"></property>
<property name="password" value="nirvana7"></property>
</bean>
<!---->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="myDataSource"/>
<property name="configLocation" value="bin/resource/mybatis-config.xml"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="Mapper"/>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="myDataSource"/>
</bean>
</beans>
跟MyBatis直接连接数据库不一样的地方,
在SqlSessionFactory的生成方式上,
MyBatis直接连接的时候,是通过SqlSessionFactoryBuilder读取MyBatis配置文件生成。
Spring整合MyBatis的时候,是通过Spring配置文件片段生成的。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="myDataSource"/>
<property name="configLocation" value="bin/resource/mybatis-config.xml"/>
</bean>
配置源和事务处理方式的指定也由Spring配置文件完成了。
当然MyBatis配置文件还是有用处的,比如typeAlias和Setting等的设置还是要通过它来完成的。
这里没有指定MyBatis的Sql映射器配置文件,因为我这里指定了MyBatis配置文件,在MyBatis配置文件当中,指定了Sql映射器配置文件。
如果没有配置MyBatis配置文件的话,且Sql映射器配置文件与相应的接口同名,且在同一路径下,那么可以不配置该选项。
如果配置的话,需要在sqlSessionFactory里进行配置,例:
<property name="mapperLocations" value="src/UserMapper.xml"/>
还需要注册映射接口的。
有两种方式,我用的是扫描法,如下:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="Mapper"/>
</bean>
还有一种方式是
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.deppon.pda.v2.mapper.User.UserMapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
这样就整合完成了,原来使用的MyBatis配置文件和Sql映射文件都可以不用改变。
调用代码为,
package test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import bean.User;
import Mapper.UserMapper;
import dao.UserDao;
public class UserTest {
public static void main(String[] args){
ApplicationContext aContext =new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper userMapper = aContext.getBean(UserMapper.class);
User user = userMapper.getUser("fff");
System.out.println(user.getAge());
}
}
当然了,数据库里面要插入一条fff的记录。
全部代码上传上去,一些包需要自己下载。