Java经典封装JDBC模板(充分体现面向对象思想)(转)
程序清单一览
bean类
package com.software.usermanager.bean; public class Users {
private String id;
private String name;
private String age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
} }
dao类
package com.software.usermanager.dao; import com.software.usermanager.bean.Users;
import com.software.usermanager.util.PageModel;
import java.util.List; public interface UsersDAO {
public boolean insert(Users user); //增
public boolean delete(String id); //单条删除
public boolean delete(String[] userIds); //批量删除
public boolean update(Users user); //修改
public List<Users> query(); //全部查询
public Users query(String id); //单记录查询
public PageModel query(int pageNo, int pageSize); //分页查询
public PageModel query(int pageNo, int pageSize,String condition); //分页模糊查询
public boolean Login(String name,String password); //登录 }
daoimpl类
package com.software.usermanager.dao;
import com.software.usermanager.util.OptTemplate;
import java.sql.ResultSet;
import java.util.List; import com.software.usermanager.bean.Users;
import com.software.usermanager.util.*; public class UsersDAOImpl implements UsersDAO { private OptTemplate optTemplate = null; public UsersDAOImpl(OptTemplate optTemplate) {
super();
this.optTemplate = optTemplate;
}
public boolean Login(String name, String password) {
// TODO Auto-generated method stub
return false;
} public boolean delete(String id) {
String sql = "delete from users where id=?";
Object[] obj = { id };
return optTemplate.update(sql, obj, false);
} public boolean delete(String[] userIds) {
StringBuffer sbStr = new StringBuffer();
Object[] obj = userIds;
;
for (int i = 0; i < userIds.length; i++) {
sbStr.append("?,");
}
String sql = "delete from users where id in("
+ sbStr.substring(0, sbStr.length() - 1) + ")";
return optTemplate.update(sql, obj, false);
} public boolean insert(Users user) {
String sql = "insert into users(id,name,age) values(?,?,?)";
Object[] obj = {user.getId(),user.getName(),user.getAge()};
return optTemplate.update(sql, obj, false);
} @SuppressWarnings("unchecked")
public List<Users> query() {
String sql = "select * from users";
Object[] obj = {};
return (List<Users>) optTemplate.query(sql, obj, new UsersDAOObjectMapper()); } public Users query(String id) {
String sql = "select * from users";
Object[] obj = {};
return (Users) optTemplate.query(sql, obj, new UsersDAOObjectMapper()).get(0);
} public PageModel query(int pageNo, int pageSize) {
String sql1 = "select * from users";
Object[] obj1 = {};
List<Users> list1 = (List<Users>) optTemplate.query(sql1, obj1,
new UsersDAOObjectMapper());
int i = list1.size();
String sql="select * from (select j.*,rownum rn from (select * from users) j where rownum<=?) where rn>?";
Object[] obj = {pageNo * pageSize, (pageNo - 1) * pageSize};
List<Users> list = (List<Users>) optTemplate.query(sql, obj,
new UsersDAOObjectMapper());
PageModel pagemodel = new PageModel();
pagemodel.setPageNo(pageNo);
pagemodel.setPageSize(pageSize);
pagemodel.setList(list);
pagemodel.setTotalRecords(i);
return pagemodel;
} public PageModel query(int pageNo, int pageSize, String condition) {
String sql1 = "select * from users";
Object[] obj1 = {};
List<Users> list1 = (List<Users>) optTemplate.query(sql1, obj1,
new UsersDAOObjectMapper());
int i = list1.size();
String sql="select * from (select j.*,rownum rn from (select * from users where id like '"+condition+"%' or name like '"+condition+"%') j where rownum<=?) where rn>?";
Object[] obj = {pageNo * pageSize, (pageNo - 1) * pageSize};
List<Users> list = (List<Users>) optTemplate.query(sql, obj,
new UsersDAOObjectMapper());
PageModel pagemodel = new PageModel();
pagemodel.setPageNo(pageNo);
pagemodel.setPageSize(pageSize);
pagemodel.setList(list);
pagemodel.setTotalRecords(i);
return pagemodel;
} public boolean update(Users user) {
String sql = "update users set name=?,age=? where id=?";
Object[] obj = {user.getName(),user.getAge(),user.getId()};
return optTemplate.update(sql, obj, false);
} }
class UsersDAOObjectMapper implements ObjectMapper{
public Object mapping(ResultSet rs){
Users u=new Users();
try{ u.setId(rs.getString("id"));
u.setName(rs.getString("age"));
u.setName(rs.getString("name")); }catch(Exception ex){
ex.printStackTrace();
} return u;
} }
util类
package com.software.usermanager.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List; import com.software.usermanager.db.DBConnection; public class OptTemplate {
public Object find(String sql,Object[] obj,ObjectMapper mapper){
Object o=null;
Connection conn=null;
PreparedStatement pstmt=null;
try{
conn=DBConnection.getConn();
pstmt=conn.prepareStatement(sql);
for(int i=0;i<obj.length;i++){
pstmt.setObject(i+1, obj[i]);
ResultSet rs=pstmt.executeQuery();
if(rs.next()){
o=mapper.mapping(rs);
}
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
try{
pstmt.close();
conn.close();
}catch(SQLException ex){
ex.printStackTrace();
}
}
return o;
} public List<? extends Object> query(String sql,Object[] obj,ObjectMapper mapper){
Object o=null;
List<Object> list=new ArrayList<Object>();
Connection conn=null;
PreparedStatement pstmt=null;
try{
conn=DBConnection.getConn();
pstmt=conn.prepareStatement(sql);
for(int i=0;i<obj.length;i++){
pstmt.setObject(i+1, obj[i]);
}
ResultSet rs=pstmt.executeQuery(); while(rs.next()){ o=mapper.mapping(rs);
list.add(o);
} }catch(SQLException ex){
ex.printStackTrace();
}finally{
try{
pstmt.close();
conn.close();
}catch(SQLException ex){
ex.printStackTrace();
}
}
return list;
}
public boolean update(String sql,Object[] obj,boolean isGenerateKey){
Connection conn=null;
PreparedStatement pstmt=null;
boolean bFlag=false;
try{
conn=DBConnection.getConn();
pstmt=isGenerateKey ? conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS):conn.prepareStatement(sql);
for(int i=0;i<obj.length;i++){
pstmt.setObject(i+1, obj[i]);
}
conn.setAutoCommit(false);
int i=pstmt.executeUpdate();
conn.commit();
if(i>0)
bFlag=true;
}catch(SQLException ex){
ex.printStackTrace();
}finally{
try{
conn.close();
pstmt.close(); }catch(SQLException ex){
ex.printStackTrace();
}
}
return bFlag;
} }
package com.software.usermanager.util; import java.sql.ResultSet; public interface ObjectMapper {
public Object mapping(ResultSet rs); }
分页封装类
package com.software.usermanager.util; import java.util.List; public class PageModel<T> { //结果集
private List<T> list; //记录数
private int totalRecords; //每页多少条数据
private int pageSize; //第几页
private int pageNo; /**
* 返回总页数
* @return
*/
public int getTotalPages() {
return (totalRecords + pageSize - 1) / pageSize;
} /**
* 首页
* @return
*/
public int getTopPageNo() {
return 1;
} /**
* 上一页
* @return
*/
public int getPreviousPageNo() {
if (this.pageNo <= 1) {
return 1;
}
return this.pageNo - 1;
} /**
* 下一页
* @return
*/
public int getNextPageNo() {
if (this.pageNo >= getButtomPageNo()) {
return getButtomPageNo();
}
return this.pageNo + 1;
} /**
* 尾页
* @return
*/
public int getButtomPageNo() {
return getTotalPages();
} public List<T> getList() {
return list;
} public void setList(List<T> list) {
this.list = list;
} public int getTotalRecords() {
return totalRecords;
} public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
} public int getPageSize() {
return pageSize;
} public void setPageSize(int pageSize) {
this.pageSize = pageSize;
} public int getPageNo() {
return pageNo;
} public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
}
数据库配置文件dbconf.properties
#oracle连接实例
driverClass = oracle.jdbc.driver.OracleDriver
url = jdbc:oracle:thin:@192.168.137.23:1521:orcl
username = 用户名
password = 密码
数据库封装类
package com.software.usermanager.db; import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties; public class DBConnection { private static Connection conn = null;
private static Properties props = null; static {
props = new Properties();
try {
props.load(DBConnection.class.getResourceAsStream("/dbconf.properties"));
} catch (IOException e1) {
e1.printStackTrace();
}
try {
Class.forName(props.getProperty("driverClass"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} public static Connection getConn(){
try {
conn = DriverManager.getConnection(props.getProperty("url"), props.getProperty("username"), props.getProperty("password"));
conn.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
} public void closeConn(){
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} }
}
junit测试类
package com.software.usermanager.test; import java.util.List; import com.software.usermanager.bean.Users; import org.apache.tomcat.jni.User;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import com.software.usermanager.dao.UsersDAO;
import com.software.usermanager.dao.UsersDAOImpl;
import com.software.usermanager.db.DBConnection;
import com.software.usermanager.util.OptTemplate;
import com.software.usermanager.util.PageModel; public class UserTest {
DBConnection dbConn = null; @Before
public void setUp() {
dbConn = new DBConnection();
} @After
public void tearDown() {
dbConn.closeConn(); }
/************测试插入记录***************/ // @Test
// public void testinsert() {
// UsersDAO usersdao = new UsersDAOImpl(new OptTemplate());
// for(int i=0;i<20;i++){
// Users u = new Users();
// u.setId(""+i);
// u.setName("郑六");
// u.setAge("2"+i);
// boolean b=usersdao.insert(u);
// if(b==false){
// System.out.println("插入失败");
// }else{
// System.out.println("插入成功");
// }}
//
//
// }
/************测试修改记录***************/ // @Test
// public void testupdate() {
// UsersDAO usersdao = new UsersDAOImpl(new OptTemplate());
// Users u = new Users();
// u.setId("5");
// u.setName("郑六");
// u.setAge("21");
// boolean b=usersdao.update(u);
// if(b==false){
// System.out.println("更新失败");
// }else{
// System.out.println("更新成功");
// }
//
//
// }
/************测试删除单条记录***************/ // @Test
// public void testdeleteById() {
// UsersDAO usersdao = new UsersDAOImpl(new OptTemplate());
// boolean b=usersdao.delete("2");
// if(b==false){
// System.out.println("删除失败");
// }else{
// System.out.println("删除成功");
// }
//
// }
/************测试批量删除记录***************/
//
// @Test
// public void testdeleteByArray() {
// UsersDAO usersdao = new UsersDAOImpl(new OptTemplate());
// String[] s={"3","4","5"};
// boolean b=usersdao.delete(s);
// if(b==false){
// System.out.println("删除失败");
// }else{
// System.out.println("删除成功");
// }
//
// }
/*********查询全部记录结果集为泛型 ************/
// @Test
// public void testqueryAll(){
// UsersDAO usersdao = new UsersDAOImpl(new OptTemplate());
// List<Users> list=usersdao.query();
// for(Users u:list){
// System.out.println(u.getId());
// }
// }
/*********查询单条记录结果集为对象 ************/
// @Test
// public void testqueryAll(){
// UsersDAO usersdao = new UsersDAOImpl(new OptTemplate());
// Users u=usersdao.query("7");
// System.out.println(u.getName());
//
// }
// /*********分页查询全部记录结果集为pagemodel************/
// @Test
// public void testqueryAll(){
// UsersDAO usersdao = new UsersDAOImpl(new OptTemplate());
// PageModel pml=usersdao.query(2,2);
// List<Users> list=pml.getList();
// for(Users u:list){
// System.out.println(u.getId());
// }
// }
/*********分页模糊查询全部记录结果集为pagemodel************/
@Test
public void testqueryAll(){
UsersDAO usersdao = new UsersDAOImpl(new OptTemplate());
PageModel pml=usersdao.query(1,2,"2");
List<Users> list=pml.getList();
for(Users u:list){
System.out.println(u.getId());
}
} }
注意:以下代码非本程序必须代码,仅供自己笔记之用
Filter
package com.software.usermanager.filter; import java.io.IOException; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; public class FilterEncoding implements Filter { private String encoding = "utf-8";
public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response,
FilterChain arg2) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
arg2.doFilter(request, response); } public void init(FilterConfig arg0) throws ServletException {
encoding = arg0.getInitParameter("encoding");
} }
Listener
package com.software.usermanager.listener; import java.util.Date; import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; public class Listener implements ServletContextListener
{
public void contextDestroyed(ServletContextEvent event)
{
// 销毁记录
} public void contextInitialized(ServletContextEvent event)
{
// 记录登录信息
Date date = new Date();
event.getServletContext().log(date.toString());
}
}
web.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>xkxt</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>Encoding</filter-name>
<filter-class>com.software.usermanager.FilterEncoding</filter-class> <init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <listener>
<listener-class>com.software.usermanager.Listener</listener-class>
</listener>
<servlet>
<servlet-name>xkxt</servlet-name>
<servlet-class>com.software.usermanager.XKXTServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xkxt</servlet-name>
<url-pattern>/action</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>querydqm</servlet-name>
<servlet-class>com.software.usermanager.DQMServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>querydqm</servlet-name>
<url-pattern>/action</url-pattern>
</servlet-mapping> </web-app>
Java经典封装JDBC模板(充分体现面向对象思想)(转)的更多相关文章
- JAVA框架 Spring JDBC模板
一:引入jar包: 1.数据驱动jar包: dbcp依赖的包: spring的事务包和数据库包: IOC包AOP包.log4j的包: 所有的jar包: 编写测试类: 注入JdbcTemplate类,该 ...
- java高级特性(1)--理解面向对象思想
前言: 优秀的代码具备:高性能.可重用.可扩展.易维护.易理解 具体实现: 高性能:合理使用算法,数据结构等等 可重用:封装.继承 可扩展:多态 易维护.易理解:命名规范 + 注解 面向对象是一种思想 ...
- java语言基础(四)_面向对象_类_对象_封装_构造
面向对象 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计.开发计算机程序. 这里的对象泛指现实中一切事物,每种事物都具备 ...
- [原创]java WEB学习笔记109:Spring学习---spring对JDBC的支持:使用 JdbcTemplate 查询数据库,简化 JDBC 模板查询,在 JDBC 模板中使用具名参数两种实现
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 写Java程序要体现面向对象
对于之前写的一篇文章现在想想存在不足之处,之前写的测试ArrayList和LinkedList的各项操作性能比较的程序没有体现面向对象的封装特性,所以,今天把代码重新写了一遍,其实改动的地 ...
- java框架之Spring(3)-JDBC模板使用&事务管理
下面内容使用到的 jar 包下载 JDBC模板使用 入门 1.导包,如要导入 Spring 的基本开发包.数据库驱动包.Spring 提供的 JDBC 模板包,如下: 2.测试: @Test publ ...
- Java学习笔记43(Spring的jdbc模板)
在之前的学习中,我们执行sql语句,需要频繁的开流,关流比较麻烦,为了更加的简化代码,我们使用Spring 的jdbc模板jdbcTemplate来简化我们的代码量:需要导入的包有: 我们在之前的dr ...
- JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块
JAVA之旅(四)--面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块 加油吧,节奏得快点了 1.概述 上篇幅也是讲了这点,这篇幅就着重的讲一下思想和案例 就拿买 ...
- java:Session(概述,三层架构实例(实现接口封装JDBC),Session实现简单购物车实例)
1.Session概述: Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存 ...
随机推荐
- NULL, nil, Nil详解
原文地址:http://blog.csdn.net/wzzvictory/article/details/18413519 感谢原作者 作者:wangzz 原文地址:http://blog.cs ...
- jQuery获取屏幕的宽度
Javascript: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.b ...
- Cordova 设置全屏及退出全屏切换
设置全屏在super.init();之前 最后才退出全屏. 以下为具体代码: package com.agile.ittm; import android.os.Bundle; import andr ...
- uva 10881 - Piotr's Ants
这个题的突破点就在于蚂蚁不能够穿过对方,故相对位置不变: 另外,又可以把蚂蚁看成运动方向不变: 代码: #include<cstdio> #include<algorithm> ...
- hdu 4433
一道dp题,虽然知道是dp,但是不会做: 学习了ACM_cxlove大神的代码,终于明白了: 搬运工: dp[i][j][k]表示 前i个已经完全匹配,而这时候,第i+1个已经加了j位,第i+2位已经 ...
- phpstorm 强大的活动模板 可以自定义注释,代码段,根据cms订制自动提示
http://jingyan.baidu.com/article/8275fc86badd6346a03cf6aa.html [PHP] phpstorm的使用(1) http://v.youku.c ...
- 移动应用产品开发-android开发(三)
历时一个多月的时间,这款APP算是开发完成了,最近在测试完善中,比较空闲好好总结下. 之前两次已经提到开发过程中的主要的知识点,这次主要总结下解决问题方法,http请求和安全. 首先讲下解决问题的方法 ...
- 【POJ 1988】 Cube Stacking (带权并查集)
Cube Stacking Description Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)id ...
- nyist 740 “炫舞家“ST(动态规划)
dp[i][j][k]:表示第i次踩踏后两脚的位置j,k 先固定一只脚的位置j,第i次踩踏后,状态为dp[i][j][a[i]]或者dp[i][a[i]][j],其中a[i]表示第i个输入的元素,则有 ...
- Codevs_1040_[NOIP2001]_统计单词个数_(划分型动态规划)
描述 http://codevs.cn/problem/1040/ 与Codevs_1017_乘积最大很像,都是划分型dp. 给出一个字符串和几个单词,要求将字符串划分成k段,在每一段中求共有多少单词 ...