上一篇文章讲了mybatis的动态SQL以及分页。今天将要分享的内容是MyBatis与Spring进行整合。
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)
l og4j-core
log4j-api
log4j-web
junit(4.12)
javax.servlet-api(4.0.0)
lombok(1.18.2)
注:使用mybatis-generator插件,pom文件添加支持
-
- <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.0modelVersion>
-
- <groupId>org.examplegroupId>
- <artifactId>pro_maven_02artifactId>
- <version>1.0-SNAPSHOTversion>
- <packaging>warpackaging>
-
- <name>pro_maven_02 Maven Webappname>
-
- <url>http://www.example.comurl>
-
- <properties>
- <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
- <maven.compiler.source>1.8maven.compiler.source>
- <maven.compiler.target>1.8maven.compiler.target>
- <maven.compiler.plugin.version>3.7.0maven.compiler.plugin.version>
-
-
-
- <spring.version>5.0.2.RELEASEspring.version>
-
- <mybatis.version>3.4.5mybatis.version>
-
- <mysql.version>5.1.44mysql.version>
-
- <pagehelper.version>5.1.2pagehelper.version>
-
- <mybatis.spring.version>1.3.1mybatis.spring.version>
-
- <commons.dbcp2.version>2.1.1commons.dbcp2.version>
- <commons.pool2.version>2.4.3commons.pool2.version>
-
- <log4j2.version>2.9.1log4j2.version>
-
- <junit.version>4.12junit.version>
- <servlet.version>4.0.0servlet.version>
- <lombok.version>1.18.2lombok.version>
- properties>
-
- <dependencies>
-
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-contextartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-ormartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-txartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-aspectsartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-webartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-testartifactId>
- <version>${spring.version}version>
- dependency>
-
-
- <dependency>
- <groupId>org.mybatisgroupId>
- <artifactId>mybatisartifactId>
- <version>${mybatis.version}version>
- dependency>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>${mysql.version}version>
- dependency>
-
- <dependency>
- <groupId>com.github.pagehelpergroupId>
- <artifactId>pagehelperartifactId>
- <version>${pagehelper.version}version>
- dependency>
-
- <dependency>
- <groupId>org.mybatisgroupId>
- <artifactId>mybatis-springartifactId>
- <version>${mybatis.spring.version}version>
- dependency>
-
-
- <dependency>
- <groupId>org.apache.commonsgroupId>
- <artifactId>commons-dbcp2artifactId>
- <version>${commons.dbcp2.version}version>
- dependency>
- <dependency>
- <groupId>org.apache.commonsgroupId>
- <artifactId>commons-pool2artifactId>
- <version>${commons.pool2.version}version>
- dependency>
-
-
-
- <dependency>
- <groupId>org.apache.logging.log4jgroupId>
- <artifactId>log4j-coreartifactId>
- <version>${log4j2.version}version>
- dependency>
- <dependency>
- <groupId>org.apache.logging.log4jgroupId>
- <artifactId>log4j-apiartifactId>
- <version>${log4j2.version}version>
- dependency>
-
- <dependency>
- <groupId>org.apache.logging.log4jgroupId>
- <artifactId>log4j-webartifactId>
- <version>${log4j2.version}version>
- dependency>
-
-
- <dependency>
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <version>${junit.version}version>
- <scope>testscope>
- dependency>
- <dependency>
- <groupId>javax.servletgroupId>
- <artifactId>javax.servlet-apiartifactId>
- <version>${servlet.version}version>
- <scope>providedscope>
- dependency>
- <dependency>
- <groupId>org.projectlombokgroupId>
- <artifactId>lombokartifactId>
- <version>${lombok.version}version>
- <scope>providedscope>
- dependency>
-
- dependencies>
-
-
- <build>
- <finalName>pro_maven_02finalName>
- <resources>
-
- <resource>
- <directory>src/main/javadirectory>
- <includes>
- <include>**/*.xmlinclude>
- includes>
- resource>
-
- <resource>
- <directory>src/main/resourcesdirectory>
- <includes>
- <include>jdbc.propertiesinclude>
- <include>*.xmlinclude>
- includes>
- resource>
- resources>
- <pluginManagement>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.pluginsgroupId>
- <artifactId>maven-compiler-pluginartifactId>
- <version>${maven.compiler.plugin.version}version>
- <configuration>
- <source>${maven.compiler.source}source>
- <target>${maven.compiler.target}target>
- <encoding>${project.build.sourceEncoding}encoding>
- configuration>
- plugin>
- <plugin>
- <groupId>org.mybatis.generatorgroupId>
- <artifactId>mybatis-generator-maven-pluginartifactId>
- <version>1.3.2version>
- <dependencies>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>${mysql.version}version>
- dependency>
- dependencies>
- <configuration>
- <overwrite>trueoverwrite>
- configuration>
- plugin>
- <plugin>
- <artifactId>maven-clean-pluginartifactId>
- <version>3.1.0version>
- plugin>
-
- <plugin>
- <artifactId>maven-resources-pluginartifactId>
- <version>3.0.2version>
- plugin>
- <plugin>
- <artifactId>maven-compiler-pluginartifactId>
- <version>3.8.0version>
- plugin>
- <plugin>
- <artifactId>maven-surefire-pluginartifactId>
- <version>2.22.1version>
- plugin>
- <plugin>
- <artifactId>maven-war-pluginartifactId>
- <version>3.2.2version>
- plugin>
- <plugin>
- <artifactId>maven-install-pluginartifactId>
- <version>2.5.2version>
- plugin>
- <plugin>
- <artifactId>maven-deploy-pluginartifactId>
- <version>2.8.2version>
- plugin>
- plugins>
- pluginManagement>
- build>
- project>
代码在上一篇博客中有,就不再展示啦。
开启注解
@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之间的耦合。
- <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:tx="http://www.springframework.org/schema/tx"
- xmlns:aop="http://www.springframework.org/schema/aop"
- 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/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
-
-
- <context:annotation-config/>
-
- <context:component-scan base-package="com.zhw"/>
-
- <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/zhw/**/mapper/*.xml"/>
-
- <property name="typeAliasesPackage" value="com/zhw/**/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/zhw/**/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/>
- beans>
bookbizImpl
- package com.zhw.biz;
-
- import com.zhw.mapper.BookMapper;
- import com.zhw.model.Book;
- import com.zhw.util.PageBean;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
-
- import java.util.List;
- import java.util.Map;
-
- /**
- * @author louis
- * @create 2022-08-14 21:03
- */
- @Service
- public class BookBizImpl implements BookBiz {
- @Autowired
- private BookMapper bookMapper;
- // public BookMapper getBookMapper() {
- // return bookMapper;
- // }
- //
- // public void setBookMapper(BookMapper bookMapper) {
- // this.bookMapper = bookMapper;
- // }
-
-
-
- @Override
- public int deleteByPrimaryKey(Integer bid) {
- return 0;
- }
-
- @Override
- public Book selectByPrimaryKey(Integer bid) {
- return null;
- }
-
- @Override
- public List
selectByIn(List bookIds) { - return null;
- }
-
- @Override
- public List
selectBooksLike1(String bname) { - return null;
- }
-
- @Override
- public List
selectBooksLike2(String bname) { - return null;
- }
-
- @Override
- public List
selectBooksLike3(String bname) { - return null;
- }
-
- @Override
- public List
- return null;
- }
-
- @Override
- public Map list5(Map map) {
- return null;
- }
-
- @Override
- public List
- return null;
- }
- }
bookmapper
- package com.zhw.mapper;
-
- import com.zhw.model.Book;
- import org.springframework.stereotype.Repository;
-
- @Repository
- public interface BookMapper {
- int deleteByPrimaryKey(Integer bid);
-
- int insert(Book record);
-
- int insertSelective(Book record);
-
- Book selectByPrimaryKey(Integer bid);
-
- int updateByPrimaryKeySelective(Book record);
-
- int updateByPrimaryKey(Book record);
- }
bookbizimpltest
- package com.zhw.service.impl;
-
- import com.zhw.biz.BookBiz;
- import com.zhw.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;
-
- /**
- * @author louis
- * @create 2022-08-10 23:27
- */
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration(locations={"classspath:applicationContext-mybatis.xml"})
- public class BookBizImplTest {
- @Autowired
- private BookBiz bookBiz;
- // private SqlSession sqlSession;
-
- @Before
- public void setUp() throws Exception {
- System.out.println("初始化");
- // BookBizImpl bookBiz = new BookBizImpl();
- // sqlSession = SessionUtil.openSession();
- // BookMapper mapper = sqlSession.getMapper(BookMapper.class);
- // bookBiz.setBookMapper(mapper);
- // this.bookBiz = bookBiz;
- }
-
- @After
- public void tearDown() throws Exception {
- System.out.println("结束");
- }
-
- @Test
- public void deleteByPrimaryKey() {
- }
-
- @Test
- public void selectByPrimaryKey() {
- System.out.println("测试");
- // System.out.println(bookBiz.getBookMapper());
- Book book = bookBiz.selectByPrimaryKey(44);
- System.out.println(book);
- }
-
-
-
-
-
- }
- package com.zhw.aspect;
-
- import com.github.pagehelper.PageHelper;
- import com.github.pagehelper.PageInfo;
- import com.zhw.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 PageAspect {
-
- /**
- * *:返回值类型
- * *:无限包
- * *Service:以Service结尾接口名
- * *Pager:以Pager方法
- * 只要同时匹配上诉四个条件,就会被列为目标对象
- * 上诉配置要生效,代理注解
不能少 - *
- * @param args
- * @return
- * @throws Throwable
- */
- @Around("execution(* *..*Biz.*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 list = args.proceed(params);
-
- if(null != pageBean && pageBean.isPagination()){
- PageInfo pageInfo = new PageInfo((List) list);
- pageBean.setTotal(pageInfo.getTotal()+"");
- }
- return list;
- }
-
-
- }
-
-
- package com.zhw.biz.impl;
-
- import com.github.pagehelper.PageHelper;
- import com.github.pagehelper.PageInfo;
- import com.zhw.biz.BookBiz;
- import com.zhw.mapper.BookMapper;
- import com.zhw.model.Book;
- import com.zhw.model.BookVo;
- import com.zhw.util.PageBean;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
-
- import java.util.List;
- import java.util.Map;
-
- @Service
- public class BookBizImpl implements BookBiz {
- @Autowired
- private BookMapper bookMapper;
-
- // alt+insert 快速提供set/get/tostring/构造方法
- // alt+enter 快速构建实现类,填充代码的前半部分 ctrl+1
- // public BookMapper getBookMapper() {
- // return bookMapper;
- // }
-
- // public void setBookMapper(BookMapper bookMapper) {
- // this.bookMapper = bookMapper;
- // }
-
- @Override
- public int deleteByPrimaryKey(Integer bid) {
- return bookMapper.deleteByPrimaryKey(bid);
- }
-
- @Override
- public Book selectByPrimaryKey(Integer bid) {
- return bookMapper.selectByPrimaryKey(bid);
- }
-
- @Override
- public List
selectByIn(List bookIds) { - return bookMapper.selectByIn(bookIds);
- }
-
- @Override
- public List
selectBooksLike1(String bname) { - return bookMapper.selectBooksLike1(bname);
- }
-
- @Override
- public List
selectBooksLike2(String bname) { - return bookMapper.selectBooksLike2(bname);
- }
-
- @Override
- public List
selectBooksLike3(String bname) { - return bookMapper.selectBooksLike3(bname);
- }
-
- @Override
- public List
list1() { - return bookMapper.list1();
- }
-
- @Override
- public List
list2() { - return bookMapper.list2();
- }
-
- @Override
- public List
list3(BookVo vo) { - return bookMapper.list3(vo);
- }
-
- @Override
- public List
- return bookMapper.list4();
- }
-
- @Override
- public Map list5(Map map) {
- return bookMapper.list5(map);
- }
-
- @Override
- public List
- return bookMapper.listPager(map);
- }
- // public List
- pageHelper分页插件相关的代码
- // if(pageBean!=null&&pageBean.isPagination()){
- // PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
- // }
- // List
- // if(pageBean!=null&&pageBean.isPagination()){
- 处理查询结果的前提是需要分页,是需要分页的
- // PageInfo info = new PageInfo(maps);
- // pageBean.setTotal(info.getTotal()+"");
- // }
- // return maps;
- // }
-
- @Override
- public List
list6(BookVo bookVo) { - return bookMapper.list6(bookVo);
- }
-
- @Override
- public List
list7(BookVo bookVo) { - return bookMapper.list7(bookVo);
- }
- }
-
本次分享了Spring 和 Mybatis的集成以及aop整合pagehelper插件。过程中简单的分享了几个注解,以及其中两个注解的区别。
今天的分享就到此为止啦。如有错误还望指正,谢谢啦。