前言:本篇文章写于学习JAVA-JDBC相关知识的路上,记录当前学习点滴,希望对你有帮助。
文章目录
- 一、baseDao是什么?
- 二、使用步骤
- 1.引入库
- 2.读写数据
- 总结
一、baseDao是什么?
baseDAO一般是提供从数据库 增加、删除、修改记录、查询所有记录、查询符合某个条件记录、取得某条记录等方法的底层数据 *** 作自定义类。是一种接口代码,公共方法的接口类。
二、使用步骤 1.引入库package com.xxx.util; import com.xxx.entity.DirectorEntity; import com.xxx.entity.UserinfoEntity; import java.lang.reflect.Field; import java.sql.*; import java.util.*;2.读写数据
public class baseDao{ //声明配置文件读取器 protected ResourceBundle rb; //声明数据库驱动 protected String driver; //声明链接地址 protected String url; //声明用户名 protected String username; //声明密码 protected String password; //声明数据库链接类 protected Connection conn; //声明数据库执行类 protected PreparedStatement statement; //声明数据库结果类 protected ResultSet rs; public baseDao() { //加载配置文件 rb = ResourceBundle.getBundle("db"); //获取配置文件中的值 driver = rb.getString("jdbc.driver"); url = rb.getString("jdbc.url"); username = rb.getString("jdbc.username"); password = rb.getString("jdbc.password"); } //打开链接并获取链接 private void openConn() { try { Class.forName(driver); conn = DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } public int baseUpdate(String sql, Object... objs) { try { //格式化执行器内存 formatterStatement(sql, objs); //返回执行结果 return statement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { closeAll(); } //try中如果没有返回,则表示执行失败,必定返回0 return 0; } //泛型的抽象,抽象的抽象,类类 protected List baseQuery(Class tClass, String sql, Object... objs) { //初始化数据集合 List dataList = new ArrayList<>(); try { //格式化执行器内容 formatterStatement(sql, objs); //执行查询获取结果集 rs = statement.executeQuery(); //获取数据库表的元数据信息 ResultSetmetaData resultSetmetaData = rs.getmetaData(); //遍历结果 while (rs.next()) { //实例化泛型对象 T t = tClass.newInstance(); //获取所有对象属性 Field[] fs = tClass.getDeclaredFields(); //获取对象的父级实体类 Class pClass=tClass.getSuperclass(); //获取父级对象的所有属性 Field[] pfs=pClass.getDeclaredFields(); //初始化属性集合 List fieldList=new ArrayList<>(); for(Field f:fs){ fieldList.add(f); } for(Field f:pfs){ fieldList.add(f); } //获取总列数 int columnCount = resultSetmetaData.getColumnCount(); //遍历所有列 for (int i = 0; i < columnCount; i++) { //获取列名 String columnName = resultSetmetaData.getColumnName(i + 1); //初始化新的列名 StringBuilder newColumnName=new StringBuilder(columnName); //判断列名中是否存在下划线(_) if(columnName.indexOf("_")>0){ //根据下划线拆分字符创并得到数组 String[] cns=columnName.split("_"); //给新的列名重新赋值 newColumnName=new StringBuilder(cns[0]); //从第二个内容开始遍历数组 for(int j=1;j tClass,String sql,Object ...objs){ //查询结果获取集合 List list=baseQuery(tClass,sql,objs); //判断结果集是否合法 if(list.size()>1){ //主动抛出异常来终止代码的执行 throw new RuntimeException("查询结果为"+list.size()+"条,不符合规定!"); } if(list.size()==0){ return null; } //有结果则返回数据 return list.get(0); } //公用方法 private void formatterStatement(String sql, Object... objs) { try { //打开链接 openConn(); //获取执行器 statement = conn.prepareStatement(sql); //遍历占位符数组进行占位符赋值 for (int i = 0; i < objs.length; i++) { //占位符赋值 statement.setObject(i + 1, objs[i]); } } catch (SQLException e) { e.printStackTrace(); } } //关闭所有的流 private void closeAll() { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void main(String[] args) { baseDao baseDao = new baseDao<>(); String sql = "select * from mm_userinfo"; List userList = baseDao.baseQuery(UserinfoEntity.class, sql); for(int i=0;i directorDao = new baseDao<>(); String sql2 = "select * from mm_director"; List directorList = directorDao.baseQuery(DirectorEntity.class, sql2); for(DirectorEntity director:directorList){ System.out.println(director); } } }
总结 以上就是今天学习的内容,本文仅仅简单介绍了baseDao的定义以及如何写出一个basedao工具类,本文提供了大量的注释辅助你的理解,希望对你有帮助!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)