积玉桥网站建设,网红营销定义,国外酷炫网站,seo优化排名教程百度技术什么是 DAO #xff1f;
Data Access Object(数据存取对象) 位于业务逻辑和持久化数据之间实现对持久化数据的访问 DAO起着转换器的作用#xff0c;将数据在实体类和数据库记录之间进行转换。
-----------------------------------------------------
DAO模式的组成部分
…什么是 DAO
Data Access Object(数据存取对象) 位于业务逻辑和持久化数据之间实现对持久化数据的访问 DAO起着转换器的作用将数据在实体类和数据库记录之间进行转换。
-----------------------------------------------------
DAO模式的组成部分
DAO接口DAO实现类实体类数据库连接和关闭工具类
优势
隔离了数据访问代码和业务逻辑代码隔离了不同数据库实现 封装JDBC
/*** 数据库工具类*/
public class BaseDao {Connection conn null;PreparedStatement ps null;//获取Conn对象 打开数据库链接public boolean getConn() {boolean bool false;//默认 false 未打开数据库try {//加载驱动 方言Class.forName(com.mysql.jdbc.Driver);//准备数据库连接路径String url jdbc:mysql://127.0.0.1:3306/xxshop?useUnicodetruecharacterEncodingutf-8zeroDateTimeBehaviorconvertToNull;//用户名与密码String username root;String userpwd root;//根据路径用户名密码 使用DriverManager获取数据库connection连接conn DriverManager.getConnection(url,username,userpwd);bool true;//已经打开} catch (Exception e) {e.printStackTrace();bool false ;//已经打开}return bool;}/*** 添加修改删除数据* param sql* param objs* return*/public int executeUpdate(String sql,Object objs[]){int res 0;//初始化执行结果 失败0try {if(getConn())//打开数据库链接{ps conn.prepareStatement(sql);if(objs!null){for (int i 0; i objs.length; i) {ps.setObject((i1),objs[i]);}}res ps.executeUpdate();}} catch (Exception e) {e.printStackTrace();} finally {closeResource();//关闭数据源}return res;}/*** 查询* param sql* param objs* return*/public ResultSet executeSQL(String sql,Object objs[]){ResultSet rs null;try {if(getConn())//打开数据库链接{ps conn.prepareStatement(sql);//判断是否有参数if (objs ! null) {//循环封装参数for (int i 0; i objs.length; i) {ps.setObject((i 1), objs[i]);}}rs ps.executeQuery();}} catch (Exception e) {e.printStackTrace();} finally {closeResource();//释放资源}return rs;}//关闭资源public void closeResource(){try {if(ps!null){ps.close();}if(conn!null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}
}
调用工具类
实现类 继承 工具类BaseDao 查询ResultSet rs this.executeSQL(SQL语句,Object数组参数数组) 增删改: int i this.executeUpdate(SQL语句,Object数组参数数组) 配置文件连接信息 使用配置文件存储连接信息properties文件
jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://127.0.0.1:3306/xxshop?useUnicodetruecharacterEncodingutf-8zeroDateTimeBehaviorconvertToNull jdbc.usernameroot jdbc.pwdroot Properties properties new Properties();//读取properties文件 BaseDao为当前所在类InputStream is BaseDao.class.getClassLoader().getResourceAsStream(jdbc.properties);//将文件信息转换成properties对象properties.load(is);//通过getPropertyKEY方法获取属性值String driver properties.getProperty(jdbc.driver); 写信息 package com.hz.util;import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;import com.hz.dao.BaseDao;//读取数据库属性文件获取数据库连接信息
//如何让用户只能创建一个ConfigManger----单例模式:1构造方法私有2程序提供给别人唯一对象
//ConfigManager.getInstance().getString(jdbc.Driver)public class ConfigManager {private static ConfigManager configManager;private Properties properties;private ConfigManager() {String configFile database.properties;// 读取properties文件 BaseDao为当前所在类InputStream is ConfigManager.class.getClassLoader().getResourceAsStream(database.properties);properties new Properties();try {// 将文件信息转换成properties对象properties.load(is);is.close();} catch (IOException e) {e.printStackTrace();}}//提供给别人一个唯一的ConfigManger对象//通过 类名. 调用public static ConfigManager getInstance() {if (configManager null) {configManager new ConfigManager();}return configManager;}// 通过getPropertyKEY方法获取属性值public String getString(String key) {return properties.getProperty(key);}}在整个程序运行期间有且仅有一个实例。若违背这一点所设计的类就不是单例类。 连接池与数据源 使用JDBC访问数据库时频繁的连接导致系统的安全性和稳定性差通过数据源和连接池来解决问题。
连接池 连接池是由容器提供的用来管理池中连接对象。 数据源