BaseJDBC和CRUDDAO的写法实例代码
作者:周振宇 发布时间:2022-09-03 14:13:33
标签:BaseJDBC,CRUDDAO
我们首先看下BASEJDBC的写法实例:
package com.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mysql.jdbc.Driver;
public class BaseJDBC {
// 表示你要操作的是哪种类型的数据库
private final String DRIVER = "com.mysql.jdbc.Driver";
// 表示你要连接的是哪一台电脑的服务器端口号是多少数据库的名字是什么
private final String URL = "jdbc:mysql://localhost:3306/zzy";//有时这里需要加上字符集
// 登录数据库的用户名
private final String USERNMAE = "root";
// 登录数据库的密码
private final String PASSWORD = "root";
/**
* 注册驱动 获取连接
*
* @return
*/
public Connection getConnection() {
try {
//Driver d=new Driver();
// 注册驱动:反射(是一项很高深的技术)
Class.forName(DRIVER);
// 由连接大管家创建连接对象
return DriverManager.getConnection(URL, USERNMAE, PASSWORD);
} catch (ClassNotFoundException e) {
//e.printStackTrace("数据库的驱动文件没有找到");
} catch (SQLException e) {
//数据库的连接错误
e.printStackTrace();
}
return null;
}
/**
* 关闭连接释放资源
* @param con
* @param st
* @param rt
*/
public void closeAll(Connection con, Statement st, ResultSet rt) {
try {
if (rt != null) {
rt.close();
rt = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (st != null) {
st.close();
st = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (con != null) {
con.close();
con = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
CRUDDAO 写法代码实例:
package com.dao;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.*;
import java.util.*;
import java.util.Map.Entry;
/**
*
* @author zzy
*
* 2016年12月1日下午1:49:49
*/
public class CRUDDAO<T> extends BaseJDBC {
private Connection con = null;
private PreparedStatement pt = null;
private Statement st = null;
private ResultSet rt = null;
private Class<T> c;
public CRUDDAO() {
}
public CRUDDAO(Class<T> c) {
this.c = c;
}
/**
* 查询操作要改造的地方 第一:参数必须抽象 第二:返回类型必须抽象
*
* @param <T>
* @param <T>
*
* @return Map<Integer, List<T>>
*/
public Map<Integer, List<T>> selectAll(Map<String, Object[]> m) {
int index = 0;
Map<Integer, List<T>> map = new LinkedHashMap<Integer, List<T>>();
List<T> list = null;
try {
con = super.getConnection();
if (con != null) {
Set<Entry<String, Object[]>> set = m.entrySet();
for (Entry<String, Object[]> entry : set) {
list = new ArrayList<T>();
pt = con.prepareStatement(entry.getKey());
this.bind(entry.getValue());
rt = pt.executeQuery();
while (rt.next()) {
list.add(this.toBean2());
}
map.put(++index, list);
}
} else {
System.out.println("数据库连接失败");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
super.closeAll(con, pt, rt);
}
return map;
}
/**
* 将数据库查询到的数据进行封装 封装成实体类之后再返回给调用者
*
* @return
*/
private T toBean() {
T t = null;
try {
t = c.newInstance();
Method[] m = c.getMethods();
ResultSetMetaData rmt = rt.getMetaData();
for (int i = 1, count = rmt.getColumnCount(); i <= count; i++) {
String columName = rmt.getColumnName(i);
columName = "set" + columName.substring(0, 1).toUpperCase()
+ columName.substring(1);
for (int j = 0; j < m.length; j++) {
if (columName.equals(m[j].getName())) {
m[j].invoke(t, rt.getObject(i));
break;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return t;
}
private T toBean2() {
T t = null;
try {
// 创建反射类的实例
t = c.newInstance();
// 反射出所有字段
Field[] field = c.getDeclaredFields();
for (Field f : field) {
// 根据反射的字段名得到数据库中的字段值
Object value = rt.getObject(f.getName());
f.setAccessible(true);// 打开私有字段的操作权限
f.set(t, value);// 调用这个字段的公有的set方法封装字段的值
}
} catch (Exception e) {
e.printStackTrace();
}
return t;
}
/**
* 绑定参数
*
* @param obj
*/
private void bind(Object[] obj) {
try {
if (obj != null) {
for (int i = 0, k = obj.length; i < k; i++) {
pt.setObject(i + 1, obj[i]);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 修改操作 进行的事务的控制 所有命令要么同时提交成功 要么同时回滚
*
* @param name
* @param id
* @return
*/
public int[] updateAll(Map<String, Object[]> map) {
int[] row = new int[map.size()];
int index = 0;
int error = 0;
try {
con = super.getConnection();
if (con != null) {
Set<Entry<String, Object[]>> set = map.entrySet();
// 关闭连接对象的自动提交的功能
con.setAutoCommit(false);
for (Entry<String, Object[]> entry : set) {
pt = con.prepareStatement(entry.getKey());
this.bind(entry.getValue());
row[index] = pt.executeUpdate();
if (row[index] == 0) {
throw new Exception("修改失败,数据回滚!");
}
index++;
}
} else {
System.out.println("数据库连接失败");
}
} catch (Exception e) {
error++;
e.printStackTrace();
} finally {
if (error > 0) {
try {
// 将前面已经执行的命令回滚
con.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
} else {
try {
// 全部提交
con.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
super.closeAll(con, st, null);
}
return row;
}
}
来源:http://blog.csdn.net/fvdfsdafdsafs/article/details/53420589
0
投稿
猜你喜欢
- Apache Dubbo是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡
- 在前面的内容已经学会了如何定义变量和初始化变量。定义变量的目的就是为了操作数据。Java 语言中给我们提供了专门用来操作这些数据的代码符号,
- 配置文件<!-- 文件上传 --> <bean id="multipartResolver" clas
- Java基于对象流实现银行系统的具体代码,供大家参考,具体内容如下系统特点:数据持久化到文件中,系统启动后,加载文件中数据到集合中,相当于做
- yml文件参数的读取附上一个较为常见的application.yml文件示例server: port: 9999 u
- 前言接口调试是每个软件开发从业者必不可少的一项技能,一个项目的的完成,可能接口测试调试的时间比真正开发写代码的时间还要多,几乎是每个开发的日
- 什么是递归?用Java写一个简单的递归程序递归的定义递归(recursion):以此类推是递归的基本思想,将规模大的问题转化为规模小的问题来
- 近期,公司推行正版化,本人使用的是JetBrains教育版,是不允许进行商业开发的,因此开启了艰难的备用IDE选型之路。最终,我选定了轻量级
- 1、简介双重检查锁定(也叫做双重检查锁定优化)是一种软件设计模式。它的作用是减少延迟初始化在多线程环境下获取锁的次数,尤其是单例模式下比较突
- 面试题1:你了解线程池么?简单介绍一下。java提供的一个java.util.concurrent.Executor接口的实现用于创建线程池
- ftp/sftp概念及搭建ftp是一种文件传输协议,让客户端和服务端能够互相传递文件,图片等数据;方便快捷;sftp是ssh file tr
- 时间处理相关类:1.java.util.Date:时间类2.java.text.DateFormat:时间格式化类(抽象类),实现类:jav
- 1.会话会话: 用户打开了一个浏览器,点击了很多超链接,访问多个web次元,关闭浏览器,这个过程可以称之为会话有状态会话: 带有访问记录的会
- 本文研究的主要是Hibernate hql查询的相关内容,具体如下。HQL介绍Hibernate语言查询(Hibernate Query L
- static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概
- 1.首先,八种基本数据类型分别是:int、short、float、double、long、boolean、byte、char; &
- 首先对于一个SpringBoot工程来说,最明显的标志的就是 @SpringBootApplication它标记了这是一个SpringBoo
- JDK12的五大重要新特性Java12在March 19, 2019发布了。在2017年发布Java 9之后,Java平台发布节奏已从每3年
- 背景java程序员一般写的是后端服务是JavaWeb类型的项目,主要包括Http接口和dubbo接口,Http接口一般采用的rest风格,那
- 在平常工作中我们经常会遇到maven引用的jar包冲突的事情,这时候我们就需要找出冲突的包,并将低版本或者缺少某些方法的jar给剔除掉。这个