Mybatis与Spring集成

目录

一.Spring整合Mybatis

1.什么是Spring整合Mybatis

新建一个ssm

​编辑 

 导入pom依赖

 导入generatorConfig.xml

导入Spring-context.xml文件 

导入Spring-mybatis.xml文件

 自动生成Bookmapper.xml和Bookmapper文件

 编写接口类:Bookbiz

编写接口实现类 

编写实体类

​编辑 

编写接口测试类

测试结果 

二.aop整合pageHelper分页插件

1.什么是aop整合pageHelper分页插件

编写分页查询 

​编辑

编写PageBean 

编写PagerAspect类

测试结果


一.Spring整合Mybatis

1.什么是Spring整合Mybatis

Spring整合MyBatis是一种常用的Java后端开发技术,用于将Spring框架与MyBatis框架进行集成,实现更方便和高效地操作数据库。

Spring框架是一个功能强大的轻量级应用程序开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等特性,可以帮助开发者更好地管理和组织应用程序的组件。

MyBatis是一个优秀的持久层框架,它通过XML或注解的方式,将SQL语句与Java对象之间的映射关系定义起来,提供了灵活的数据访问和数据库操作功能。

Spring整合MyBatis的主要目的是通过Spring的依赖注入和事务管理等特性,简化MyBatis的配置和代码编写。通过集成,可以将MyBatis作为Spring的一个Bean来管理,通过注入的方式获取MyBatis的SqlSessionFactory,从而简化数据库操作的配置和调用。

具体来说,Spring整合MyBatis的步骤包括以下几个方面:

  1. 引入相关的依赖,包括Spring框架和MyBatis框架的依赖;
  2. 配置Spring的配置文件,包括定义数据源、事务管理器等Bean,并引入MyBatis的配置文件;
  3. 配置MyBatis的配置文件,定义数据库连接信息、映射文件等;
  4. 编写DAO接口和Mapper文件,定义数据库操作的接口和SQL语句;
  5. 在Spring的配置文件中配置MyBatis的Mapper扫描和注入。

通过Spring整合MyBatis,开发者可以充分利用两个框架的优势,实现数据库操作的便捷和高效。

新建一个ssm

Mybatis与Spring集成_第1张图片 

 导入pom依赖




  4.0.0

  com.zking
  yxssm
  1.0-SNAPSHOT
  war

  yxssm Maven Webapp
  
  http://www.example.com

  
    UTF-8
    1.8
    1.8
    3.7.0

    
    
    5.0.2.RELEASE
    
    3.4.5
    
    5.1.44
    
    5.1.2
    
    1.3.1
    
    2.1.1
    2.4.3
    
    2.9.1
    
    4.12
    4.0.0
    1.18.2
  


  
    
    
      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}
    

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

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

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

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

  

  
    yxssm

    
      
      
        src/main/java
        
          **/*.xml
        
      
      
      
        src/main/resources
        
          jdbc.properties
          *.xml
        
      
    

      
        
          org.apache.maven.plugins
          maven-compiler-plugin
          ${maven.compiler.plugin.version}
          
            ${maven.compiler.source}
            ${maven.compiler.target}
            ${project.build.sourceEncoding}
          
        
        
          org.mybatis.generator
          mybatis-generator-maven-plugin
          1.3.2
          
            
            
              mysql
              mysql-connector-java
              ${mysql.version}
            
          
          
            true
          
        

        
          maven-clean-plugin
          3.1.0
        
        
        
          maven-resources-plugin
          3.0.2
        
        
          maven-compiler-plugin
          3.8.0
        
        
          maven-surefire-plugin
          2.22.1
        
        
          maven-war-plugin
          3.2.2
        
        
          maven-install-plugin
          2.5.2
        
        
          maven-deploy-plugin
          2.8.2
        
      
  

 导入generatorConfig.xml




    
    

    
    

    
    
        
        
            
             
        

        
        

        
        
            
            
        

        
        
        
        
            
            
            
            
            
            
            
            
        

        
        
            
            
        

        
        
        
        
        
            
            
        

        
        
        
        
        
        
        
        
        
        
        
        
        

        

导入Spring-context.xml文件 




    
    

导入Spring-mybatis.xml文件



    
    
    
    
    

    

    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    

    
    
    
        
        
        
        
        
        
        
        
            
                
                    
                        
                            helperDialect=mysql
                        
                    
                
            
        
    

    
    
    
        
        
        
        
    

    
        
    
    
    

 自动生成Bookmapper.xml和Bookmapper文件

注意:右边的mybatis-generator:generate,点一次就OK了,点了两次他就会生成两个Bookmapper.xml文件

Mybatis与Spring集成_第2张图片

 编写接口类:Bookbiz

package com.zking.biz;

import com.zking.model.Book;

/**
 * @author bing人
 * @site
 * @company xy集团
 * @create 2023-08-25 14:57
 */
