mybatis与Spring集成(Aop整合PagerAspect插件)
2020-12-13 15:29
标签:依赖 data 建议 set delete mini pat text artifact
目的:
-
Mybatis与spring集成
-
Aop整合pagehelper插件
Mybatis与spring集成
导入pom依赖
xml version="1.0" encoding="UTF-8"?> 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/maven-v4_0_0.xsd"> parent> artifactId>moduleartifactId> groupId>com.huangtinggroupId> version>1.0-SNAPSHOTversion> parent> modelVersion>4.0.0modelVersion> packaging>warpackaging> name>ssmname> artifactId>ssmartifactId> 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> dependency> groupId>junitgroupId> artifactId>junitartifactId> version>4.12version> dependency> dependencies> build> finalName>ssmfinalName> 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> 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> groupId>org.mortbay.jettygroupId> artifactId>maven-jetty-pluginartifactId> version>6.1.7version> configuration> connectors> connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> port>8888port> maxIdleTime>30000maxIdleTime> connector> connectors> webAppSourceDirectory>${project.build.directory}/${pom.artifactId}-${pom.version} webAppSourceDirectory> contextPath>/contextPath> configuration> plugin> plugins> build> project>
编写配置文件applicationContext-mybatis.xml 和 applicationContext.xml
-
注解释开发
注解驱动
context:annotation-config/>
用注解方式注入bean,并指定查找范围:com.ht及子子孙孙包
context:component-scan base-package="com.ht"/>
- 引入外部jdbc配置文件
context:property-placeholder location="classpath:jdbc.properties"/>
- 配置dbcp2数据库连接池
- spring和mybatis整合
- 注解式事物配置
配置事务管理(环绕通知) 有关数据库操作的开启、提交操作都是在环绕在数据库操作的前后
bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
property name="dataSource" ref="dataSource" />
bean>
tx:annotation-driven transaction-manager="transactionManager" />
aop:aspectj-autoproxy/>
- 开启动态代理
aop:aspectj-autoproxy/>
@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之间的耦合。
@Transactional
注:个人感觉注解式事务比以前的声明式事务更加麻烦,要写的东西更多
applicationContext-Mybatis.xml 这是spring整合mybatis 的配置文件
applicationContext-mybatis.xml
xml version="1.0" encoding="UTF-8"?>
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.ht"/>
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/ht/**/mapper/*.xml"/>
property name="typeAliasesPackage" value="com/ht/**/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/ht/**/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>
applicationContext.xml
xml version="1.0" encoding="UTF-8"?> beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> import resource="applicationContext-mybatis.xml">import> beans>
Spring Test+junit完美组合
我们来测试一下
首先在service层中创建包类
BookService
package com.ht.service; import com.ht.Util.PageBean; import com.ht.model.Book; import java.util.List; import java.util.Map; /** * @author 黄大娘 * @company dogson有限公司 * @create 2019-09-24 20:10 */ public interface BookService { int deleteByPrimaryKey(Integer bid); int insert(Book record); int insertSelective(Book record); Book selectByPrimaryKey(Integer bid); int updateByPrimaryKeySelective(Book record); int updateByPrimaryKey(Book record);、 }
BookServiceipml
package com.ht.service.ipml; import com.ht.Util.PageBean; import com.ht.mapper.BookMapper; import com.ht.model.Book; import com.ht.service.BookService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; /** * @author 黄大娘 * @company dogson有限公司 * @create 2019-09-24 22:58 */ @Service public class BookServiceIpml implements BookService { @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 bookMapper.updateByPrimaryKeySelective(record); } @Override public int updateByPrimaryKey(Book record) { return bookMapper.updateByPrimaryKey(record); } }
SpringBaseTest
package com.ht.Test; import com.ht.Util.PageBean; import com.ht.model.Book; import org.junit.Before; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * @author 黄大娘 * @company dogson有限公司 * @create 2019-09-24 23:09 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:applicationContext.xml"}) public class SpringBaseTest { protected Book book; protected PageBean pageBean; @Before public void init(){ book = new Book(); pageBean = new PageBean(); } }
测试:
SpringBaseTestipml
package com.ht.service.ipml; import com.ht.Test.SpringBaseTest; import com.ht.service.BookService; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; /** * @author 黄大娘 * @company dogson有限公司 * @create 2019-09-25 0:37 */ public class SpringBaseTestipml extends SpringBaseTest { @Autowired private BookService bookService; @Test public void insert() { book.setBid(8); book.setBname("墙头马上遥相顾"); book.setPrice(45.6); int n = this.bookService.insert(book); System.out.println(n); } }
效果:
Aop整合pagehelper插件
注意:记得开动态代理
@Around("execution(* *..*Service.*pager(..))") public Object invoke(ProceedingJoinPoint args)
execution(方法修饰符 方法返回值 方法所属类 匹配方法名 ( 方法中的形参表 ) 方法申明抛出的异常 )
"*" :代表一个任意类型的参数;
“..”:代表零个或多个任意类型的参数。
设置方法接口
BookMapper
//用来测试的接口,一个符合规则,一个不符合规则 List
配置映射BookMapper.xml文件
BookService
//用来测试的接口,一个符合规则,一个不符合规则 List
BookServiceIpml
@Override public Listhhhh(Map map,PageBean pageBean) { return this.bookMapper.hhhh(map); } @Override public List listPager(Map map, PageBean pageBean) { return this.bookMapper.hhhh(map); }
文章标题:mybatis与Spring集成(Aop整合PagerAspect插件)
文章链接:http://soscw.com/index.php/essay/35156.html