Spring(五)使用Spring集成MyBatis
2015-02-02 21:58
771 查看
在实际开发中,整合框架中的ORM框架使用的不一定是Hibernate,MyBatis也是一个轻量级、灵活的框架,也是占有这一定的分量,所以在这里记录一下Spring集成MyBatis的配置步骤,方便日后的巩固复习。
需求:
一个简单的用户类:User{id, name,password}
①根据Id查询用户对象
②添加一条用户记录
(2)spring的jar包(http://repo.springsource.org/libs-release-local/org/springframework/spring/)
(3)两者整合之后的jar包 mybatis-spring-1.2.2.jar(同(1))
当然,插入一条数据也是成功的。以上就是spring+mybatis的基本配置,再整合Struts2的话相对而言就比较简单了,同SSH的配置一致。
需求:
一个简单的用户类: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的配置一致。
相关文章推荐
- Mybatis3.2.1使用例四:SqlSession方式集成Spring、不使用DAO辅助类
- 使用Eclipse的Generator MyBatis/iBatis Artifacts插件自动生成代码,与spring集成
- springboot入门(三)-- springboot集成mybatis及mybatis generator工具使用
- 使用SpringBoot搭建小型项目,集成mybatis,redis,swagger2,并部署在外部容器中。
- Mybatis3.2.1使用例五:SqlSession方式集成Spring、使用DAO辅助类
- Spring(五)使用Spring集成MyBatis
- (二十)SpringBoot之集成mybatis:使用mybatis注解
- Spring Boot(1)集成MyBatis的简单使用
- spring 集成mybatis使用二级缓存
- 10.Mybatis初级使用-Spring集成mybatis
- 使用Eclipse的Generator MyBatis/iBatis Artifacts插件自动生成代码,与spring集成
- (二十一)SpringBoot之集成mybatis:使用mybatis xml
- Mybatis3.2.1使用例二:Mapper方式集成Spring、注解提供SQL
- AAA spring 集成mybatis使用二级缓存 (下篇)
- spring-boot 集成mybatis配置使用
- eclipse 使用maven 集成spring+springMVC+mybatis
- dubbox在异构系统中的使用-集成mybatis全注解方式到spring
- 从0开始学习SpringCould(5)--SpringBoot 集成Mybatis使用Druid数据源
- Spring Boot 使用Oracle集成Mybatis,驼峰映射(下划线)问题
- Mybatis集成Spring MVC,使用Spring test进行测试