您的位置:首页 > 编程语言 > Java开发

Spring(五)使用Spring集成MyBatis

2015-02-02 21:58 771 查看
在实际开发中,整合框架中的ORM框架使用的不一定是Hibernate,MyBatis也是一个轻量级、灵活的框架,也是占有这一定的分量,所以在这里记录一下Spring集成MyBatis的配置步骤,方便日后的巩固复习。

需求:

一个简单的用户类:User{id, name,password}

①根据Id查询用户对象

②添加一条用户记录

1.创建java项目Spring_MyBatis

2.添加jar包:

(1)MyBatis的jar包(http://code.google.com/p/mybatis/

(2)spring的jar包(http://repo.springsource.org/libs-release-local/org/springframework/spring/

(3)两者整合之后的jar包 mybatis-spring-1.2.2.jar(同(1))

3.创建User类:

package com.wzj.entity;

public class User {
private int id;
private String name;
private String password;
//省略get、set

public User() {
}
public User(String name, String password) {
this.name = name;
this.password = password;
}
}

4.创建UserDao接口:

package com.wzj.dao;

import com.wzj.entity.User;

public interface UserDao {
//根据Id查询用户
User selectById(int id);
//插入一条用户记录
int insert(User user);
}

5.编写UserService业务类:

package com.wzj.service;

import com.wzj.dao.UserDao;
import com.wzj.entity.User;

public class UserService {
private UserDao userDao;
//省略get、set

public User getUserById(int id){
return userDao.selectById(id);
}
//不添加param注解的话,在sql语句中的#{名字}的名字一定要相同
public int addUser(@Param("user")User user){
return userDao.insert(user);
}
}

6.创建UserMapper.xml映射文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:与接口的完整名称对应 -->
<mapper namespace="com.wzj.dao.UserDao">
<!-- java的User类与数据库之间的映射关系 -->
<resultMap type="com.wzj.entity.User" id="userMap">
<result property="id" column="USERID"/>
<result property="name" column="USERNAME"/>
<result property="password" column="USERPWD"/>
</resultMap>

<!--
id:与UserDao 中的方法名一致
resultType:参数类型
resultMap:返回结果类型如何映射,引用上面的resultMap
-->
<select id="selectById" parameterType="int" resultMap="userMap">
select * from myuser1 where userid=#{id}
</select>

<insert id="insert" parameterType="com.wzj.entity.User" >
insert into myuser1 values(user_sequence.nextval,#{name},#{password})
</insert>
</mapper>

7.配置mybatis-config.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- MyBatis的配置文件中现在只是一个空壳,其他必要配置已放在spring的配置中 -->
<mappers>
<mapper resource="com/wzj/dao/UserMapper.xml"/>
</mappers>
</configuration>

8.配置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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/p http://www.springframework.org/schema/p/spring-p-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"> 
<!-- 1.配置数据源:DriverManagerDataSource -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
<property name="username" value="scott"/>
<property name="password" value="tiger"/>
</bean>
<!-- 2.配置MyBatis的SQLSession工厂:SqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml" />
<!-- <property name="mapperLocations" value="classpath:com/wzj/dao/*.xml"/> -->
<!-- 如果在sql映射文件中使用了别名,可以使用下面的方式扫描使用别名的类的包 -->
<!-- <property name="typeAliasesPackage" value="com.wzj.entity"/> -->
</bean>

<!-- 3. 配置dao的bean:使用MapperFactoryBean -->
<bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
<!-- 使用mapperInterface属性指定让spring实现的接口,而且只能是接口,不能是类 -->
<property name="mapperInterface" value="com.wzj.dao.UserDao" />
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>

<!-- 配置Service -->
<bean id="userService" class="com.wzj.service.UserService">
<property name="userDao" ref="userDao"/>
</bean>

<!--创建一个事务管理的bean:DataSourceTransactionManager-->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>

<!--配置事务管理的相关属性 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" propagation="REQUIRED" read-only="true" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!--织入增强 -->
<aop:config>
<aop:pointcut id="pt" expression="execution(* com.wzj.service.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="pt" />
</aop:config>

</beans>
注意:

(1)在sqlSessionFactory的bean中配置sql映射文件

如果sql映射文件过多,可以直接在sqlSessionFactory的bean中配置自动扫描sql映射文件,这时候就可以把mybatis-config.xml文件删除了,然后在spring中做出如下配置:

<!-- 2.配置MyBatis的SQLSession工厂:SqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 配置mapperLocations属性,让spring自动扫描sql映射文件 -->
<property name="mapperLocations" value="classpath:com/wzj/dao/*.xml"/>
</bean>

(2)配置spring自动实现数据映射接口,并自动装配

应用中必然有多个像UserDao一样的接口,如果接口多了的话,相应的配置的mapperInterface也会很多。可以使用MapperScannerConfigurer类来实现让spring扫描指定的包下的接口并实现,然后通过自动装配的设置让userDao自动装配到UserService的属性中,如下:

<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/p http://www.springframework.org/schema/p/spring-p-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"> 
<!--  省略其他  -->

<!-- spring自动扫描指定包下的接口并实现,不用再定义UserDao的bean -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="basePackage" value="com.wzj.dao"/>
</bean>

<!-- 配置Service,添加autowire属性,或者在UserService的userDao属性上使用@Autowire注解 -->
<bean id="userService" class="com.wzj.service.UserService" autowire="byName"/>

<!--  省略其他  -->
</beans>

9.编写Main方法(只是为了测试,web应用中不存在)

package com.wzj.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.wzj.entity.User;
import com.wzj.service.UserService;

public class Demo {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//获取UserService对象
UserService us=(UserService) context.getBean("userService");
User user=us.getUserById(1);
System.out.println(user.getName()+"\t"+user.getPassword());
}
}
输出结果:user-1admin

当然,插入一条数据也是成功的。以上就是spring+mybatis的基本配置,再整合Struts2的话相对而言就比较简单了,同SSH的配置一致。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: