目录
1.1 添加spring相关依赖(5.0.2.RELEASE)🎁🎁🎁🎁🎁🎁
注:使用mybatis-generator插件,pom文件添加支持
2.创建spring配置文件applicationContext
4.1 在工程的pom文件中增加spring-test的依赖
4.2 创建BaseTestCase,并在该类上加上两个注解
4.3 使用idean的junit插件(JUnitGenerator V2.0)生成测试用例
4.4 在执行单元测试时,为了避免产生脏数据,可将测试单元设置成事务回滚
将mybatis与spring进行整合,主要解决的问题就是讲SqlSessionFactory对象交由spring来管理,所以,该整合只需要将SqlSessionFactory的对象生成器SqlSessionFactoryBean注册在spring容器中,再将其注入给Dao的实现类即可完成整合。实现spring与mybatis的整合常用的方式:扫描的Mapper动态代理。spring就像插线板一样,mybatis框架是插头,可以很容易的组合到一起。mybatis插头插入spring插线板就是一个整体。
注:spring 5.0.1.RELEASE有冲突
spring-core
spring-beans
spring-context
spring-orm
spring-tx
spring-aspects
spring-web
mybatis核心:mybatis(3.4.5)
Mybatis分页:pagehelper(5.1.2)
mybatis-spring
commons-dbcp2(2.1.1)
commons-pool2(2.4.3)
log4j-core
log4j-api
log4j-web
junit(4.12)
javax.servlet-api(4.0.0)
注:使用mybatis-generator插件,pom文件添加支持
- 开启注解
-
-
- <context:annotation-config/>
-
- <context:component-scan base-package="com.zking.oa"/>
<context:property-placeholder location="classpath:jdbc.properties"/>
- <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
- destroy-method="close">
- <property name="driverClassName" value="${jdbc.driver}"/>
- <property name="url" value="${jdbc.url}"/>
- <property name="username" value="${jdbc.username}"/>
- <property name="password" value="${jdbc.password}"/>
-
- <property name="initialSize" value="10"/>
-
- <property name="maxTotal" value="100"/>
-
- <property name="maxIdle" value="50"/>
-
- <property name="minIdle" value="10"/>
-
-
- <property name="maxWaitMillis" value="-1"/>
- bean>
-
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
-
- <property name="dataSource" ref="dataSource"/>
-
- <property name="mapperLocations" value="classpath*:com/zking/ssm/**/mapper/*.xml"/>
-
- <property name="typeAliasesPackage" value="com/zking/ssm/**/model"/>
-
- <property name="plugins">
- <array>
- <bean class="com.github.pagehelper.PageInterceptor">
- <property name="properties">
- <value>
- helperDialect=mysql
- value>
- property>
- bean>
- array>
- property>
- bean>
-
-
-
- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
-
-
- <property name="basePackage" value="com/zking/ssm/**/mapper"/>
- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
- bean>
- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource" />
- bean>
- <tx:annotation-driven transaction-manager="transactionManager" />
<aop:aspectj-autoproxy/>
@Repository:将Mapper类声明为Bean
@Service:通常作用在业务层
@Controller:通常作用在控制层,将在Spring MVC中使用
@Component:是一个泛化的概念,仅仅表示spring中的一个组件(Bean),可以作用在任何层次@Scope:模式声明(singleton|prototype)
@Autowired:将自动在Spring上下文与其匹配(默认是类型匹配)的Bean,并自动注入到相应的地方
@Resource:后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配,任何一个不匹配都将报错
@Transactional
注:个人感觉注解式事务比以前的声明式事务更加麻烦,要写的东西更多
1)@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配
2)@Autowired是Spring的注解,@Resource是J2EE的注解,这个看一下导入注解的时候这两个注解的包名就一清二楚了
Spring属于第三方的,J2EE是Java自己的东西,因此,建议使用@Resource注解,以减少代码和Spring之间的耦合。
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-testartifactId>
- <version>${spring.version}version>
- dependency>
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration(locations={"classpath:applicationContext.xml"})
注1:还需要修改相关配置,详情参考资料:“IDEA Junit4配置.mht”
注2:快捷键,Ctrl + Shift + T
- @Rollback(value = true|false)//true回滚事务,false提交事务
- @Transactional(transactionManager = "transactionManager")

注意:记得开动态代理
使用AOP编程解决分页代码重复的问题
@Around("execution(* *..*Service.*pager(..))")
public Object invoke(ProceedingJoinPoint args)
语法结构:execution(方法修饰符 方法返回值 方法所属类 匹配方法名 ( 方法中的形参表 ) 方法申明抛出的异常 )
"*" :代表一个任意类型的参数;
“..”:代表零个或多个任意类型的参数。

- package com.dzl.aspect;
- import com.github.pagehelper.PageHelper;
- import com.github.pagehelper.PageInfo;
- import com.dzl.util.PageBean;
- import org.aspectj.lang.ProceedingJoinPoint;
- import org.aspectj.lang.annotation.Around;
- import org.aspectj.lang.annotation.Aspect;
- import org.springframework.stereotype.Component;
- import java.util.List;
-
- @Component
- @Aspect
- public class PagerAspect {
- /*定义规则*/
- @Around("execution(* *..*Service.*Pager(..))")
- public Object invoke(ProceedingJoinPoint args) throws Throwable {
- Object[] params = args.getArgs();//argument 参数的缩写
- PageBean pageBean = null;
- for (Object param : params) {
- if(param instanceof PageBean){
- pageBean = (PageBean)param;
- break;
- }
- }
-
- if(pageBean != null && pageBean.isPagination()){
- PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
- }
-
- Object list = args.proceed(params);
-
- if(null != pageBean && pageBean.isPagination()){
- PageInfo pageInfo = new PageInfo((List) list);
- pageBean.setTotal(pageInfo.getTotal()+"");
- }
- return list;
- }
- }
- @Test
- public void testPager() {
- System.out.println("分页--");
- Map map = new HashMap();
- map.put("bname","圣墟");
- // PageBean pageBean = new PageBean();
- // pageBean.setPage(2);
- // 不分页
- // pageBean.setPagination(false);
- List
- System.out.println(m);
- }
public List
- @Test
- public void testPager() {
- System.out.println("分页--");
- Map map = new HashMap();
- map.put("bname","圣墟");
- // PageBean pageBean = new PageBean();
- // pageBean.setPage(2);
- // 不分页
- // pageBean.setPagination(false);
- List
- System.out.println(m);
- }

注:dbcp是apache上的一个java 连接池项目
现在分成了3个大版本,不同的版本要求的JDK不同:
DBCP 2 compiles and runs under Java 7 only (JDBC 4.1)
DBCP 1.4 compiles and runs under Java 6 only (JDBC 4)
DBCP 1.3 compiles and runs under Java 1.4-5 only (JDBC 3)