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的基本操作了。

相关推荐
泰山小张只吃荷园9 分钟前
期末Python复习-输入输出
java·前端·spring boot·python·spring cloud·docker·容器
Mr_Xuhhh11 分钟前
程序地址空间
android·java·开发语言·数据库
YSRM17 分钟前
异或-java-leetcode
java·算法·leetcode
大明湖的狗凯.20 分钟前
MySQL 中的乐观锁与悲观锁
java·数据库·mysql
z2023050825 分钟前
linux之调度管理(13)- wake affine 唤醒特性
java·开发语言
AI人H哥会Java26 分钟前
【JAVA】Java高级:Java网络编程——TCP/IP与UDP协议基础
java·开发语言
robin_suli1 小时前
Java多线程八股(三)一>多线程环境使用哈希表和ArrayList
java·开发语言·多线程·哈希表
NiNg_1_2341 小时前
Java中的多线程
java·开发语言
丁总学Java1 小时前
nohup java -jar supporterSys.jar --spring.profiles.active=prod &
java·spring·jar
呆呆小雅1 小时前
C# 结构体
android·java·c#