一、简介
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); } }