栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

BaseDao.java工具类的实现与使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

BaseDao.java工具类的实现与使用

前言:本篇文章写于学习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();
                //初始化属性集合
                ListfieldList=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;jtClass,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工具类,本文提供了大量的注释辅助你的理解,希望对你有帮助!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/685857.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号