C3P0与DBUtil配合实现DAO层的开发
写在前面:菜鸟拙见,望请纠正
一:为什么需要连接池
普通的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection 加载到内存中,需要数据库连接的时候,就向数据库要求一个,执行完成后再断开连接。。这样的方式将会消耗大量的资源和时间
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。
其实就是以前的时候每一次执行操作都要获得一个conn连接,用完就断掉,而现在,我可以一开始就创建多个连接,存放到一个连接池里,等到用的时候我就从连接池里取一个,用完只是断开与连接池的连接而已,而连接池与数据库的连接却不会断,会重复使用conn来提高效率
二:怎么用连接池
1:导包
2:配置C3P0:在src目录下新建一个名叫c3p0-config.xml的文件
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!--默认配置-->
<default-config>
<!--初始化时连接池建立的连接数-->
<property name="initialPoolSize">10</property>
<!--每个连接的生存时间-->
<property name="maxIdleTime">30</property>
<!--连接池最多和最少容纳的连接-->
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property> <property name="maxStatements">200</property>
</default-config>
<!--配置连接池mysql-->
<named-config name="mysql">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/CoupleSpace</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</named-config> <!--配置连接池2-->
......
<!--配置连接池3-->
......
<!--配置连接池4-->
......
</c3p0-config>
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 class JDBCUtils {
10
11 private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
12
13 // 获得连接池:
14 public static DataSource getDataSource(){
15 return dataSource;
16 }
17
18 // 获得连接
19 public static Connection getConnection() {
20 Connection conn = null;
21 try {
22 conn = dataSource.getConnection();
23 } catch (SQLException e) {
24 e.printStackTrace();
25 }
26 return conn;
27 }
28
29
30 }
<4>以登陆功能为例演示,在Servlet中把锅甩给service,service甩锅给Dao层的实现类,执行对数据库操作
1 public class UserDaoImple implements UserDao {
2
3 public User login(User user) {
4 //获取QueryRunner对象进行操作
5 QueryRunner queryRunner = new QueryRunner(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>(User.class), user.getUsername(),user.getPassword());
12 } catch (SQLException e) {
13 e.printStackTrace();
14 throw new RuntimeException("用户登录失败!");
15 }
16 return existUser;
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<String, String[]> map = req.getParameterMap();
3 User user = new User();
4 // 封装数据
5 BeanUtils.populate(user, map);
上边我们就直接把接受到的Map直接封装进了User对象,操作简单
同样拷贝时也是一样
1 //1.生成对象
2 Map<String,Object> map = new HashMap<String,Object>();
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", new Date());
10
11 //需求:把map的属性值拷贝到S中
12 Student s = new Student();
13 BeanUtils.copyProperties(s, map);
11111
C3P0与DBUtil配合实现DAO层的开发的更多相关文章
- ssh_maven的搭建之dao层的开发
之前都是使用我们传统的方式进行引入jar包,现在我们使用maven进行管理依赖,这样,我们的jar就不需要我们进行管理,而且,我们的maven还可以进行项目构建,一个项目从编写源代码到编译,测试,运行 ...
- 基于Mybatis的Dao层的开发
基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFa ...
- 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_7 Mybatis中使用代理Dao的执行过程分析
另外一种情况,不写Mybits的dao实现类的情况. 切换工程到CRUD的工程.这里面是不写dao实现类的方式 进入到GetMaper里面.这里是创建代理对象 去找SqlSession的实现类Defa ...
- 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_1 Mybatis中编写dao实现类的使用方式-查询列表
就是自己写实现类的方式来开发 直接finish 把之前写的CRUD的代码复制到过来. 在把之前pom.xml里面的包的依赖也复制过来 复制到当前的pom.xml内 允许自动导入 以上步骤就是复制了一个 ...
- 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_9 typeAliases标签和package标签
配置别名 上面制定了好了别名后,映射文件就可以简写了.不区分大小写 皆可以小写也可以大写 大小写混着也可以 测试 package 直接把com.itheima.domain下面所有的类都注册了 可以使 ...
- 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_8 properties标签的使用及细节
properties 可以把数据库链接的配置放在上面的properties里面 #{占位符}的形式去引用上面的.下面的内容就是引用上面的内容的定义. 运行查询的方法测试一下 这样改造可以成功的运行程序 ...
- 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_6 Mybatis中使用Dao实现类的执行过程分析-增删改方法
从测试类入手,断点调试 找到实现类,进入到insert方法里面 这里是SqlSession的接口里面的方法. 我们需要找SqlSession的实现类. DefaultSqlSession 里面有两个i ...
- 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_5 Mybatis中使用Dao实现类的执行过程分析-查询方法1
继续运行testFindAll方法.把其他类的断点都删除掉. 只在这里加了断点,所以直接就跳转到这里了.RoutingStatementHandler里面的query方法 继续往下走,断点又回到了这里 ...
- 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_4 Mybatis中使用Dao实现类的执行过程分析-查询方法
delete方法没有并SqlSession的delete方法,而是调用的Upadte方法. 在测试类这里加断点. 实际的方法体内也加断点 运行测试方法,选择debug的方式 走到断点这里.会看到fac ...
随机推荐
- ArcGIS for JavaScript 关于路径开发的一些记录(二)
又是高度集中开发路径模块的一天.真希望自己以后都可以如此的专注和高效(虽然知道很难一直都保持这样的状态,我会坚持的~哈哈哈) 言归正传,今天开发了途径点的功能和改进了些相关起点.终点的代码.先说一下我 ...
- linux rpm命令之查询包安装与否、包详细信息、包安装位置、文件属于哪个包、包依赖
查询这个包是否已安装rpm -q 包名rpm -qa-q 查询-a all 查询已安装软件包和未安装软件包详细信息 rpm -qi 包名rpm -qip 包全名-i 查询软件信息-p package, ...
- Qt——元对象和属性机制
http://www.cnblogs.com/hellovenus/p/5582521.html 一.元对象 元对象(meta object)意思是描述另一个对象结构的对象,比如获得一个对象有多少成员 ...
- eclipse打成可运行jar包,清空运行路径选项
到eclipse的工作空间找到/.metadata/.plugins/org.eclipse.debug.core/.launches文件夹,清空:然后重启eclipse即可:
- SQL Server ->> 数据类型不一致比较时的隐式转换
当使用操作符进行比较的时候,两边数据类型不一致的情况下,数据类型优先级别低的会往优先级别高的发生隐式转换.下面的参考链接是优先级别列表. 参考: Data Type Precedence (Trans ...
- 在centos系统安装mongodb
在Linux CentOS系统上安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到环境变量之前,执行“php -v”命令查看当前php版本信息时时, ...
- eclipse中如何添加tomcat插件
本篇简短的介绍了如何安装tomcat插件,因为不eclipse中不安装插件就没有tomcat图标,也就无法正常关闭服务器而只能terminate.废话不多说,直接进入主题: 1.首先下载一个tomca ...
- "docker build" requires exactly 1 argument(s).
Docker 是怎么样的东西,这里就不说了,这里说说dockerfile创建容器时遇到的问题. 首先我想达到的目的很简单,就是用dockerfile去创建容器,步骤如下: 创建并编辑dockerfil ...
- RDMBorderedButton
RDMBorderedButton https://github.com/reesemclean/RDMBorderedButton 效果: 源码: RDMBorderedButton.h + RDM ...
- Celery学习---Celery 与django结合实现计划任务功能
项目的目录结构: 项目前提: 安装并启动Redis 安装Django和Celery的定时任务插件 安装方法一: pip直接安装[安装了pip的前提下] omc@omc-virtual-machine: ...