admin管理员组文章数量:1794759
【JAVA高级】——Druid连接池和Apache的DBUtils使用
✅作者简介:热爱国学的JAVA后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:JAVA开发者成长之路 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:Druid连接池和Apache的DBUtils使用 更多内容点击👇 封装JDBC中的DaoUtils工具类(Object类型方法)
文章目录- 💖 Druid连接池
- 【1】连接池思想
- 【2】Druid连接池使用步骤
- 2.1 引入相关jar包
- 2.2 创建database.properties配置文件
- 2.3 编写连接池工具类
- 【3】Druid连接池测试
- 💖 Apache的DBUtils使用
- 【1】Apache DBUtils介绍
- 1.1 Apache DBUtils特征
- 1.2 Apache DbUtils主要组成
- 1.3 Apache DbUtils使用步骤
- 【2】综合案例
- 2.1 创建product表
- 2.2 向表中添加数据
- 2.3 创建实体类Product
- 2.4 创建ProductDao接口
- 2.5 创建ProductDaoImpl实现类
- 2.6 创建ProductService接口
- 2.7 创建ProductServiceImpl实现类
- 2.8 创建测试类
- 2.8.1 测试插入数据
- 2.8.2 测试删除数据
- 2.8.3 测试修改数据
- 2.8.4 测试查询一条数据
- 2.8.5 测试查询所有数据
- 💖 投票传送门
在程序初始化时,提前创建好指定数量的数据库连接对象存储在“池子”中(这个池子称为“连接池”),当需要连接数据库的时候,从这个“池子”中取出一个连接对象使用,使用完毕后,不会将这个连接对象关闭,而是将这个连接对象放回“池子”中,实现复用,节省资源。
【2】Druid连接池使用步骤 2.1 引入相关jar包在lib文件夹中引入druid-1.1.5.jar文件和mysql-connector-java-5.1.0-bin.jar文件,并将两个jar文件配置到项目中。
2.2 创建database.properties配置文件 在src文件夹下创建database.properties配置文件,配置文件中内容如下:声明一个连接池对象
实例化配置文件对象前面的DBUtils工具类是我们经过千难万阻自己封装的,也有一些组织给我们封装DBUtils工具类,比如Apache组织提供了一个对JDBC进行简单封装的开源工具类库Commons DbUtils类,使用它能够简化JDBC应用程序的开发,同时也不影响程序的性能。
【1】Apache DBUtils介绍 1.1 Apache DBUtils特征 Apache DBUtils是java编程中的数据库操作实用工具,小巧简单实用,主要特征有:3)编写DBUtils连接池工具类
声明一个连接池对象
实例化配置文件对象返回一个数据源
package com.cxyzxc.www.utils; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.sql.DataSource; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; public class DBUtils { // 声明一个连接池对象 private static DruidDataSource druidDataSource; static { // 实例化配置文件对象 Properties properties = new Properties(); try { // 加载配置文件内容 InputStream is = DBUtils.class .getResourceAsStream("/database.properties"); properties.load(is); // 创建连接池 druidDataSource = (DruidDataSource) DruidDataSourceFactory .createDataSource(properties); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } //返回一个数据源 public static DataSource getDataSource(){ return druidDataSource; } } 【2】综合案例 2.1 创建product表 CREATE TABLE IF NOT EXISTS `product` ( `pid` INT PRIMARY KEY AUTO_INCREMENT COMMENT '产品编号', `pname` VARCHAR(20) NOT NULL COMMENT '产品名称', `price` DOUBLE NOT NULL COMMENT '产品价格', `birthday` DATE NOT NULL COMMENT '产品生产日期' ); 2.2 向表中添加数据 INSERT INTO `product`(`pid`,`pname`,`price`,`birthday`)VALUES(1001,'虎皮凤爪',20.5,'2022-06-12'); INSERT INTO `product`(`pid`,`pname`,`price`,`birthday`)VALUES(1002,'卧龙锅巴',18.5,'2022-09-22'); 2.3 创建实体类Product- 添加实体类的私有变量
- 添加有参无参构造方法
- 添加get/set方法
- 重写toString()方法
创建ProductDao接口,实现增删改查方法名的统一。
package com.cxyzxc.www.dao; import java.util.List; import com.cxyzxc.www.entity.Product; public interface ProductDao { //添加 int insert(Product product); //删除 int delete(int pid); //修改 int update(Product product); //查询单个 Product selectOne(int pid); //查询所有 List<Product> selectAll(); } 2.5 创建ProductDaoImpl实现类创建ProductDaoImpl实现类来实现ProductDao接口,在重新方法中编写具体的逻辑代码。
package com.cxyzxc.www.dao.impl; import java.sql.SQLException; import java.util.List; import org.apachemons.dbutils.QueryRunner; import org.apachemons.dbutils.handlers.BeanHandler; import org.apachemons.dbutils.handlers.BeanListHandler; import com.cxyzxc.www.dao.ProductDao; import com.cxyzxc.www.entity.Product; import com.cxyzxc.www.utils.DBUtils; import com.cxyzxc.www.utils.DateUtils; public class ProductDaoImpl implements ProductDao { // 创建QueryRunner对象,并传递一个数据源对象 private QueryRunner queryRunner = new QueryRunner(DBUtils.getDataSource()); @Override public int insert(Product product) { String sql = "INSERT INTO `product`(`pname`,`price`,`birthday`)VALUES(?,?,?);"; Object[] args = { product.getPname(), product.getPrice(), DateUtils.utilDateToSqlDate(product.getBirthday()) }; try { return queryRunner.update(sql, args); } catch (SQLException e) { e.printStackTrace(); } return 0; } @Override public int delete(int pid) { String sql = "DELETE FROM `product` WHERE `pid` = ?;"; try { return queryRunner.update(sql, pid); } catch (SQLException e) { e.printStackTrace(); } return 0; } @Override public int update(Product product) { String sql = "UPDATE `product` SET `pname` = ?,`price`=?,`birthday`=? WHERE `pid`=?;"; Object[] args = { product.getPname(), product.getPrice(), DateUtils.utilDateToSqlDate(product.getBirthday()), product.getPid() }; try { return queryRunner.update(sql, args); } catch (SQLException e) { e.printStackTrace(); } return 0; } @Override public Product selectOne(int pid) { // 查询一个数据,使用BeanHandler将记录转换为对象 BeanHandler<Product> product = new BeanHandler<Product>(Product.class); String sql = "SELECT * FROM `product` WHERE `pid`=?;"; try { return queryRunner.query(sql, product, pid); } catch (SQLException e) { e.printStackTrace(); } return null; } @Override public List<Product> selectAll() { // 查询一个数据,使用BeanHandler将记录转换为对象 BeanListHandler<Product> productList = new BeanListHandler<Product>(Product.class); String sql = "SELECT * FROM `product`;"; try { return queryRunner.query(sql, productList); } catch (SQLException e) { e.printStackTrace(); } return null; } } 2.6 创建ProductService接口创建ProductService接口来实现业务层增删改查方法名的统一。
package com.cxyzxc.service; import java.util.List; import com.cxyzxc.www.entity.Product; public interface ProductService { //增加 int addProduct(Product product); //删除 int deleteProduct(int pid); //修改 int updateProduct(Product product); //查询单个 Product selectOneProduct(int pid); //查询所有 List<Product> selectAllProduct(); } 2.7 创建ProductServiceImpl实现类创建ProductServiceImpl实现类来实现ProductService接口。
package com.cxyzxc.service.impl; import java.util.List; import com.cxyzxc.service.ProductService; import com.cxyzxc.www.dao.ProductDao; import com.cxyzxc.www.dao.impl.ProductDaoImpl; import com.cxyzxc.www.entity.Product; public class ProductServiceImpl implements ProductService { ProductDao productDao = new ProductDaoImpl(); @Override public int addProduct(Product product) { // 查询添加的商品是否存在 Product pd = productDao.selectOne(product.getPid()); if (pd == null) { return productDao.insert(product); } else { System.out.println("商品已经存在,不能重复添加"); } return 0; } @Override public int deleteProduct(int pid) { // 查询添加的商品是否存在 Product pd = productDao.selectOne(pid); if (pd != null) { return productDao.delete(pid); } else { System.out.println("商品不存在,不能删除"); } return 0; } @Override public int updateProduct(Product product) { // 查询添加的商品是否存在 Product pd = productDao.selectOne(product.getPid()); if (pd!= null) { return productDao.update(product); } else { System.out.println("商品不存在,不能修改"); } return 0; } @Override public Product selectOneProduct(int pid) { Product product =productDao.selectOne(pid); if(product!=null){ return product; }else{ System.out.println("没有你要查找产品,查找失败"); } return null; } @Override public List<Product> selectAllProduct() { List<Product> productList = productDao.selectAll(); if(productList.size()!=0){ return productList; }else{ System.out.println("数据库为空,没有产品"); } return null; } } 2.8 创建测试类 2.8.1 测试插入数据 package com.cxyzxc.www.view; import com.cxyzxc.service.ProductService; import com.cxyzxc.service.impl.ProductServiceImpl; import com.cxyzxc.www.entity.Product; import com.cxyzxc.www.utils.DateUtils; public class Test01InsertProduct { public static void main(String[] args) { //创建ProductService引用,指向ProductServiceImpl实现类 ProductService productService = new ProductServiceImpl(); //增加产品 Product product = new Product(1003,"流心威化饼干", 13.5, DateUtils.strDateToUtilDate("2022-11-10")); int result = productService.addProduct(product); String str = result==1?"商品添加成功":"商品添加失败"; System.out.println(str); } } 2.8.2 测试删除数据 package com.cxyzxc.www.view; import com.cxyzxc.service.ProductService; import com.cxyzxc.service.impl.ProductServiceImpl; public class Test02DeleteProduct { public static void main(String[] args) { // 创建ProductService引用,指向ProductServiceImpl实现类 ProductService productService = new ProductServiceImpl(); int result = productService.deleteProduct(1003); String str = result == 1 ? "删除成功" : "删除失败"; System.out.println(str); } } 2.8.3 测试修改数据 package com.cxyzxc.www.view; import com.cxyzxc.service.ProductService; import com.cxyzxc.service.impl.ProductServiceImpl; import com.cxyzxc.www.entity.Product; import com.cxyzxc.www.utils.DateUtils; public class Test03UpdateProduct { public static void main(String[] args) { // 创建ProductService引用,指向ProductServiceImpl实现类 ProductService productService = new ProductServiceImpl(); // 增加产品 Product product = new Product(1002, "流心威化饼干", 13.5, DateUtils.strDateToUtilDate("2022-11-10")); int result = productService.updateProduct(product); String str = result == 1 ? "修改成功" : "修改失败"; System.out.println(str); } } 2.8.4 测试查询一条数据 package com.cxyzxc.www.view; import com.cxyzxc.service.ProductService; import com.cxyzxc.service.impl.ProductServiceImpl; import com.cxyzxc.www.entity.Product; public class Test04SelectOneProduct { public static void main(String[] args) { // 创建ProductService引用,指向ProductServiceImpl实现类 ProductService productService = new ProductServiceImpl(); Product product = productService.selectOneProduct(1003); if (product != null) { System.out.println(product); } else { System.out.println("你要查询的商品不存在"); } } } 2.8.5 测试查询所有数据 package com.cxyzxc.www.view; import java.util.List; import com.cxyzxc.service.ProductService; import com.cxyzxc.service.impl.ProductServiceImpl; import com.cxyzxc.www.entity.Product; public class Test05SelectAllProduct { public static void main(String[] args) { // 创建ProductService引用,指向ProductServiceImpl实现类 ProductService productService = new ProductServiceImpl(); List<Product> productList = productService.selectAllProduct(); for (int i = 0; i < productList.size(); i++) { System.out.println(productList.get(i)); } } } 💖 投票传送门版权声明:本文标题:【JAVA高级】——Druid连接池和Apache的DBUtils使用 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686916969a118009.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论