6.MyBaits的分页和缓存查询
1. 创建javaweb项目MyBaits_Page_CaChe
2.在项目的WebRoot下的WEB-INF下的lib文件下加入jar文件
log4j-1.2.17.jar
mybatis-3.2.3.jar
ojdbc14.jar
3.在src下创建jdbc.properties属性文件
driver=oracle.jdbc.driver.OracleDriver
url=jdbc\:oracle\:thin\:@127.0.0.1\:1521\:orcl
username=scott
password=tiger
jdbc.properties
4.在src下创建configuration.xml主配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" >
<configuration>
<!-- 引用jdbc链接数据库属性文件 -->
<properties resource="jdbc.properties"/> <!-- 全局参数的配置 -->
<settings>
<!-- 开启二级缓存 -->
<setting name="cacheEnabled" value="true"/>
</settings> <!-- 配置别名 -->
<typeAliases>
<typeAlias type="com.entity.Emp" alias="Emp"/>
<typeAlias type="com.page.EmpPage" alias="EmpPage"/>
</typeAliases> <environments default="development">
<environment id="development">
<transactionManager type="jdbc"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource> </environment> </environments> <mappers>
<mapper resource="com/mapper/EmpMapper.xml"/>
</mappers> </configuration>
configuration.xml
5.在src下创建log4j.properties日志文件
log4j.rootLogger=DEBUG,Console #Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.Console.layout=org.apache.log4j.PatternLayout ###log4j to file###
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=mybatis.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d %p %F %M [%t] %-5p [%c] - %m%n log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
6.在src下创建com.entity包下创建Emp.java
package com.entity; public class Emp {
private int empno;
private String ename;
private double sal;
private int deptno; public Emp() {
}
public Emp(int empno, String ename, double sal, int deptno) {
this.empno = empno;
this.ename = ename;
this.sal = sal;
this.deptno = deptno;
}
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public double getSal() {
return sal;
}
public void setSal(double sal) {
this.sal = sal;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
@Override
public String toString() {
return "Emp [deptno=" + deptno + ", empno=" + empno + ", ename="
+ ename + ", sal=" + sal + "]";
} }
Emp.java
7.在src下创建com.util包下创建MyBatisUtil.java
package com.util; import java.io.IOException;
import java.io.Reader; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MyBatisUtil {
private static SqlSessionFactory sqlSessionFactory=null;
static{
try {
Reader reader=Resources.getResourceAsReader("configuration.xml");
sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
} } public static SqlSession getSqlSession(boolean isCommit){
return sqlSessionFactory.openSession(isCommit);
} }
MyBatisUtil.java
8.在src下创建com.page包下创建EmpPage.java
package com.page; import java.util.List; import org.apache.ibatis.session.SqlSession; import com.entity.Emp;
import com.mapper.EmpMapper;
import com.util.MyBatisUtil; public class EmpPage {
private Integer pageNo;
private Integer pageSize;
private Integer totalPage;
private Integer totalCount; public EmpPage() {
}
public EmpPage(Integer pageNo, Integer pageSize) {
this.pageNo = pageNo;
this.pageSize = pageSize;
}
public Integer getPageNo() {
return pageNo;
}
public void setPageNo(Integer pageNo) {
if(pageNo!=null){
this.pageNo = pageNo;
}else{
this.pageNo=1;
} }
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getTotalPage() {
return totalPage;
}
public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
}
public Integer getTotalCount() {
return totalCount;
}
public void setTotalCount(Integer totalCount) {
this.totalCount = totalCount;
} /**
* 查询总记录数
* @return 总记录数
*/
public int totalCount(){
SqlSession sqlSession=MyBatisUtil.getSqlSession(false);
EmpMapper mapper=sqlSession.getMapper(EmpMapper.class);
Integer count=mapper.totalCount();
sqlSession.clearCache();
sqlSession.close(); //修改 return count;
} /**
* 计算总页数
* @param pageSize 页面大小
* @param totalCount 总的记录数
* @return 总页数
*/
public int totalPage(int pageSize,int totalCount){
int count=totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1;
this.setTotalPage(count);
return count;
} /**
* 分页查询
* @param pageSize 页面大小
* @param pageNo 当前页
* @return 分页查询集合
*/
public List<Emp> findEmpPage(EmpPage page){
SqlSession sqlSession=MyBatisUtil.getSqlSession(false);
EmpMapper mapper=sqlSession.getMapper(EmpMapper.class);
List<Emp> list=mapper.findEmpPage(page);
sqlSession.close();
return list;
} }
EmpPage.java
9.在src下创建com.mapper包下创建EmpMapper.java
package com.mapper; import java.util.List; import com.entity.Emp;
import com.page.EmpPage; public interface EmpMapper {
/**
* 查询总条数
* @return
*/
Integer totalCount(); /**
* 分页查询
*/
List<Emp> findEmpPage(EmpPage page); }
EmpMapper.java
10.在src下创建com.test包下创建EmpMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.mapper.EmpMapper">
<!-- 开启二级缓存 -->
<!--回收策略为先进先出-->
<!--自动刷新时间60s-->
<!--最多缓存512个引用对象-->
<!--只读-->
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/> <!-- 查询总条数 -->
<select id="totalCount" resultType="Integer">
select count(*) from emp
</select> <!-- 分页查询 -->
<select id="findEmpPage" resultType="Emp" parameterType="EmpPage">
<![CDATA[
select e.empno,e.ename,e.sal,e.deptno from
(
select rownum r,empno,ename,sal,deptno from emp
where rownum<=(#{pageNo}*#{pageSize})
)e where
e.r>(#{pageNo}-1)*#{pageSize}
]]> <!--
select e.empno,e.ename,e.sal,e.deptno from
(
select rownum r,empno,ename,sal,deptno from emp
where rownum<=3
)e where
e.r>0
--> </select> </mapper>
EmpMapper.xml
11.在src下创建com.mapper包下创建Test.java
package com.test; import java.util.List; import com.entity.Emp;
import com.page.EmpPage; public class Test { public static void main(String[] args) {
EmpPage page=new EmpPage(2, 3);
int count=page.totalCount();
count=page.totalCount();
System.out.println("------总条数:"+count);
System.out.println("-----------分页查询数据如下---------");
List<Emp> list=page.findEmpPage(page);
for (Emp emp : list) {
System.out.println(emp);
}
} }
Test.java
6.MyBaits的分页和缓存查询的更多相关文章
- 分页查询和分页缓存查询,List<Map<String, Object>>遍历和Map遍历
分页查询 String sql = "返回所有符合条件记录的待分页SQL语句"; int start = (page - 1) * limit + 1; int end = pag ...
- ajax分页与组合查询配合使用
使用纯HTML页与js.ajax.Linq实现分页与组合查询的配合使用 <body> <div id="top"><input type=" ...
- #研发解决方案#discache-分布式缓存查询与管理系统
郑昀 基于马海元和闫小波的文档 关键词:memcached.redis.分布式缓存.控制台.反序列化.Java 本文档适用人员:研发和运维员工 提纲: 如何查看缓存里的序列化数据? 批量删除来一个 监 ...
- Webform(Linq高级查、分页、组合查询)
一.linq高级查 1.模糊查(包含) 1 public List<User> Select(string name) 2 { 3 return con.User.Where(r => ...
- Webform(分页、组合查询)
一.分页 1.写查询方法: public List<Student> Select(int PageCount, int PageNumber) {//PageCount为每页显示条数,P ...
- Hibernate 再接触 一级缓存 二级缓存 查询缓存
缓存 就是把本来应该放在硬盘里的东西放在内存里 将来存内存里读 一级缓存: session缓存 二级缓存: sessionFactory级别的 (适合经常访问,数据量有限,改动不大) 很多的se ...
- MySql 缓存查询原理与缓存监控 和 索引监控
MySql缓存查询原理与缓存监控 And 索引监控 by:授客 QQ:1033553122 查询缓存 1.查询缓存操作原理 mysql执行查询语句之前,把查询语句同查询缓存中的语句进行比较,且是按字节 ...
- 怎样使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率
在寻常的开发中常常会有非常多列表页面.每做一个列表页就须要创建这个布局文件那个Adapter适配器文件等等一大堆与之相关的附属的不必要的冗余文件. 假设版本号更新迭代比較频繁,如此以往,就会使项目pr ...
- 基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
前言 基于SpringMVC+Bootstrap+DataTables实现数据表格服务端分页.模糊查询(非DataTables Search),页面异步刷新. 说明:sp:message标签是使用了S ...
随机推荐
- GEF-whole-upload教程中遇到的问题及解决方案
最近在学习GEF开发,使用的是GEF-whole-upload这个教程.由于教程当时所使用的版本与本人使用的版本有一些差异,中间出现了不少问题,现在将解决方案分享给大家. 本人使用的Eclipse版本 ...
- revel框架教程之CSRF(跨站请求伪造)保护
revel框架教程之CSRF(跨站请求伪造)保护 CSRF是什么?请看这篇博文“浅谈CSRF攻击方式”,说的非常清楚. 现在做网站敢不防CSRF的我猜只有两种情况,一是没什么人访问,二是局域网应用.山 ...
- RTB撕开黑盒子 Part 0:Pacing: is everyone doing it wrong?
曾尝试为我们的RTB客户解决过Pacing问题,Pacing问题要解决的问题是:如果一个客户给你一笔预算,让你去运营一个广告推广计划,在一定的时间内投放广告,将这笔预算在指内的时间内,比较均匀地将预算 ...
- linux下php-5.4.8.tar.gz编译安装全攻略
首先安装基础依赖组建,注:这些依赖组建也是LINUX+PHP+MYSQL+APACHE+NGINX+MEMCACHED时必要的系统组件 LANG=C yum -y install gcc gcc-c ...
- 深入浅出学习Spring框架(四):IoC和AOP的应用——事务配置
在前文 深入浅出学习Spring框架(一):通过Demo阐述IoC和DI的优势所在. 深入浅出学习Spring框架(三):AOP 详解 分别介绍了Spring的核心功能——IoC和AOP,光讲知识远远 ...
- IOS设计模式学习(6)生成器
1 前言 有时候,构建某些对象有多种不同方式.如果这些逻辑包含在构建这些对象的类中的单一方法中,构建的逻辑会非常荒唐(例如,针对各种构建需求的一大片嵌套if-else或者switch-case语句). ...
- spring请求到达controller但响应404
问题是这样的,前台发送请求的后台,后台的方法正常执行,将数据放在response.getWrite里,但在前台并没有展示数据.用浏览器的开发者工具看下请求,发现响应404. 最后网上查了查,sprin ...
- 【.net 深呼吸】细说CodeDom(9):动态编译
知道了如果构建代码文档,知道了如何生成代码,那么编译程序集就很简单了. CodeDomProvider 类提供了三个可以执行编译的方法: 1.CompileAssemblyFromSource——这个 ...
- es6 Module
前言: 这是阮一峰老师的ECMA6入门module一章的缩减,只抽取了我在项目中有用到的内容.带着问题去看老师的教程.感觉吸收更快,也明白了偶尔遇到的export不出来的问题. es6模块设计思想: ...
- C#中的文件操作2
1. 读取文件的方法: 1. 声明一个文件流: 目的是为了内存与文件之间的桥梁,可以进行数据的往来. FileStream fs = new FileStream(filename,FileMode ...