分页显示数据(spring与mybatis集成版)

Hi ~o(* ̄▽ ̄*)ブ大家好呀! 我是【小阿飞_】

本期文章中我将用spring与mybatis集成并结合spring中AOP的相关技术,实现在控制台分页显示出数据

来看看具体是怎么实现的叭

1. 引入依赖包

以下是制作这个功能可能会用到的依赖包,大家可以根据自己需要来进行引入


    UTF-8
    1.8
    1.8
    1.7.7
    1.7.7
    2.9.1
    3.2.0
  
  
    
      junit
      junit
      4.12
      test
    
    
      org.springframework
      spring-context
      5.3.18
    
    
      org.springframework
      spring-web
      5.3.18
    
   
      org.springframework
      spring-webmvc
      5.3.18
    
    
      org.springframework
      spring-orm
      5.3.18
    
    
      org.springframework
      spring-test
      5.3.18
    
    
      org.springframework
      spring-aspects
      5.3.18
    
    
      org.mybatis
      mybatis-spring
      2.0.6
    
    
    
      org.apache.commons
      commons-dbcp2
      2.1.1
    
    
      org.apache.commons
      commons-pool2
      2.4.3
    
    
      org.mybatis
      mybatis
      3.5.6
    
    
      com.belerweb
      pinyin4j
      2.5.0
    
    
      org.projectlombok
      lombok
      1.18.22
      provided
    
    
    
    
      org.slf4j
      slf4j-api
      ${slf4j.version}
    
    
      org.slf4j
      jcl-over-slf4j
      ${jcl-over-slf4j.version}
      runtime
    
    
      ch.qos.logback
      logback-classic
      1.2.10
    
    
    
      org.apache.logging.log4j
      log4j-slf4j-impl
      ${log4j2.version}
      
        
          slf4j-api
          org.slf4j
        
      
    
    
    
      org.apache.logging.log4j
      log4j-api
      ${log4j2.version}
    
    
      org.apache.logging.log4j
      log4j-core
      ${log4j2.version}
    
    
    
      org.apache.logging.log4j
      log4j-web
      ${log4j2.version}
      runtime
    
    
    
      com.lmax
      disruptor
      ${log4j2.disruptor.version}
    
    
      mysql
      mysql-connector-java
      5.1.44
    
    
    
      com.github.pagehelper
      pagehelper
      5.1.2
    
    
      javax.servlet
      javax.servlet-api
      4.0.1
      provided
    
  

2. 集成配置文件

集成配置文件

applicationContext-base.xml用于spring与mybatis的集成,将文件放到resource目录下,文件代码如下(对应的作用请仔细看注释)



    
    
    
    
    

    
    
    
    
    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    
    
    
    
        
        
        
        
        
        
        
        
            
                
                    
                        
                        
                            helperDialect=mysql
                        
                    
                
            
        
    
    
    
    
        
        
        
        
    
    
    
    
    
    
        
    
    
    

备注:集成配置文件

1、开启注解式开发

1、 context:annotation-config/: 用于激活那些已经在spring容器里注册过的bean上面的注解,使用该注解相当于传统方式:





context:annotation-config/是配置上述注解的简化配置方式,但是如果我们需要使用@Component, @Service, @Controller等注解则只使用该配置无效。该注解只能对已经注册的bean起作用,对于还没有在spring容器中注册的bean并不起作用。

2、:该配置除了具有上面提到的context:annotation-config/注解提到的作用,同时还具有自动将带有@Component, @Service, @Controller,@Repository等注解的对象注册到spring容器中的作用。如果同时使用了这两个配置则context:annotation-config/配置忽略,不会重复注册。对于使用注解式开发该配置必须有。

3、开启注解式事务
: manager属性指定的是事务管理器,配置详见完整上面的配置文件

2、spring引入外部配置文件




3、数据库连接池

dbcp连接池,配置详见上面的配置文件

4、spring整合mybatis