public interface BookBiz {
    int deleteByPrimaryKey(Integer bid);

    int insert(Book record);

    int insertSelective(Book record);

    Book selectByPrimaryKey(Integer bid);

    int updateByPrimaryKeySelective(Book record);

    int updateByPrimaryKey(Book record);
}

编写接口实现类 

package com.zking.biz.impl;

import com.zking.biz.BookBiz;
import com.zking.mapper.BookMapper;
import com.zking.model.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author bing人
 * @site
 * @company xy集团
 * @create 2023-08-25 15:00
 */
@Service
public class BookBizImpl implements BookBiz {
    @Autowired
    private BookMapper bookMapper;
    @Override
    public int deleteByPrimaryKey(Integer bid) {
        return bookMapper.deleteByPrimaryKey(bid);
    }

    @Override
    public int insert(Book record) {
        return bookMapper.insert(record);
    }

    @Override
    public int insertSelective(Book record) {
        return bookMapper.insertSelective(record);
    }

    @Override
    public Book selectByPrimaryKey(Integer bid) {
        return bookMapper.selectByPrimaryKey(bid);
    }

    @Override
    public int updateByPrimaryKeySelective(Book record) {
        return updateByPrimaryKeySelective(record);
    }

    @Override
    public int updateByPrimaryKey(Book record) {
        return bookMapper.updateByPrimaryKey(record);
    }
}

编写实体类

Mybatis与Spring集成_第3张图片 

 

编写接口测试类

package com.zking.biz.impl;

import com.zking.biz.BookBiz;
import com.zking.model.Book;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import static org.junit.Assert.*;

/**
 * @author bing人
 * @site
 * @company xy集团
 * @create 2023-08-25 15:06
 */
//自动加载上下文
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring-context.xml"})
public class BookBizImplTest {
    @Autowired
    private BookBiz bookBiz;

    @Before
    public void setUp() throws Exception {
    }

    @After
    public void tearDown() throws Exception {
    }

    @Test
    public void deleteByPrimaryKey() {
        this.bookBiz.deleteByPrimaryKey(41);
    }

    @Test
    public void insert() {
    }

    @Test
    public void insertSelective() {
    }

    @Test
    public void selectByPrimaryKey() {
        System.out.println(this.bookBiz.selectByPrimaryKey(41));
    }

    @Test
    public void updateByPrimaryKeySelective() {
    }

    @Test
    public void updateByPrimaryKey() {
    }
}

测试结果 

Mybatis与Spring集成_第4张图片

Mybatis与Spring集成_第5张图片 Mybatis与Spring集成_第6张图片

二.aop整合pageHelper分页插件

1.什么是aop整合pageHelper分页插件

AOP整合PageHelper分页插件的目的是为了在应用程序中实现自动分页的功能,减少代码的重复编写和维护工作。通过AOP的方式,可以在方法执行前拦截方法调用,并在拦截器中加入PageHelper的分页逻辑。

具体来说,AOP整合PageHelper分页插件的步骤如下:

  1. 引入相关依赖,包括Spring框架、MyBatis框架、PageHelper插件等;
  2. 配置PageHelper的属性,如数据库类型、分页参数等;
  3. 编写AOP切面类,使用AOP的注解或者XML配置定义切面逻辑;
  4. 在切面中拦截需要分页的方法,并使用PageHelper.startPage()方法来进行分页设置;
  5. 在DAO层的方法上添加分页查询相关的注解,如@Select、@SelectProvider等。

