一、mybatis集成spring
1.1.开启注解式开发,并扫描指定包。
<context:component-scan base-package="com.zking"/>1.2.引入数据配置文件:jdbc.proerties(详见 jdbc.proerties)。
<context:property-placeholder location="jdbc.properties" />1.3.创建dbcp2数据库连接池( 详见“dbcp2.txt”)。
<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"/>
<!--设置为-1时,如果没有可用连接,连接池会一直无限期等待,直到获取到连接为止。-->
<!--如果设置为N(毫秒),则连接池会等待N毫秒,等待不到,则抛出异常-->
<property name="maxWaitMillis" value="-1"/>
</bean>1.4.实现mybatis与spring集成配置(包含了集成pagehelper插件,详见:spring与mybatis整合(集成pagehelper分页插件).txt).
<!--1) 创建sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 指定数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- 自动扫描XxxMapping.xml文件,**任意路径 -->
<property name="mapperLocations" value="classpath*:com/zking/**/mapper/*.xml"/>
<!-- 指定别名 -->
<property name="typeAliasesPackage" value="com/zking/**/model"/>
<!--配置pagehelper插件-->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<value>
helperDialect=mysql
</value>
</property>
</bean>
</array>
</property>
<!-- 开启驼峰命名映射 -->
<property name="configuration">
<bean class="org.apache.ibatis.session.Configuration">
<property name="mapUnderscoreToCamelCase" value="true"/>
</bean>
</property>
</bean>
<!--2) 自动扫描com/zking/**/mapper下的所有XxxMapper接口,并实现这些接口,-->
<!-- 即可直接在程序中使用mapper接口,不用再获取sqlsession对象-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--basePackage 属性是映射器接口文件的包路径。-->
<!--你可以使用分号或逗号 作为分隔符设置多于一个的包路径-->
<property name="basePackage" value="com/zking/**/mapper"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>1.5.开启注解式事务:mybatis的事务处理交给Spring管理(注解式事务,详见:事务处理配置和开启动态代理.txt)。
<!-- 事务相关控制-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 启动事务控制器注解-->
<tx:annotation-driven transaction-manager="transactionManager" />1.6.开启动态代理(详见:事务处理配置和开启动态代理.txt)
<aop:aspectj-autoproxy/>1.7 springtext + junit实现测试
package com.zking.service.impl;
import com.zking.model.Book;
import com.zking.service.IBookService;
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 java.util.List;
import static org.junit.Assert.*;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml")
public class BookServiceImplTest {
@Autowired
private IBookService bookService;
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void queryAll() {
List<Book> bookList = bookService.queryAll();
bookList.forEach(System.out::println);
}
}二、 使用AOP处理分页
package com.zking.aspect;
import com.github.pagehelper.PageInfo;
import com.zking.util.PageBean;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import java.util.List;
@Aspect //该类就是一个切面类/增强类
public class PageAspect {
//通过 Aspect 表达式确定要切入的目标方法
@Around("execution(* *..*Service.*Page(..))")
public Object invoke(ProceedingJoinPoint joinPoint) throws Throwable {
//环绕方法执行之前
PageBean pageBean = null;
//获取目标方法的参数(目的是为了获取里面的pagebean参数)
Object[] args = joinPoint.getArgs();
for (Object arg : args) {
if (null != arg){
//判断该参数是不是pageBean
if (arg instanceof PageBean){
pageBean = (PageBean) arg;
break;
}
}
}
//执行目标方法
Object returnValue = joinPoint.proceed();
List list = null;
if(returnValue instanceof List){
list = (List) returnValue;
}
PageInfo pageInfo = new PageInfo(list);
//目标方法执行之后
if(null != pageBean && pageBean.isPagination()){
//给pageBean的总数据量赋值
pageBean.setTotal((int) pageInfo.getTotal());
}
return list;
}
}
定义方法
List<Book> queryAllPage(Book book);编写sql语句
<select id="queryAllPage" resultType="com.zking.model.Book">
select <include refid="Base_Column_List"/>
from tb_book where 1=1
<if test="null != bookName and '' != bookName">
and book_name like concat('%',#{bookName},'%')
</if>
order by book_id desc
</select>测试
package com.zking.service.impl;
import com.github.pagehelper.PageHelper;
import com.zking.model.Book;
import com.zking.service.IBookService;
import com.zking.util.PageBean;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
public class BookServiceImplTest extends BaseTest {
@Autowired
private IBookService bookService;
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void queryAll() {
List<Book> bookList = bookService.queryAll();
bookList.forEach(System.out::println);
}
@Test
public void queryAllPage() {
PageBean pageBean = new PageBean();
PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
List<Book> bookList = bookService.queryAllPage(Book
.builder()
.bookName("童话")
.build(), pageBean);
bookList.forEach(System.out::println);
}
}版权声明:本文为weixin_62322136原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。