java c3p0 dao_C3P0与DBUtil配合实现DAO层的开发

本文介绍了使用C3P0数据库连接池和DBUtils简化DAO层操作的方法。首先阐述了数据库连接池的概念和优势,接着详细讲解了C3P0的配置、DBUtils的功能及使用步骤,最后提到了BeanUtils在对象赋值中的便利性。
摘要由CSDN通过智能技术生成

写在前面:菜鸟拙见,望请纠正

一:为什么需要连接池

普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection 加载到内存中,需要数据库连接的时候,就向数据库要求一个,执行完成后再断开连接。。这样的方式将会消耗大量的资源和时间

数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。

722aad5c46bebd9b201b92c89c21b3b8.png

其实就是以前的时候每一次执行操作都要获得一个conn连接,用完就断掉,而现在,我可以一开始就创建多个连接,存放到一个连接池里,等到用的时候我就从连接池里取一个,用完只是断开与连接池的连接而已,而连接池与数据库的连接却不会断,会重复使用conn来提高效率

二:怎么用连接池

1:导包

2:配置C3P0:在src目录下新建一个名叫c3p0-config.xml的文件

10

30

100

10

200

com.mysql.jdbc.Driver

jdbc:mysql://localhost:3306/CoupleSpace

root

root

10

30

100

10

200

......

......

......

3:创建c3p0utils类,定义获取connection,释放connection的方法,但是,这里推荐使用DButils

那DButils又是什么呐?

三:DBUtils简介:

1:DBUtils是什么?    Dbutils:主要是封装了JDBC的代码,简化dao层的操作。在使用DButils之前,我们Dao层(这个应该不用说了吧,就是相当于直接对数据库进行的操作的层)使用的技术是JDBC,但是jdbc弊端很多,所以就引入了DBUtils这一插件

2:DBUtils有什么好处?1.对于数据表的读操作,他可以把结果转换成List,Array,Set等java集合,便于程序员操作;2.对于数据表的写操作,也变得很简单(只需写sql语句)3.可以使用数据源,使用数据库连接池等技术来优化性能--重用已经构建好的数据库连接对象

3:怎么用DBUtils呐?

<1>导入jar包

<2>配合C3P0使用,配置C3P0配置文件

<3>创建JDBCUtils工具类(一般放在com.xqc.XXX.utils包下)

1 /**

2 * JDBC工具类:

3 * 加载驱动

4 * 获得连接

5 * 释放资源

6 * 代码都重复.

7 *

8 */

9 public classJDBCUtils {

10

11 private static ComboPooledDataSource dataSource = newComboPooledDataSource();

12

13 // 获得连接池:

14 public staticDataSource getDataSource(){

15 returndataSource;

16 }

17

18 // 获得连接

19 public staticConnection getConnection() {

20 Connection conn = null;

21 try{

22 conn =dataSource.getConnection();

23 } catch(SQLException e) {

24 e.printStackTrace();

25 }

26 returnconn;

27 }

28

29

30 }

<4>以登陆功能为例演示,在Servlet中把锅甩给service,service甩锅给Dao层的实现类,执行对数据库操作

1 public class UserDaoImple implementsUserDao {

2

3 publicUser login(User user) {

4 //获取QueryRunner对象进行操作

5 QueryRunner queryRunner = newQueryRunner(JDBCUtils.getDataSource());

6 //sql语句

7 String sql = "select * from user where username = ? and password = ?";

8 User existUser;

9 try{

10 //直接使用query方法执行sql语句,并用beanHandle将返回结果的第一行封装为User对象

11 existUser = queryRunner.query(sql, new BeanHandler(User.class), user.getUsername(),user.getPassword());

12 } catch(SQLException e) {

13 e.printStackTrace();

14 throw new RuntimeException("用户登录失败!");

15 }

16 returnexistUser;

17 }

18

19 }

至此,结束,但是在写登陆时我还用到了BeanUtils,在这我也顺道记录一下吧!

四:BeanUtils简介:

