day05-->JDBC-Dao模式

JDBC(五)-Dao模式

回顾JDBC操作、增删改查数据库操作

数据持久化

将程序中的数据在瞬时状态和持久状态间转换的机制即为数据持久化

通俗理解:JDBC数据没发保存,需要通过数据库、普通文件、或者XML文件来保存数据,完成数据持久化。

DAO模式

传统JDBC代码的缺点

  • 可读性差
  • 不利于后期的修改和维护
  • 不利于代码的复

Dao模式采用面向接口编程,可以降低代码间的耦合性。

  • 隔离业务逻辑代码和数据访问代码
  • 隔离不同数据库的实现
  • 业务逻辑代码调用数据访问访问接口

步骤

  • 定义实体类传输数据;
  • 将所有增删改查操作抽取成接口;
  • 由不同数据库的实现类分别实现接口;
  • 将通用的操作(打开、关闭连接、增、删、改、查等)封装到数据库工具类BaseDao的通用方法中。

注:定义实体类User–写数据工具类BaseDao–将所有的增删改查操作抽取成UserDao接口–数据库实现类UserDaoImpl

数据工具类BaseDao

注意事项

数据库工具类BaseDao

  • 获取连接的方法、关闭资源的方法、增删改的方法、查的方法
  • 增删改executeUpdate()查executeQuery()
  • 增删改返回int、查返回ResultSet对象
  • 增删改查方法的参数–通过传入sql语句和占位符传入参数的数组作为参数
  • 只有查有ResultSet方法,传入参数为(ResultSet rs )增删改在调用关闭资源方法时直接传入null
package cn.kgc.utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
//封装jdbc通用操作 1打开数据库连接2封装基本的增删改操作3释放资源
public class BaseDao {
	private Connection connection;
	private PreparedStatement smt;
	public Connection getConnection(){
		try {
			connection=C3P0Utils.getInstance().getconnection();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return this.connection;
	}
//增删改
//通过executeupdate返回修改语句
public int executeUpdate(String sql,Object[]params){
	int row =0 ;
	try {
		Connection connection = this.getConnection();
		PreparedStatement smt = connection.prepareStatement(sql);
		//判断是否传递参数
		if(params!=null){
			//设置参数
			for (int i = 0; i < params.length; i++) {
				smt.setObject(i+1, params[i]);
			}
		}
		 row = smt.executeUpdate();
	} catch (SQLException e) {
		e.printStackTrace();
	}
	return row;
}
//释放资源
public void close(ResultSet rs){
		try {
			if(rs!=null){
			rs.close();
			}
			if(smt!=null){
				smt.close();
			}
			if(connection!=null){
				connection.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
	}
}
//查
public ResultSet executeQuery(String sql,Object[]params){
	ResultSet row =null ;
	try {
		Connection connection = this.getConnection();
		PreparedStatement smt = connection.prepareStatement(sql);
		//判断是否传递参数
		if(params!=null){
			//设置参数
			for (int i = 0; i < params.length; i++) {
				smt.setObject(i+1, params[i]);
			}
		}
		 row = smt.executeQuery();
	} catch (SQLException e) {
		e.printStackTrace();
	}
	return row;
}
}

数据库实现类UserDaoImpl

  • 根据需求写
  • 传入sql语句
  • 传入占位符参数
  • 调用BaseDao相关方法
package cn.kgc.housys.dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;

import cn.kgc.housys.dao.UsersDao;
import cn.kgc.housys.entity.Users;
import cn.kgc.housys.utils.BaseDao;
/**
 * 数据处理层接口实现
 * @author aym
 *
 */
public class UsersDaoImpl extends BaseDao implements UsersDao{

	@Override
	public int add(String name, String password, int gender, String cardId) {
			int row =0;
			try {
				String sql = "insert into users(status,name,password,gender,cardId)values(1,?,?,?,?) ";
				Object[]params= {name,password,gender,cardId};
				row=super.executeUpdate(sql, params);
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				super.close(null);
			}
			return row;
	}

	@Override
	public Users findUsersBycardId(String cardId) {
		ResultSet rs = null;
		Users user =null;
		try {
			String sql = "select status,name,password,gender,cardId from users where cardId=?";
			Object[]params = {cardId};
			rs = super.executeQuery(sql, params);
			if(rs!=null && rs.next()){
				user = new Users();
				user.setName(rs.getString("name"));
				user.setPassword(rs.getString("password"));
				user.setGender(rs.getInt("gender"));
				user.setCardId(rs.getString("cardId"));
				user.setStatus(rs.getInt("status"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			super.close(rs);
		}
		return user;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用python bs4库从下面这段内容“<div class="maingrid" data-v-0f3d927f=""> <!-- --> <!-- --> <!-- --> <div class="period" data-v-0f3d927f=""> Saturday, Jun 3, 2023 </div> <div class="summary summarykpis4" data-v-0f3d927f=""> <div class="icon" data-v-0f3d927f=""> <div class="partly-cloudy-day" data-v-0f3d927f=""> </div> </div> <div class="kpi summary" data-v-0f3d927f=""> <div class="subtitle"> Max </div> <div> 28℃ </div> <div class="normals"> <div> 22 </div> <div> 27 </div> <div> 36 </div> <div class="subtitle"> Min </div> <div class="subtitle"> Mean </div> <div class="subtitle"> Max </div> </div> </div> <div class="kpi summary" data-v-0f3d927f=""> <div class="subtitle"> Min </div> <div> 13℃ </div> <div class="normals"> <div> 9.9 </div> <div> 15 </div> <div> 19 </div> <div class="subtitle"> Min </div> <div class="subtitle"> Mean </div> <div class="subtitle"> Max </div> </div> </div> <div class="kpi summary" data-v-0f3d927f=""> <div class="subtitle"> Rain </div> <div> 0mm </div> <div class="normals"> <div> 0 </div> <div> 4.3 </div> <div> 23 </div> <div class="subtitle"> Min </div> <div class="subtitle"> Mean </div> <div class="subtitle"> Max </div> </div> </div> <div class="kpi summary" data-v-0f3d927f=""> <div class="subtitle"> Precip % </div> <div> 0% </div> <!-- --> </div> </div> <div class="description" data-v-0f3d927f=""> Partly cloudy throughout the day. </div> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> </div>”提取出6月3至6月5日天气信息
最新发布
06-04

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值