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的分页和缓存查询的更多相关文章

  1. 分页查询和分页缓存查询,List<Map<String, Object>>遍历和Map遍历

    分页查询 String sql = "返回所有符合条件记录的待分页SQL语句"; int start = (page - 1) * limit + 1; int end = pag ...

  2. ajax分页与组合查询配合使用

    使用纯HTML页与js.ajax.Linq实现分页与组合查询的配合使用 <body> <div id="top"><input type=" ...

  3. #研发解决方案#discache-分布式缓存查询与管理系统

    郑昀 基于马海元和闫小波的文档 关键词:memcached.redis.分布式缓存.控制台.反序列化.Java 本文档适用人员:研发和运维员工 提纲: 如何查看缓存里的序列化数据? 批量删除来一个 监 ...

  4. Webform(Linq高级查、分页、组合查询)

    一.linq高级查 1.模糊查(包含) 1 public List<User> Select(string name) 2 { 3 return con.User.Where(r => ...

  5. Webform(分页、组合查询)

    一.分页 1.写查询方法: public List<Student> Select(int PageCount, int PageNumber) {//PageCount为每页显示条数,P ...

  6. Hibernate 再接触 一级缓存 二级缓存 查询缓存

    缓存 就是把本来应该放在硬盘里的东西放在内存里  将来存内存里读 一级缓存: session缓存 二级缓存: sessionFactory级别的   (适合经常访问,数据量有限,改动不大) 很多的se ...

  7. MySql 缓存查询原理与缓存监控 和 索引监控

    MySql缓存查询原理与缓存监控 And 索引监控 by:授客 QQ:1033553122 查询缓存 1.查询缓存操作原理 mysql执行查询语句之前,把查询语句同查询缓存中的语句进行比较,且是按字节 ...

  8. 怎样使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率

    在寻常的开发中常常会有非常多列表页面.每做一个列表页就须要创建这个布局文件那个Adapter适配器文件等等一大堆与之相关的附属的不必要的冗余文件. 假设版本号更新迭代比較频繁,如此以往,就会使项目pr ...

  9. 基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询

    前言 基于SpringMVC+Bootstrap+DataTables实现数据表格服务端分页.模糊查询(非DataTables Search),页面异步刷新. 说明:sp:message标签是使用了S ...

随机推荐

  1. (转)cin、cin.get()、cin.getline()、getline()、gets()等函数的用法

    学C++的时候,这几个输入函数弄的有点迷糊:这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)转载请保留作者信息:1.cin1 ...

  2. thinkphp实现自动登录

    网页上经常有一些自动登录的checkbox,勾选后,下次进入该网站,无需登录,即可执行一些需要登录才能执行的操作.上班无事,用thinkphp做了下 1 下面是一个很普通的form表单,有一个chec ...

  3. SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)

    挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 这个工具主要就是自动备份数据库,一键还原数据库,发送备份数据库日志报告到邮箱,自动压缩备份好的数据库 定期执行数 ...

  4. HttpActionDescriptor,ASP.NET Web API又一个重要的描述对象

    HttpActionDescriptor,ASP.NET Web API又一个重要的描述对象 通过前面对“HttpController的激活”的介绍我们已经知道了ASP.NET Web API通过Ht ...

  5. T4模板与数据访问层的分离

    当在企业级应用中使用EF时,会发现实体类库与数据访问层是分离的. 来一张效果图. 具体步骤: 1.运用EF生成原始的实体类 在程序集中添加完ADO.NET实体数据模型后,生成相应的实体类,此时,T4模 ...

  6. Aliexpress API 测试工具

    Aliexpress API 测试工具 上回简单说了 Aliexpress API 的认证流程, 这回在奉送一个小工具, API 测试工具. 点我下载 做这一行,和做程序员的生活完全不搭调, 格格不入 ...

  7. ExtJS初接触 —— 了解 Ext Core

    ExtJS初接触 —— 了解 Ext Core Ext Core是一款和jQuery媲美的轻型JS库,基于MIT许可.对于Dom的操作,我个人还是比较喜欢用jQuery.当然如果项目中用的是ExtJS ...

  8. 使用Pechkin将HTML网页转换为PDF

    Pechkin开源组件使用wkhtmlbox,可以解析CSS样式,将网页转换为PDF文件, 支持URL,或者HTML字符串 1, 从NuGet程序管理器中获得Pechkin  GlobalConfig ...

  9. Android 音频管理器AudioManager

    音频管理器AudioManager,通过它可以管理android系统的音量或直接让系统静音,依旧是通过调用getSystemService()方法获取音频管理器AudioManager对象,获取到该对 ...

  10. message from server: "Host 'xxx' is not allowed to connect to this MySQL server的解决

    解决方法:    1. 改表法.    可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" ...