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 ...
随机推荐
- (转)cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
学C++的时候,这几个输入函数弄的有点迷糊:这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)转载请保留作者信息:1.cin1 ...
- thinkphp实现自动登录
网页上经常有一些自动登录的checkbox,勾选后,下次进入该网站,无需登录,即可执行一些需要登录才能执行的操作.上班无事,用thinkphp做了下 1 下面是一个很普通的form表单,有一个chec ...
- SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面)
挺好用的SQLSERVER数据库自动备份工具SQLBackupAndFTP(功能全面) 这个工具主要就是自动备份数据库,一键还原数据库,发送备份数据库日志报告到邮箱,自动压缩备份好的数据库 定期执行数 ...
- HttpActionDescriptor,ASP.NET Web API又一个重要的描述对象
HttpActionDescriptor,ASP.NET Web API又一个重要的描述对象 通过前面对“HttpController的激活”的介绍我们已经知道了ASP.NET Web API通过Ht ...
- T4模板与数据访问层的分离
当在企业级应用中使用EF时,会发现实体类库与数据访问层是分离的. 来一张效果图. 具体步骤: 1.运用EF生成原始的实体类 在程序集中添加完ADO.NET实体数据模型后,生成相应的实体类,此时,T4模 ...
- Aliexpress API 测试工具
Aliexpress API 测试工具 上回简单说了 Aliexpress API 的认证流程, 这回在奉送一个小工具, API 测试工具. 点我下载 做这一行,和做程序员的生活完全不搭调, 格格不入 ...
- ExtJS初接触 —— 了解 Ext Core
ExtJS初接触 —— 了解 Ext Core Ext Core是一款和jQuery媲美的轻型JS库,基于MIT许可.对于Dom的操作,我个人还是比较喜欢用jQuery.当然如果项目中用的是ExtJS ...
- 使用Pechkin将HTML网页转换为PDF
Pechkin开源组件使用wkhtmlbox,可以解析CSS样式,将网页转换为PDF文件, 支持URL,或者HTML字符串 1, 从NuGet程序管理器中获得Pechkin GlobalConfig ...
- Android 音频管理器AudioManager
音频管理器AudioManager,通过它可以管理android系统的音量或直接让系统静音,依旧是通过调用getSystemService()方法获取音频管理器AudioManager对象,获取到该对 ...
- message from server: "Host 'xxx' is not allowed to connect to this MySQL server的解决
解决方法: 1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" ...