JDBC工具类应该咋写?这是我的写法!
Posted GaoYang-笔迹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC工具类应该咋写?这是我的写法!相关的知识,希望对你有一定的参考价值。
一、类图分析
我是的dbutils这个工具来实现的,先是用单例模式来创建jdbcutils类,使用的时候通过继承的方式来设计beanDao模板类。
二、代码实现
1、JDBCUtils.java
/**
* @author: GaoYang
* @Company http://www.geq2020.top
* @className: jdbcUtils.java
* @Description: TODO
*/
public class JDBCUtils
// 创建当前类对象
private static JDBCUtils dbutils;
// 准备连接对象
private Connection conn;
// 准备连接属性
private String driver;
private String url;
private String userName;
private String passWord;
/**
*使用单例模式创建工具类对象
**/
// 1、私有化构造方法
private JDBCUtils()
super();
// 2、创建实例化对象,添加双重校验锁,保障线程安全
public static JDBCUtils getDbUtils()
if(dbutils == null)
synchronized (JDBCUtils.class)
if(dbutils == null)
dbutils =new JDBCUtils();
return dbutils;
/**
* 创建连接对象,连接数据
*/
// 1、通过读取配置文件,获取并设置数据库连接属性(Properties是获取.properties文件里的数据流)
public void initFromProperties(Properties p)
driver = p.getProperty("driver");
url = p.getProperty("url");
userName = p.getProperty("username");
passWord = p.getProperty("password");
try
Class.forName(driver);
conn = DriverManager.getConnection
(url,userName,passWord);
catch (Exception e)
e.printStackTrace();
// 2、创建连接对象
public Connection getConn()
System.out.println("utils"+this.conn);
return this.conn;
2、连接属性
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/shop
username=root
password=123456
3、BeanDao.java
/**
* @author: GaoYang
* @Company http://www.geq2020.top
* @className: BeanDao.java
* @Description: TODO
*/
public class BeanDao<T>
private static Connection conn;
QueryRunner qr = new QueryRunner();
public BeanDao(Connection conn)
this.conn = conn;
// 返回数据集合(查询所有、模糊查询等)
public List<T> listQuery(String sql,Class<T> clazz,Object...objects) throws Exception
return qr.query(conn,sql,new BeanListHandler<T>(clazz),objects);
// 返回单个实例
public T queryOne(String sql,Class<T> clazz,Object object) throws SQLException
return qr.query(conn,sql,new BeanHandler<T>(clazz),object);
// 添加之后返回主键
public int addWithBackPK(String sql, Object...params) throws Exception
PreparedStatement preparedStatement = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
int i = 1;
for (Object obj : params)
preparedStatement.setObject(i, obj);
i++;
preparedStatement.executeUpdate();
ResultSet generatedKeys = preparedStatement.getGeneratedKeys();
long generateKey = 0;
while (generatedKeys.next())
generateKey = generatedKeys.getLong(1);
return (int)generateKey;
// 更新数据
public int update(String sql,Object...objects) throws SQLException
return qr.update(conn,sql,objects);
// 批量更新
public int updateBatch(String sql, Object[][] objects) throws SQLException
return qr.batch(conn, sql,objects).length;
// 释放资源
public void closeConn() throws SQLException
conn.close();
4、UersDao.java
/**
* @author: GaoYang
* @Company http://www.geq2020.top
* @className: UserDao.java
* @Description: TODO
*/
public class UserDao extends BeanDao<User>
/**
* 继承BeanDao类
* @param conn
*/
public UserDao(Connection conn)
super(conn);
5、测试类
/**
* @author: GaoYang
* @Company http://www.geq2020.top
* @className: test.java
* @Description: TODO
*/
public class test
private static Connection conn;
private static UserDao ud = null;
public static void main(String[] args)
try
System.out.println("开始加载数据库配置资源...");
// 读取properties配置文件的配置信息getResourceAsStream是一个输入流
InputStream is = initServlet.class.getResourceAsStream("/db.properties");
// 创建properties对象,用来存出获取到流
Properties pro = new Properties();
// 将流封装到properties对象
pro.load(is);
// 创建JDBC工具类对象
JDBCUtils jdbcUtils = JDBCUtils.getDbUtils();
// 加载资源,并实例化Connection对象
jdbcUtils.initFromProperties(pro);
System.out.println("数据库配置资源加载完成...");
catch (IOException e)
e.printStackTrace();
// 获取Conn数据库连接对象(通过单例方式)
conn = JDBCUtils.getDbUtils().getConn();
// 将连接对象赋值给
ud = new UserDao(conn);
// 准备sql
String sql = "select * from user";
// 创建返回值对象
List<User> list = null;
try
// 接受结果集
list = ud.listQuery(sql, User.class);
catch (Exception e)
e.printStackTrace();
// 遍历结果级
if(list != null)
for(User u:list)
System.out.println(u.toString());
三、应用到web项目中
在web项目中使用这种方式,我们可以在服务器初始化的时候,通过重写Servlet初始化方法init(),来创建Connection对象,这样我们就可以在服务器开启后就实现了Connetion对象的创建。
InitServlet
@WebServlet("/init.do")
public class initServlet extends HttpServlet
private static final long serialVersionUID = 1L;
/**
* @see
*/
public initServlet()
super();
/**
* 当服务器初始化的时候,进行开启连接数据库
*/
@Override
public void init() throws ServletException
try
super.init();
System.out.println("开始加载数据库配置资源...");
// 读取properties配置文件的配置信息getResourceAsStream是一个输入流
InputStream is = initServlet.class.getResourceAsStream("db.properties");
// 创建properties对象,用来存出获取到流
Properties pro = new Properties();
// 将流封装到properties对象
pro.load(is);
// 创建JDBC工具类对象
JDBCUtils jdbcUtils = JDBCUtils.getDbUtils();
// 去创建了对象
jdbcUtils.initFromProperties(pro);
System.out.println("数据库配置资源加载完成...");
catch (IOException e)
e.printStackTrace();
这样我们就将一个较为灵活的工具类给实现了!如有更好的方法,欢迎指教!
以上是关于JDBC工具类应该咋写?这是我的写法!的主要内容,如果未能解决你的问题,请参考以下文章
Java 中封装JDBC连接到JDBCUtils工具类的详解