sqlSessionFactory的配置,配置详见上面的配置文件

5、自动代理

:自动为spring容器中那些配置@aspectJ切面的bean创建代理。依然由AnnotationAwareAspectJAutoProxyCreator进行自动代理的创建,该配置用来隐藏具体的实现细节

有一个proxy-target-class属性,当该属性默认为false,表示使用jdk动态代理来织入增强,如果为true则表示使用CGLIB进行织入增强,不管配置的是true还是false,当目标类没有声明接口时,spring都会自动使用CGLIB进行织入增强

3. 注解式开发的几个常用注解

注解 作用
@Respository 用于注解数据库访问层的bean
@Service 用于注解业务层bean
@Controller 用于访问控制层bean
@Component 用于注解一个组件,可以替代上几个注解,但从可读性上上面的几个更好理解其作用
@Autowired 依赖注入的注解,spring的特有实现,默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false),如果我们想使用名称装配可以结合@Qualifier注解进行使用。示例:@Autowired() @Qualifier("baseDao")
@Resource 这个注解属于J2EE,默认按名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果name属性一旦指定,就只会按照名称进行装配,示例:@Resource(name="baseDao")
@Transactional 注解方法或类需要进行事务控制,使用该注解需要在spring中配置开启事务注解,并配置事务管理器
@Scope 控制对象在spring容器中的生命周期,默认为singleton,其他的值有prototype, request, session, global session

4. spring-test

依赖包


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

相关的注解

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

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

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

示例:

5. 使用拦截器简化分页实现

先完成好实体类、mapper层、service层相关的简单代码操作

实体类:学生类(略)

mapper层

public interface IStudentMapper {
    List listStuntent(Student student);
}



    
         select id, sname, score, clazz from student
    
    

service层

接口中的代码:略,实现类

@Service
public class StudentService implements IStudentService {
    @Autowired
    private IStudentMapper studentMapper;
    //service层才传入分页对象
    @Override
    public List listStudentPage(Student student, PageBean pageBean) {
        //原来有分页代码1
        return studentMapper.listStuntent(student);
        //原来有分页代码2
        //现在封装到了aop中,环绕通知
    }
}

拦截器中封装分页代码

@Component
@Aspect
public class PagingAOP {
    //ProceedingJoinPoint环绕通知特有参数
    @Around("execution(* com.zking..*.*Page(..))")  //切入点
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        //拿到所拦截的方法的所有参数
        Object[] args = joinPoint.getArgs();
        //局部变量初始化
        PageBean pageBean = null;
        for (Object arg : args) {
            //如果有需要分页的参数,instanceof判断类型
            if(arg instanceof PageBean){
                pageBean = (PageBean)arg;
                //如果需要分页
                if(pageBean !=null && pageBean.isPagination()){
                    //设置当前页数和每页显示数
                    PageHelper.startPage(pageBean.getPage(), pageBean.getRows());
                }
            }
        }
        //执行目标方法
        Object rs = joinPoint.proceed();
        //设置分页总数
        if(pageBean !=null && pageBean.isPagination()){
            PageInfo info = new PageInfo((List)rs);
            pageBean.setTotal(Long.valueOf(info.getTotal()).intValue());
        }
        return rs;
    }
}

测试类代码

分页显示数据(spring与mybatis集成版)_第1张图片

测试结果

分页显示数据(spring与mybatis集成版)_第2张图片

总结:spring常用解

  • @Service用于标注业务层组件
  • @Controller用于标注控制层组件(如struts中的action)
  • @Repository用于标注数据访问组件,即DAO组件
  • @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
  • @Aspect:切面
  • @Pointcut:定义需要切面的地方,表达式参数(https://blog.csdn.net/elim168/article/details/78150438)
  • @annotation:当执行的方法上拥有指定的注解时生效。
  • @After
  • @Before
  • @Around

你可能感兴趣的:(WebJava,mybatis,spring,java)