mybatis与spring集成

mybatis与spring的整合过程:

(1)添加相关依赖

注:spring 5.0.1.RELEASE有冲突

a、 添加spring相关依赖(版本:5.0.2.RELEASE)

        
        
            org.springframework
            spring-core
            ${spring.version}
        
        
            org.springframework
            spring-beans
            ${spring.version}
        
        
            org.springframework
            spring-context
            ${spring.version}
        
        
            org.springframework
            spring-orm
            ${spring.version}
        
        
            org.springframework
            spring-tx
            ${spring.version}
        
        
            org.springframework
            spring-aspects
            ${spring.version}
        
        
            org.springframework
            spring-web
            ${spring.version}
        

        
            org.springframework
            spring-test
            ${spring.version}
        

b、添加mybatis相关依赖(mybatis版本:3.4.5、pagehelper版本:5.1.2、mysql版本:5.1.44)

        
        
            org.mybatis
            mybatis
            ${mybatis.version}
        
        
        
            mysql
            mysql-connector-java
            ${mysql.version}
        
        
        
            com.github.pagehelper
            pagehelper
            ${pagehelper.version}
        

c、spring整合mybatis(版本:1.3.1)

        
        
            org.mybatis
            mybatis-spring
            ${mybatis.spring.version}
        

d、添加dbcp2连接池(commons-dbcp2版本:2.1.1、commons-pool2版本:2.4.3)

        
            org.apache.commons
            commons-dbcp2
            ${commons.dbcp2.version}
            
                
                    commons-pool2
                    org.apache.commons
                
            
        
        
            org.apache.commons
            commons-pool2
            ${commons.pool2.version}
        

e、添加日志配置(版本:2.9.1)

        
        
        
        
            org.slf4j
            slf4j-api
            ${slf4j.version}
        
        
            org.slf4j
            jcl-over-slf4j
            ${slf4j.version}
            runtime
        

        
        
            org.apache.logging.log4j
            log4j-api
            ${log4j2.version}
        
        
            org.apache.logging.log4j
            log4j-core
            ${log4j2.version}
        
        
        
            org.apache.logging.log4j
            log4j-slf4j-impl
            ${log4j2.version}
            
                
                    slf4j-api
                    org.slf4j
                
            
        
        
        
            org.apache.logging.log4j
            log4j-web
            ${log4j2.version}
            runtime
        

        
        
            com.lmax
            disruptor
            ${log4j2.disruptor.version}
        

f、其他(junit版本:4.12、javax.servlet-api版本:4.0.0、lombok版本:1.18.2)

        
        
            junit
            junit
            ${junit.version}
            test
        
        
            javax.servlet
            javax.servlet-api
            ${servlet.version}
            provided
        
        
            org.projectlombok
            lombok
            ${lombok.version}
            provided
        

(2)创建spring配置文件applicationContext.xml

a、开启注解式开发

   
   
   
   

b、引入外部jdbc配置文件

c、配置dbcp2数据库连接池

    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    

d、spring和mybatis整合

    
    
    
        
        
        
        
        
        
        
        
            
                
                    
                        
                            helperDialect=mysql
                        
                    
                
            
        
    

    
    
    
        
        
        
        
    

e、注解式事物配置

f、开启动态代理

(3)注解式开发

mybatis的开发时,具体的实现类中set、get方法,均由spring的注解代替(repository,service、component),spring的注入,也由spring的注解代替(autowise/resource)

   @Repository:将DAO类声明为Bean
   @Service:通常作用在业务层
   @Constroller:通常作用在控制层,将在Spring MVC中使用
   @Component:是一个泛化的概念,仅仅表示spring中的一个组件(Bean),可以作用在任何层次
   @Scope:模式声明(singleton|prototype)
   @Autowired:将自动在代码上下文与其匹配(默认是类型匹配)的Bean,并自动注入到相应的地方
   @Resource:
   1)@Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配
   2)指定了name或者type则根据指定的类型去匹配bean
   3)指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错

   问题:@Autowired和@Resource两个注解的区别:
   1)@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配
   2)@Autowired是Spring的注解,@Resource是J2EE的注解,这个看一下导入注解的时候这两个注解的包名就一清二楚了
   Spring属于第三方的,J2EE是Java自己的东西,因此,建议使用@Resource注解,以减少代码和Spring之间的耦合。

(4)Spring Test+Junit完美组合

a、在工程的pom文件中增加spring-test的依赖

    
       org.springframework
       spring-test
       ${spring.version}
     

b、创建BaseTestCase,并在该类上加上两个注解

   @RunWith(SpringJUnit4ClassRunner.class)
   @ContextConfiguration(locations={"classpath:applicationContext.xml"})

c、使用idean的junit插件(JUnitGenerator V2.0)生成测试用例

   注1:还需要修改相关配置,详情参考资料:“IDEA Junit4配置.mht”
   注2:快捷键,Ctrl + Shift + T

d、在执行单元测试时,为了避免产生脏数据,可将测试单元设置成事务回滚

   @Rollback(value = true|false)//true回滚事务,false提交事务
   @Transactional(transactionManager = "transactionManager")

e、具体的测试类继承BaseTestCase类

(5)修改分页代码

使用AOP编程解决分页代码重复的问题,新建PageBeanAspect类:

package com.zking.ssm.util;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
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;

/**
 * @author LJ
 * @site www.lijun.com
 * @create 2018-12-18 16:35
 */
@Component
@Aspect
public class PagerAspect {

    /**
     * “*”代表方法返回值不限
     * “*..”代表包名不限(不论多少层级包)
     * “*Service”代表以service结尾的接口
     * “*Pager”代表以page结尾的方法
     * “(..)”代表方法参数不限
     * @param args
     * @return
     * @throws Throwable
     */
    @Around("execution(* *..*Service.*Pager(..))")
    public Object invoke(ProceedingJoinPoint args) throws Throwable {
        Object[] params = args.getArgs();
        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 proceed = args.proceed(params);

        if(pageBean !=null && pageBean.isPagination()){
           PageInfo pageInfo = new PageInfo((List)proceed);
           pageBean.setTotal(pageInfo.getTotal()+"");
        }
        return proceed;
    }
}

语法结构:execution(方法修饰符  方法返回值  方法所属类 匹配方法名 (  方法中的形参表 )  方法申明抛出的异常  )
"*"  :代表一个任意类型的参数;
“..”:代表零个或多个任意类型的参数。

你可能感兴趣的:(SSM)