spring整合myBatis
一、简介
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
两个重要模块:Spring 面向方面编程(AOP)和控制反转 (IOC) 容器。
控制反转模式(也称作依赖性介入)的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。
容器 (在 Spring 框架中是 IOC 容器) 负责将这些联系在一起。在典型的 IOC 场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,决定什么时间调用方法。
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及
结果集的检索。
MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java
对象)映射成数据库中的记录。
将创建SqlsessionFactory交给Spring。
二.实例
引入jar包:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.0</version>
</dependency>
1.创建实体类
package cn.happy.pojo;
public class Topic {
private Integer tid;
private String tname;
public Integer getTid() {
return tid;
}
public void setTid(Integer tid) {
this.tid = tid;
}
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
}
2.创建dao层
public interface ITopicDao {
/*
* 添加主题的方法
* */
public int addTopic(Topic topic);
3.创建ITopicDao.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">
<mapper namespace="cn.happy.dao.ITopicDao">
<insert id="addTopic" >
insert into topic (tname) values (#{tname});
</insert>
</mapper>
4.创建service层和他的实现类
public interface ITopicService {
/*
* 添加主题的方法
* */
public int addTopic(Topic topic);
}
ITopicServiceImpl
public class TopicServiceImpl implements ITopicService {
ITopicDao dao;
public int addTopic(Topic topic) {
return dao.addTopic(topic);
}
public ITopicDao getDao() {
return dao;
}
public void setDao(ITopicDao dao) {
this.dao = dao;
}
}
5.创建配置文件
01.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">
<!--通过这个配置文件,完成mybatis与数据库的连接-->
<configuration>
<!-- 引入jdbc.properties-->
<!-- <properties resource="jdbc.properties"/>-->
<typeAliases>
<package name="cn.happy.pojo"></package>
</typeAliases>
<mappers>
<package name="cn.happy.dao"></package>
</mappers>
</configuration>
02.jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/newssystem jdbc.username=root
03.spring的配置文件
采用MapperScannerConfigurer,它将会查找类路径下的映射器并自动将它们创建成MapperFactoryBean。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
">
<!--1.识别jdbc.properties文件-->
<context:property-placeholder location="jdbc.properties"></context:property-placeholder>
<!--工厂配置-->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!--大配置文件-->
<property name="configLocation" value="classpath:MyBatis-config.xml"></property>
</bean>
<!--配置数据源-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
</bean>
<!--dao(只需提供接口不需提供实现类 ) 映射文件的扫描器可以动态的在内存中构建接口实现类,代理对象-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.happy.dao"></property>
<property name="sqlSessionFactoryBeanName" value="sessionFactory"></property>
</bean>
<!--service-->
<bean id="topicService" class="cn.happy.service.impl.TopicServiceImpl">
<property name="dao" ref="ITopicDao"></property>
</bean>
<!--事物管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--AspectJ 配置事物-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="StockException"/>
</tx:attributes>
</tx:advice>
<aop:config>
<!--定义切点-->
<aop:pointcut id="mypoint" expression="execution(* *..service.*.*(..))"></aop:pointcut>
<!--配置顾问-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="mypoint"></aop:advisor>
</aop:config>
</beans>
6.创建测试类
public class test01 {
@Test
public void testAdd() {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
ITopicService topicService = (ITopicService)ctx.getBean("topicService");
Topic topic = new Topic();
topic.setTname("白夜行");
topicService.addTopic(topic);
}
}

浙公网安备 33010602011771号