JDBC篇-总结及其最终应用【BaseDAO.java】【JDBCUtils.java】 灰太狼 2021-06-24 13:58 294阅读 0赞 # JDBC 总结 # 总结 @Test public void testUpdateWithTx() { Connection conn = null; try { //1.获取连接的操作( //① 手写的连接:JDBCUtils.getConnection(); //② 使用数据库连接池:C3P0;DBCP;Druid //2.对数据表进行一系列CRUD操作 //① 使用PreparedStatement实现通用的增删改、查询操作(version 1.0 \ version 2.0) //version2.0的增删改public void update(Connection conn,String sql,Object ... args){} //version2.0的查询 public <T> T getInstance(Connection conn,Class<T> clazz,String sql,Object ... args){} //② 使用dbutils提供的jar包中提供的QueryRunner类 //提交数据 conn.commit(); } catch (Exception e) { e.printStackTrace(); try { //回滚数据 conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } }finally{ //3.关闭连接等操作 //① JDBCUtils.closeResource(); //② 使用dbutils提供的jar包中提供的DbUtils类提供了关闭的相关操作 } } # 应用 # ## 【BaseDAO.java】 ## /** * * @Description 定义一个用来被继承的对数据库进行基本操作的Dao * @author cVzhanshi Email:cvzhanshi@qq.com * @version * @date 2021年4月3日下午11:10:47 * */ public abstract class BaseDAO<T> { private QueryRunner queryRunner = new QueryRunner(); private Class<T> clazz = null; public BaseDAO() { // 获取子类的类型 Class clazz = this.getClass(); // 获取父类的类型 // getGenericSuperclass()用来获取当前类的父类的类型 // ParameterizedType表示的是带泛型的类型 ParameterizedType parameterizedType = (ParameterizedType) clazz.getGenericSuperclass(); // 获取具体的泛型类型 getActualTypeArguments获取具体的泛型的类型 // 这个方法会返回一个Type的数组 Type[] types = parameterizedType.getActualTypeArguments(); // 获取具体的泛型的类型· this.clazz = (Class<T>) types[0]; } /** * * @Description 通用的增删改操作 * @author cVzhanshi * @date 2021年4月3日下午11:10:32 * @param conn * @param sql * @param args * @return */ public int update(Connection conn, String sql, Object... args) { // sql中占位符的个数与可变形参的长度相同! int count = 0; try { count = queryRunner.update(conn, sql, args); } catch (SQLException e) { e.printStackTrace(); } return count; } /** * * @Description 获取一个对象 * @author cVzhanshi * @date 2021年4月3日下午11:11:18 * @param conn * @param sql * @param args * @return */ public T getBean(Connection conn, String sql, Object... args) { T t = null; try { t = queryRunner.query(conn, sql, new BeanHandler<T>(clazz), args); } catch (SQLException e) { e.printStackTrace(); } return t; } /** * * @Description 获取所有对象 * @author cVzhanshi * @date 2021年4月3日下午11:13:14 * @param conn * @param sql * @param args * @return */ public List<T> getBeanList(Connection conn, String sql, Object... args) { List<T> list = null; try { list = queryRunner.query(conn, sql, new BeanListHandler<T>(clazz), args); } catch (SQLException e) { e.printStackTrace(); } return list; } /** * * @Description 获取一个但一值得方法,专门用来执行像 select count(*)...这样的sql语句 * @author cVzhanshi * @date 2021年4月3日下午11:14:36 * @param conn * @param sql * @param args * @return */ public Object getValue(Connection conn, String sql, Object... args) { Object count = null; try { count = queryRunner.query(conn, sql, new ScalarHandler(), args); } catch (SQLException e) { e.printStackTrace(); } return count; } } ## 【JDBCUtils.java】 ## package com.atguigu4.util; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; import org.apache.commons.dbutils.DbUtils; import com.alibaba.druid.pool.DruidDataSourceFactory; import com.mchange.v2.c3p0.ComboPooledDataSource; /** * * @Description 操作数据库的工具类 * @author cVzhanshi Email:cvzhanshi@qq.com * @version * @date 2021年4月2日上午10:00:56 * */ public class JDBCUtils { /** * * @Description 获取数据库的连接 * @author cVzhanshi * @date 2021年4月2日上午10:01:19 * @return * @throws Exception */ public static Connection getConnection() throws Exception { // 1.读取配置文件中的4个基本信息 InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties"); Properties pros = new Properties(); pros.load(is); String user = pros.getProperty("user"); String password = pros.getProperty("password"); String url = pros.getProperty("url"); String driverClass = pros.getProperty("driverClass"); // 2.加载驱动 Class.forName(driverClass); // 3.获取连接 Connection conn = DriverManager.getConnection(url, user, password); return conn; } /** * * @Description 使用C3P0获取数据库的连接 * @author cVzhanshi * @date 2021年4月2日上午10:01:19 * @return * @throws Exception */ // 数据库连接池只需提供一个即可。 private static ComboPooledDataSource cpds = new ComboPooledDataSource("hellc3p0"); public static Connection getConnection1() throws SQLException { Connection conn = cpds.getConnection(); return conn; } /** * * @Description 使用DBCB获取数据库的连接 * @author cVzhanshi * @date 2021年4月3日下午9:15:02 * @return * @throws Exception */ // 创建一个DBCP数据库连接池 private static DataSource source; static { try { Properties pros = new Properties(); FileInputStream is = new FileInputStream(new File("src/dbcp.properties")); pros.load(is); source = BasicDataSourceFactory.createDataSource(pros); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection2() throws Exception { Connection conn = source.getConnection(); return conn; } /** * 使用Druid数据库连接池技术 */ private static DataSource source1; static{ try { Properties pros = new Properties(); InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties"); pros.load(is); source1 = DruidDataSourceFactory.createDataSource(pros); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection3() throws SQLException{ Connection conn = source1.getConnection(); return conn; } /** * * @Description 关闭连接和Statement的操作 * @author cVzhanshi * @date 2021年4月2日上午10:03:25 * @param conn * @param ps */ public static void closeResource(Connection conn, Statement ps) { try { if (ps != null) ps.close(); } catch (SQLException e) { e.printStackTrace(); } try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } /** * * @Description 关闭连接和Statement和ResultSet的操作 * @author cVzhanshi * @date 2021年4月2日上午10:02:59 * @param conn * @param ps * @param rs */ public static void closeResource(Connection conn, Statement ps, ResultSet rs) { try { if (ps != null) ps.close(); } catch (SQLException e) { e.printStackTrace(); } try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } } /** * * @Description 使用dbutils.jar中提供的DbUtils工具类,实现资源的关闭 * @author cVzhanshi * @date 2021年4月3日下午10:01:14 * @param conn * @param ps * @param rs */ public static void closeResource1(Connection conn,Statement ps,ResultSet rs){ // try { // DbUtils.close(conn); // } catch (SQLException e) { // e.printStackTrace(); // } // try { // DbUtils.close(ps); // } catch (SQLException e) { // e.printStackTrace(); // } // try { // DbUtils.close(rs); // } catch (SQLException e) { // e.printStackTrace(); // } DbUtils.closeQuietly(conn); DbUtils.closeQuietly(ps); DbUtils.closeQuietly(rs); } }
还没有评论,来说两句吧...