1:BeanUtils又是什么呐?BeanUtils工具是一种方便我们对JavaBean进行操作的工具,是Apache组织下的产品

2:为什么要使用BeanUtils呐!他有什么好处吗?

1)beanUtils 可以便于对javaBean的属性进行赋值。

2)beanUtils 可以便于对javaBean的对象进行赋值。

3)beanUtils可以将一个MAP集合的数据拷贝到一个javabean对象中。

3:怎么用呐!我们平时将一些数据赋给Bean时,要考虑Bean中的数据类型,但是如果用BeanUtils的话就不用考虑折磨多了!比如:

1 // 接收数据

2 Map map =req.getParameterMap();

3 User user = newUser();

4 // 封装数据

5 BeanUtils.populate(user, map);

上边我们就直接把接受到的Map直接封装进了User对象,操作简单

同样拷贝时也是一样

1 //1.生成对象

2 Map map = new HashMap();

3

4 //2.给一些参数

5 map.put("id", 2);

6 map.put("name", "EZ");

7 map.put("age", 22);

8 map.put("classID", 3);

9 map.put("birthday", newDate());

10

11 //需求:把map的属性值拷贝到S中

12 Student s = newStudent();

13 BeanUtils.copyProperties(s, map);

11111

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要在项目中导入c3p0相关的jar包,可以在maven中添加以下依赖: ```xml <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> ``` 然后,在项目中创建一个c3p0配置文件,例如命名为c3p0-config.xml,内容如下: ```xml <?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <!--初始化连接池时,连接池中连接的个数--> <initialPoolSize>3</initialPoolSize> <!--连接池最多保存的连接数--> <maxPoolSize>10</maxPoolSize> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数--> <acquireIncrement>3</acquireIncrement> <!--连接超时时间--> <checkoutTimeout>60000</checkoutTimeout> <!--当连接池中连接空闲时间大于idleConnectionTestPeriod所指定的时间时,c3p0则会测试连接池中的连接有效性。--> <idleConnectionTestPeriod>60</idleConnectionTestPeriod> <!--如果设为true那么在取得连接的同时将校验连接的有效性。建议使用idleConnectionTestPeriod或automaticTestTable等方法来提升连接测试的可靠性。--> <testConnectionOnCheckin>false</testConnectionOnCheckin> <!--如果设为true那么在归还连接的同时将校验连接的有效性。建议使用idleConnectionTestPeriod或automaticTestTable等方法来提升连接测试的可靠性。--> <testConnectionOnCheckout>false</testConnectionOnCheckout> <!--自动提交--> <autoCommitOnClose>true</autoCommitOnClose> <!--打印连接详细信息--> <debug>true</debug> <!--MySQL数据库的驱动程序--> <driverClass>com.mysql.jdbc.Driver</driverClass> <!--连接的URL--> <jdbcUrl>jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false</jdbcUrl> <!--用户名--> <user>root</user> <!--密码--> <password>123456</password> <!--定义了一个标准的数据库查询语句,用来测试连接池中连接的可用性,如果执行失败,则抛出SQLException异常,表示该连接已经不可用了。--> <preferredTestQuery>select 1</preferredTestQuery> </c3p0-config> ``` 其中,需要根据实际情况修改jdbcUrl、user和password等参数。 最后,在Java代码中使用c3p0连接池,示例代码如下: ```java public class DBUtil { //定义一个C3P0数据源 private static ComboPooledDataSource ds = new ComboPooledDataSource("mysql"); /** * 获取连接对象 */ public static Connection getConnection() throws SQLException { return ds.getConnection(); } /** * 关闭连接对象、Statement对象和ResultSet对象 */ public static void close(Connection conn, Statement stmt, ResultSet rs) { try { if(rs != null) { rs.close(); } if(stmt != null) { stmt.close(); } if(conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } ``` 在具体使用时,可以通过DBUtil.getConnection()方法获取连接对象,并通过DBUtil.close()方法关闭连接对象、Statement对象和ResultSet对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值