通过AOP整合PageHelper分页插件,可以简化分页查询的代码编写,使得业务逻辑更加清晰和可维护。同时,该方式也可以方便地对分页参数进行统一管理和配置。

编写分页查询 

Mybatis与Spring集成_第7张图片

编写PageBean 

package com.zking.utils;

import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.util.Map;

public class PageBean implements Serializable {

	private static final long serialVersionUID = 2422581023658455731L;

	//页码
	private int page=1;
	//每页显示记录数
	private int rows=10;
	//总记录数
	private int total=0;
	//是否分页
	private boolean isPagination=true;
	//上一次的请求路径
	private String url;
	//获取所有的请求参数
	private Map map;
	
	public PageBean() {
		super();
	}
	
	//设置请求参数
	public void setRequest(HttpServletRequest req) {
		String page=req.getParameter("page");
		String rows=req.getParameter("rows");
		String pagination=req.getParameter("pagination");
		this.setPage(page);
		this.setRows(rows);
		this.setPagination(pagination);
		this.url=req.getContextPath()+req.getServletPath();
		this.map=req.getParameterMap();
	}
	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public Map getMap() {
		return map;
	}

	public void setMap(Map map) {
		this.map = map;
	}

	public int getPage() {
		return page;
	}

	public void setPage(int page) {
		this.page = page;
	}
	
	public void setPage(String page) {
		if(null!=page&&!"".equals(page.trim()))
			this.page = Integer.parseInt(page);
	}

	public int getRows() {
		return rows;
	}

	public void setRows(int rows) {
		this.rows = rows;
	}
	
	public void setRows(String rows) {
		if(null!=rows&&!"".equals(rows.trim()))
			this.rows = Integer.parseInt(rows);
	}

	public int getTotal() {
		return total;
	}

	public void setTotal(int total) {
		this.total = total;
	}
	
	public void setTotal(String total) {
		this.total = Integer.parseInt(total);
	}

	public boolean isPagination() {
		return isPagination;
	}
	
	public void setPagination(boolean isPagination) {
		this.isPagination = isPagination;
	}
	
	public void setPagination(String isPagination) {
		if(null!=isPagination&&!"".equals(isPagination.trim()))
			this.isPagination = Boolean.parseBoolean(isPagination);
	}
	
	/**
	 * 获取分页起始标记位置
	 * @return
	 */
	public int getStartIndex() {
		//(当前页码-1)*显示记录数
		return (this.getPage()-1)*this.rows;
	}
	
	/**
	 * 末页
	 * @return
	 */
	public int getMaxPage() {
		int totalpage=this.total/this.rows;
		if(this.total%this.rows!=0)
			totalpage++;
		return totalpage;
	}
	
	/**
	 * 下一页
	 * @return
	 */
	public int getNextPage() {
		int nextPage=this.page+1;
		if(this.page>=this.getMaxPage())
			nextPage=this.getMaxPage();
		return nextPage;
	}
	
	/**
	 * 上一页
	 * @return
	 */
	public int getPreivousPage() {
		int previousPage=this.page-1;
		if(previousPage<1)
			previousPage=1;
		return previousPage;
	}

	@Override
	public String toString() {
		return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", isPagination=" + isPagination
				+ "]";
	}


}

编写PagerAspect类

package com.zking.aspect;

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

/**
 * @author bing人
 * @site
 * @company xy集团
 * @create 2023-08-25 16:33
 */
@Aspect //代表当前类为切面类
@Component //代表当前类交给spring进行管理
public class PagerAspect {
    @Around("execution(* *..*Biz.*Pager(..))")
    public Object invoke(ProceedingJoinPoint args) throws Throwable{

        PageBean pageBean=null;
        //获取目标方法中的所有参数
        Object[] ags = args.getArgs();
        for (Object param : ags) {
            if(param instanceof PageBean){
            pageBean = (PageBean) param;
            break;
            }
        }
        if(pageBean !=null && pageBean.isPagination())
            PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
        //执行目标方法
        Object lst = args.proceed();
        if(pageBean !=null && pageBean.isPagination()){
            PageInfo info = new PageInfo((List) lst);
            pageBean.setTotal((int)info.getTotal());
        }
        return lst;
    }

}

测试结果

Mybatis与Spring集成_第8张图片

 

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