BaseDao的增删改查【入门级】

文章目录

一.BaseDao是什么

BaseDao是为了解决数据库中增删改查而的提供的一个定义类,是一个接口代码,公共方法的接口类。

BaseDao的特性

(1).支持复杂查询

对于数据库中所对应的复杂的查询,可以在编译时自动生成Query类,而Query类可以帮助更加方便地构建查询条件。

(2).逻辑删除功能

支持逻辑删除,在逻辑删除模式下,删除操作自动切换为更新删除标记操作,新增操作自动初始化为未删除状态,更新和查询操作自动忽略已删除数据。

(3). 支持分库分表

内置分库分表功能,支持指定键分键和自定义分库分表算法。

(4).代码生成

提供工具通过数据库表结构自动生成Entity类,提高开发效率。

二.BaseDao的操作

1.第一步创建名叫BaseDao的类
2.开始实现数据库与Java的连接
java 复制代码
public class BaseDao {
   private String driver="com.mysql.jdbc.Driver"; //数据库驱动字符串
   private String url="jdbc:mysql://localhost:3306/a?serverTimezone=GMT"; //连接URL字符串
   private String user="root";  //数据库用户名
   private String password="ww121212"; //用户密码
	/**
     * 获取数据库连接对象
     */
   public Connection getConnection(){
       Connection con=null;
        				// 获取连接并捕获异常
       try{
           Class.forName(driver);
           con=DriverManager.getConnection(url,user,password);
       }catch (Exception e){
           e.printStackTrace(); 	// 异常处理
       }
       return  con;				// 返回连接对象

   }
3. 查询的操作
java 复制代码
    /**
     * 查询一个字段 (只会返回一条记录且只有一个字段;常用场景:查询总数量)
     *  1. 得到数据库连接
     *  2. 定义sql语句
     *  3. 预编译
     *  4. 如果有参数,则设置参数,下标从1开始 (数组或集合、循环设置参数)
     *  5. 执行查询,返回结果集
     *  6. 判断并分析结果集
     *  7. 关闭资源
     *
     *  注:需要两个参数:sql语句、所需参数的集合
     *
     * @param sql
     * @param params
     * @return
     */
    public static Object findSingleValue(String sql, List<Object> params) {
        Object object = null;
        Connection conn= null;
        PreparedStatement pstmt = null;
        ResultSet rs= null;

        try {
            // 获取数据库连接
            conn= getConnetion();
            // 预编译
            pstmt = conn.prepareStatement(sql);
            // 如果有参数,则设置参数,下标从1开始
            if (params != null && params.size() > 0) {
                // 循环设置参数,设置参数类型为Object
                for (int i = 0; i < params.size(); i++){
                    pstmt .setObject(i+1, params.get(i));
                }
            }
            // 执行查询,返回结果集
            rs= pstmt .executeQuery();
            // 判断并分析结果集
            if (rs.next()) {
                object = rs.getObject(1);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            this.close(rs, pstmt , conn);
        }
        return object;
    }
4. 增删改的操作
java 复制代码
 /**
	 * 增、删、改的操作
	 * @param sql 预编译的 SQL 语句          
	 * @param param 参数的字符串数组          
	 * @return 影响的行数
	 */
	public int exceuteUpdate (String preparedSql, Object[] param) {
		PreparedStatement pstmt = null;
		int num = 0;
		conn =  getConnection(); 
		try {
			pstmt = conn.prepareStatement(preparedSql);
			if (param != null) {
				for (int i = 0; i < param.length; i++) {
                     	//为预编译sql设置参数
					pstmt.setObject(i + 1, param[i]); 
				}
			}
			num = pstmt.executeUpdate(); 
		} catch (SQLException e) {
			e.printStackTrace();
		} finally{
			closeAll(conn,pstmt,null);
		}
		return num;
	}
}
5.关闭数据库
java 复制代码
/**
     * 关闭数据库连接
     * @param conn 数据库连接
     * @param stmt Statement对象
     * @param rs 结果集
     */
    public void closeAll(Connection conn, Statement stmt, 
                   ResultSet rs) {
        // 若结果集对象不为空,则关闭
        if (rs != null) {
            try {
                rs.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        // 若Statement对象不为空,则关闭
        if (stmt != null) {
            try {
                stmt.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        // 若数据库连接对象不为空,则关闭
        if (conn != null) {
            try {
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

以上就是BaseDao的基本操作了。

相关推荐
Coder_Boy_3 分钟前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.4 分钟前
Day06——权限认证-项目集成
java
瑶山6 分钟前
Spring Cloud微服务搭建四、集成RocketMQ消息队列
java·spring cloud·微服务·rocketmq·dashboard
abluckyboy13 分钟前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
2301_8187320615 分钟前
前端调用控制层接口,进不去,报错415,类型不匹配
java·spring boot·spring·tomcat·intellij-idea
2501_9419820528 分钟前
深度对比:Java、Go、Python 实现企微外部群推送,哪个效率更高?
java·golang·企业微信
马猴烧酒.1 小时前
【面试八股|JAVA多线程】JAVA多线程常考面试题详解
java·服务器·数据库
sino爱学习1 小时前
高性能线程池实践:Dubbo EagerThreadPool 设计与应用
java·后端
风生u2 小时前
activiti7 详解
java
岁岁种桃花儿2 小时前
SpringCloud从入门到上天:Nacos做微服务注册中心(二)
java·spring cloud·微服务