1.mybatis分页插件——pageHelper 5.1.2
使用原理:
pageHelper会使用ThreadLocal获取到同一线程中的变量信息,各个线程之间的Threadlocal不会相互干扰,也就是Thread1中的ThreadLocal1之后获取到Tread1中的变量的信息,不会获取到Thread2中的信息
所以在多线程环境下,各个Threadlocal之间相互隔离,可以实现,不同thread使用不同的数据源或不同的Thread中执行不同的SQL语句
所以,PageHelper利用这一点通过拦截器获取到同一线程中的预编译好的SQL语句之后将SQL语句包装成具有分页功能的SQL语句,并将其再次赋值给下一步操作,所以实际执行的SQL语句就是有了分页功能的SQL语句
使用方式:
PageResult<Person> result = new ...();
Page page= PageHelper.startPage(pageNum,rows,true);——(页码,行数、显示条数,是否进行count查询、总条数)
//Page page= PageHelper.startPage(pageNum,rows,id);——(页码,行数、显示条数,排序)
List<Person> list = mapper.select();
result.setRows(list);
result.setTotal((int)page.gettotal());
return result;
配置:
spring-jdbc.xml
添加bean标签
<bean id =" ...Factory" class="org.mybatis.spring.SqlSessonFactoryBean">
<property name = "dataSource" ref="dataSource"/>
<property name = "mapperLocations" value ="classpath*:db/mapper/*.xml"/>
<property name ="plugins">
<array>
<bean class"com.github.pagehepler.PageInterceptor">
<proterty name="properties">
<value> helperDialect=mysql </value>
</proterty>
</bean>
</array>
</proterty>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.com.cninfo.dao"/>
<properyt name ="sqlSessionFactoryBeanName" value="...Factory"/>
</bean>
2.mybatis---
mapper.java 接口文件 Map<String,IndexInfo> getMap();上面添加注解 @mapKey("indexCode")
mapper.xml sql文件 resultMap=""封装的实体对象
3. spring通过properties注入list
@Value("#{properties['etfLogDor'].split(',')}")
private List<String> logDir;
@Value("#{${blog-top-links}}")
private Map<String, String> topLinks;
@Value("#{'${blog-list}'.split(',')}")
private List<Integer> list;
properties中写法
blog-top-links={home:"/home"} blog-list=1,2,3