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. Unity3d物体模型(实现旋转缩放平移自动旋转)

    基本功能实现:物体通过鼠标左键上下移动,中间键缩放.右键旋转,30秒没操作,物体自动旋转 实例代码: using UnityEngine; using System.Collections; publ ...

  2. XSD实例

    XSD实例 在前面的XSD笔记中,基本上是以数据类型为主线来写的,而在我的实际开发过程中,是先设计好了XML的结构(元素.属性),并写好了一份示例,然后再反过来写XSD文件(在工具生成的基础上修改), ...

  3. MongoDB学习(翻译6)

    接上篇.... 字段或属性层次的序列化选项 有许多种让你控制序列化的方式,上一节通过约定方法来控制序列化,你也可以通过代码配置或者成员映射或者使用特性来控制你的序列化,下面说道的序列化的各个方面,我们 ...

  4. jQuery Fancybox插件介绍

    下面介绍一款jquery图片播放插件叫Fancybox,项目主页地址:http://fancybox.net/ Fancybox的特点如下: 1.可以支持图片.html文本.flash动画.ifram ...

  5. java文件上传--基于ajaxFileUpload+struts2

    jQuery插件ajaxFileUpload可以实现ajax文件上传,使用非常简单. 下面做一个简单的demo(以上传图片为例),实现图片上传,图片显示,图片下载 注:以下的代码是在项目的基础上进行开 ...

  6. Python之FTP多线程下载文件之多线程分块下载文件

    Python之FTP多线程下载文件之多线程分块下载文件 Python中的ftplib模块用于对FTP的相关操作,常见的如下载,上传等.使用python从FTP下载较大的文件时,往往比较耗时,如何提高从 ...

  7. dotfiles for linux/unix users automatically! (python Vim IDE)

    Here is a brief introduction and package of dotfiles for linux/unix user. I think there are enough i ...

  8. SQL 两表关联查询 where 条件中等号两端字段顺序对效率的影响

    现有两表A(大).B(小)作关联查询,SQL语句如下: SQL1:select * from A,B where A.id = B.id SQL2:select * from A,B where B. ...

  9. 通过python为zabbix发送告警邮件

    最近部署ZABBIX的邮件告警时,用刚学的python来写告警邮件脚本. 由于时间有限,我只对关键步骤做截图,对zabbix的基本配置略过. python代码如下 1 #!/usr/bin/pytho ...

  10. 【转】UWP 捕获全局异常

    转自:http://www.cnblogs.com/youngytj/p/4749004.html 异步(async)方法中的异常无法被App的UnhandledException捕获的问题 这是一个 ...