Spring结合Mybatis并加入通知(附ssm完整的pom.xml)
配置Spring结合MyBatis
- 创建目录结构如图
- 配置spring-mybatis的核心配置文件applicationContext.xml
约束
<?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
applicationContext的约束
写配置数据库连接信息的文件,conMySQL.properties
连接数据库最少需要4个信息username,password,url,driver
在applicationContext.xml里引入数据源(这里使用c3p0的连接池)
<!--配置数据源--> <context:property-placeholder location="classpath:conMySQL.properties"></context:property-placeholder> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="jdbcUrl" value="${jdbc.url}"></property> <property name="driverClass" value="${jdbc.driver}"></property> <property name="user" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean>
配置SqlSessionFactoryBean
查看SqlSessionBean的源码发现它可以几乎配置所有的Mybatis组件,同时也提供了对应的setter方法去设置他们
想要使用这个bean最少需要配置3个属性
dataSource : DataSource类型的bean,配置数据源
configLoaction : 配置mybatis的设置文件路径
mapperLocation : 配置映射后的mapper路径
<bean id="SqpSessonFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="configLocation" value="classpath:mybatis-config.xml"></property> <!--配置映射后的路径--> <property name="mapperLocations" value="classpath:mapper/*.xml"></property> </bean>
配置映射前的接口扫描路径
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.woqiyounai.dao"></property> </bean>
配置mybatis的设置文件
<?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> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> </configuration>
配置映射前后的文件
public class Role{
private int id;
private String note;
private String roleName;
/setter and getter/
}
public interface RoleMapper { /** * 查询所有 * @return */ List<Role> findAll(); }
<?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="com.woqiyounai.dao.RoleMapper"> <select id="findAll" resultType="com.woqiyounai.role.Role"> SELECT * FROM t_role_db </select> </mapper>
测试
@ContextConfiguration(locations = {"classpath:applicationContext.xml"}) @RunWith(SpringJUnit4ClassRunner.class) public class TestSM { @Autowired RoleMapper mapper; @Test public void testIt(){ System.out.println(mapper.findAll()); } }
使用Spring进行测试
加入通知
创建一个通知类
public class XmlAspect { public void doBefore(){ System.out.println("doBefore..."); } public void doAfter(){ System.out.println("doAfter..."); } public void doAfterThrowing(){ System.out.println("doAfterThrowing..."); } public void doAfterReturning(){ System.out.println("doAfterReturning..."); } }
在applicationConText.xml里进行配置
<aop:config> <aop:pointcut id="pt" expression="execution(* com.woqiyounai.dao.*.*(..))"/> <aop:aspect ref="xmlAspect"> <aop:before method="doBefore" pointcut-ref="pt"></aop:before> </aop:aspect> </aop:config>
这样在你使用指定包下的方法就会执行对应的方法
执行顺序如下
Before
方法
After
(异常有无?)(有)AfterThrowing (无)AfterReturning
环绕通知即包括了以上所有的流程
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.woqiyounai</groupId> <artifactId>ssm-crud</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <!--引入项目依赖包--> <dependencies> <!--Spring--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.3.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>4.3.7.RELEASE</version> </dependency> <!--单元测试--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.3.7.RELEASE</version> </dependency> <!--MyBatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency> <!--MyBatis逆向工程--> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version> </dependency> <!--MySQL--> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.41</version> </dependency> <!--其他--> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies> </project>