c3p0和QueryRunner的结合使用,让开发更加简便

1:DBUtils中的QueryRunner的使用:

  1.1:QueryRunner中提供了对SQL语句操作的api;

  1.2:主要有三个方法:

    1.2.1:query():用于执行select(查询);

    1.2.2:update():用于执行insert(插入)/update(更新)/delete(删除);

    1.2.3:batch():批处理;



2:c3p0和QueryRunner的结合使用:

  2.1:首先导包,如下所示的包;

    c3p0-0.9.1.2.jar
    commons-dbutils-1.6.jar
    mysql-connector-java-5.1.12-bin.jar  

   2.2:当然导包之前你需要创建好数据库和数据表哦!~~~ 

      在src目录下面记住配置c3p0-config.xml文件

 1 <c3p0-config>
 2
 3     <!-- c3p0默认配置,下面还可以配置多个数据库 -->
 4     <default-config>
 5         <property name="jdbcUrl">jdbc:mysql://localhost:3306/test
 6         </property>
 7         <property name="driverClass">com.mysql.jdbc.Driver</property>
 8         <property name="user">root</property>
 9         <property name="password">123456</property>
10         <property name="initialPoolSize">6</property>
11         <property name="maxPoolSize">50</property>
12         <property name="maxIdleTime">1000</property>
13     </default-config>
14
15 </c3p0-config>

   2.3:创建实体类,如User.java,源码如下,

 1 package com.bie.po;
 2 /**
 3 * @author BieHongLi
 4 * @version 创建时间:2017年3月11日 下午12:55:21
 5 *
 6 */
 7 public class User {
 8
 9     private int id;
10     private String name;
11     private String password;
12     private String email;
13     private String phone;
14     public int getId() {
15         return id;
16     }
17     public void setId(int id) {
18         this.id = id;
19     }
20     public String getName() {
21         return name;
22     }
23     public void setName(String name) {
24         this.name = name;
25     }
26     public String getPassword() {
27         return password;
28     }
29     public void setPassword(String password) {
30         this.password = password;
31     }
32     public String getEmail() {
33         return email;
34     }
35     public void setEmail(String email) {
36         this.email = email;
37     }
38     public String getPhone() {
39         return phone;
40     }
41     public void setPhone(String phone) {
42         this.phone = phone;
43     }
44     @Override
45     public String toString() {
46         return "User [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + ", phone=" + phone
47                 + "]";
48     }
49
50
51 }

  2.4:创建好实体类之后就可以根据MVC模式分层进行开发,这里只是模拟,所以创建dao层和servic层和test层。test层进行测试;

    所以先创建dao层进行创建接口,再创建实现接口的类,当然实现c3p0和QueryRunner的关键代码就是dao层哦,切记;

    当然了还有工具类utils层提取的公共的方法;

 1 package com.bie.dao;
 2
 3 import java.util.List;
 4
 5 import com.bie.po.User;
 6
 7 /**
 8 * @author BieHongLi
 9 * @version 创建时间:2017年3月11日 下午5:46:38
10 *
11 */
12 public interface UserDao {
13
14     /***
15      * 查询所有的用户信息
16      * @return
17      */
18     public List<User> selectUser();
19
20     /***
21      * 根据编号查询
22      * @param id
23      * @return
24      */
25     public User selectUserId(int id);
26
27
28     /***
29      * 根据条件查询信息
30      * @param user
31      * @return
32      */
33     public List<User> select(String sql,List<Object> list);
34
35
36 }

 1 package com.bie.dao.impl;
 2
 3 import java.util.List;
 4
 5 import org.apache.commons.dbutils.QueryRunner;
 6 import org.apache.commons.dbutils.handlers.BeanHandler;
 7 import org.apache.commons.dbutils.handlers.BeanListHandler;
 8
 9 import com.bie.dao.UserDao;
10 import com.bie.po.User;
11 import com.bie.util.BaseUtils;
12
13 /**
14 * @author BieHongLi
15 * @version 创建时间:2017年3月11日 下午5:47:35
16 *
17 */
18 public class UserDaoImpl implements UserDao{
19
20     @Override
21     public List<User> selectUser() {
22         //创建QueryRunner
23         //记住查询是BeanListHandler区别增删改的方法BeanHandler
24         QueryRunner qr=BaseUtils.getQueryRunner();
25         try {
26             String sql="select * from user ";
27             //这句话就相当于之前写的下面这一长串代码,这就是QueryRunner的方便之处
28             /***
29              *User user=new User();
30                user.setId(rs.getInt("id"));
31                user.setName(rs.getString("name"));
32                user.setPassword(rs.getString("password"));
33                user.setEmail(rs.getString("email"));
34                user.setPhone(rs.getString("phone"));
35              */
36             return qr.query(sql, new BeanListHandler<User>(User.class));
37
38         } catch (Exception e) {
39             e.printStackTrace();
40         }
41         return null;
42     }
43
44     @Override
45     public User selectUserId(int id) {
46         //创建QueryRunner
47         QueryRunner qr=BaseUtils.getQueryRunner();
48         String sql="select * from user where id=? ";
49         try {
50             //使用QueryRunner的强大之处在于此处。
51             return qr.query(sql,new BeanHandler<User>(User.class), id);
52         } catch (Exception e) {
53             e.printStackTrace();
54         }
55         return null;
56     }
57
58
59     public List<User> select(String sql,List<Object> list) {
60         //创建QueryRunner
61         QueryRunner qr=BaseUtils.getQueryRunner();
62         try {
63             //第一个参数是传来的sql,第二个是实现实体类的设置,第三个是集合转化为数组
64             return qr.query(sql, new BeanListHandler<User>(User.class), list.toArray());
65
66         } catch (Exception e) {
67             e.printStackTrace();
68         }
69         return null;
70     }
71
72
73 }

  这里将BaseUtils类写到这里,因为这个也是c3p0和QueryRunner的核心啊!!!

 1 package com.bie.util;
 2
 3 import java.sql.SQLException;
 4 import java.util.List;
 5
 6 import javax.sql.DataSource;
 7
 8 import org.apache.commons.dbutils.QueryRunner;
 9
10 import com.mchange.v2.c3p0.ComboPooledDataSource;
11
12 /**
13 * @author BieHongLi
14 * @version 创建时间:2017年3月11日 下午1:29:50
15 * 数据库连接工具类
16 */
17 public class BaseUtils {
18
19     //初始化c3p0
20     private static DataSource dataSource=null;
21
22     static{
23         //自动加载src目录下面的c3p0的配置文件,【c3p0-config.xml】
24         dataSource = new ComboPooledDataSource();
25     }
26
27     public static QueryRunner getQueryRunner(){
28         //第一步:创建QueryRunner对象,传入连接池对象
29         //在创建QueryRunner对象的时候,如果传入数据对象dataSource,
30         //那么在使用QueryRunner对象的方法时候,就不需要传入连接对象
31         QueryRunner query=new QueryRunner(dataSource);
32         //第二步:会自动从数据源中获取连接(不用关闭连接)
33         return query;
34     }
35
36     /***
37      * 实现增删改的公共方法
38      * @param sql
39      * @param arr
40      * @return
41      */
42     public static boolean addUpdateDelete(String sql,Object[] arr){
43         QueryRunner qr=getQueryRunner();
44         int count;
45         try {
46             count = qr.update(sql, arr);
47             if(count>0){
48                 return true;
49             }else{
50                 return false;
51             }
52         } catch (SQLException e) {
53             e.printStackTrace();
54         }
55         return false;
56     }
57
58 }

  2.5:完成dao层和BaseUtils层之后可以直接在service层进行增删改,dao层就不用写了;

 1 package com.bie.service;
 2
 3 import java.util.List;
 4
 5 import com.bie.po.User;
 6
 7 /**
 8 * @author BieHongLi
 9 * @version 创建时间:2017年3月11日 下午7:10:32
10 *
11 */
12 public interface UserService {
13
14     /***
15      * 根据条件查询用户信息
16      * @param user
17      * @return
18      */
19     public List<User> select(User user);
20
21     /***
22      * 添加用户信息
23      * @param user
24      * @return
25      */
26     public boolean insertUser(User user);
27
28     /***
29      * 修改用户的信息
30      * @param user
31      * @return
32      */
33     public boolean updateUser(User user);
34
35     /***
36      * 删除用户信息
37      * @param id
38      * @return
39      */
40     public boolean deleteUser(int id);
41 }

  1 package com.bie.service.impl;
  2
  3 import java.util.ArrayList;
  4 import java.util.List;
  5
  6 import com.bie.dao.UserDao;
  7 import com.bie.dao.impl.UserDaoImpl;
  8 import com.bie.po.User;
  9 import com.bie.service.UserService;
 10 import com.bie.util.BaseUtils;
 11
 12 /**
 13 * @author BieHongLi
 14 * @version 创建时间:2017年3月11日 下午7:10:48
 15 *
 16 */
 17 public class UserServiceImpl implements UserService{
 18
 19     private UserDao dao=new UserDaoImpl();
 20
 21     @Override
 22     public List<User> select(User user) {
 23         StringBuilder sql=new StringBuilder("select * from user where 1=1 ");
 24         List<Object> list=new ArrayList<Object>();
 25         if(user!=null){
 26             //根据编号查询
 27             if(user.getId()!=0 && !"".equals(user.getId())){
 28                 sql.append(" and id = ? ");
 29                 list.add(user.getId());
 30             }
 31
 32             //根据名称模糊查询,模糊查询"" %% "" ++
 33             if(user.getName()!=null && !"".equals(user.getName())){
 34                 sql.append(" and name like ? ");
 35                 list.add("%"+user.getName()+"%");
 36             }
 37         }
 38
 39         return dao.select(sql.toString(), list);
 40     }
 41
 42     @Override
 43     public boolean insertUser(User user) {
 44         String sql="insert into user values(0,?,?,?,?)";
 45         List<Object> list=new ArrayList<>();
 46         if(user!=null){
 47             list.add(user.getName());
 48             list.add(user.getPassword());
 49             list.add(user.getEmail());
 50             list.add(user.getPhone());
 51         }
 52         try {
 53             return BaseUtils.addUpdateDelete(sql, list.toArray());
 54         } catch (Exception e) {
 55             e.printStackTrace();
 56         }
 57         return false;
 58     }
 59
 60     @Override
 61     public boolean updateUser(User user) {
 62         String sql="update user set name=?,password=?,email=?,phone=? where id=? ";
 63         List<Object> list=new ArrayList<>();
 64         if(user!=null){
 65             list.add(user.getName());
 66             list.add(user.getPassword());
 67             list.add(user.getEmail());
 68             list.add(user.getPhone());
 69
 70             //根据编号修改信息
 71             list.add(user.getId());
 72         }
 73
 74         try {
 75             return BaseUtils.addUpdateDelete(sql, list.toArray());
 76         } catch (Exception e) {
 77             e.printStackTrace();
 78         }
 79         return false;
 80     }
 81
 82     @Override
 83     public boolean deleteUser(int id) {
 84         String sql="delete from user where id=? ";
 85         List<Object> list=new ArrayList<>();
 86         if(id!=0){
 87             //根据编号修改信息
 88             list.add(id);
 89         }
 90
 91         try {
 92             return BaseUtils.addUpdateDelete(sql, list.toArray());
 93         } catch (Exception e) {
 94             e.printStackTrace();
 95         }
 96         return false;
 97     }
 98
 99
100 }

  2.6:使用junit测试,完成使用c3p0和QueryRunner的练习;

 1 package com.bie.test;
 2
 3 import java.util.List;
 4
 5 import org.junit.Test;
 6
 7 import com.bie.dao.UserDao;
 8 import com.bie.dao.impl.UserDaoImpl;
 9 import com.bie.po.User;
10 import com.bie.service.UserService;
11 import com.bie.service.impl.UserServiceImpl;
12
13 /**
14 * @author BieHongLi
15 * @version 创建时间:2017年3月11日 下午5:57:25
16 *
17 */
18 public class QueryRunnerTest {
19
20     private UserDao dao=new UserDaoImpl();
21     private UserService service=new UserServiceImpl();
22
23     //查询所有信息的测试
24     @Test
25     public void selectUser(){
26         List<User> list=dao.selectUser();
27         for(User u:list){
28             System.out.println(u);
29         }
30     }
31
32     //根绝id查询的信息
33     @Test
34     public void selectUserId(){
35         User user=dao.selectUserId(1);
36         System.out.println(user);
37     }
38
39     //根据条件查询信息
40     @Test
41     public void select(){
42         User user=new User();
43         user.setName("张三");
44         List<User> list=service.select(user);
45         for(User u:list){
46             System.out.println(u);
47         }
48     }
49
50     @Test
51     public void insertUser(){
52         User user=new User();
53         user.setName("张三");
54         user.setPassword("123456");
55         user.setEmail("[email protected]");
56         user.setPhone("11223");
57
58         boolean mark=service.insertUser(user);
59         if(mark){
60             System.out.println("插入成功");
61         }else{
62             System.out.println("插入失败");
63         }
64     }
65
66
67     @Test
68     public void update(){
69         User user=new User();
70         user.setName("李四");
71         user.setId(1);
72
73         boolean mark=service.updateUser(user);
74         if(mark){
75             System.out.println("修改成功");
76         }else{
77             System.out.println("修改失败");
78         }
79     }
80
81     @Test
82     public void delete(){
83         boolean mark=service.deleteUser(1);
84         if(mark){
85             System.out.println("用户信息删除成功");
86         }else{
87             System.out.println("用户信息删除失败");
88         }
89     }
90
91 }

演示效果如下所示:



初试成功,等待复试(技术试),加油!!!奋斗吧,小青年

时间: 2024-10-12 17:38:19

c3p0和QueryRunner的结合使用,让开发更加简便的相关文章

c3p0在spring中的配置

在大家的开发和学习当中应该经常用到数据库的连接和使用,不过连接 的方式就有很多种方式了,比方说用最最简单的JDBC 也好,还有用比 较复杂一点的就是数据库连接池,当然还有使用DBCP的连接的,各种方 法有各种方法的优势面和缺点,这据需要我们根据具体情况具体分析了 ,比方说要是一个并不是很大的项目的话,而且 使用的硬件机器的性 能也不是非常好的话,估计就没有必要使用数据库连接池了,毕竟连接 池平时总是管理着连接, 就会极大的占用这机器的运行性能和效率. (这里的C3P0的使用是基于Spring框架

做iOS开发我为什么弃用Objective-C而选择RubyMotion?

Hendrik Mans是德国汉堡市的一名程序员,他从事iOS开发已有很长一段时间了,起初他一直使用Objective-C语言进行编程而忽视了RubyMotion.从前他认为 RubyMotion只是个介于Ruby和Objective-C之间的交叉编译器,但后来他发现自己完全错了,现在Hendrik已彻底改变了自己的想法. RubyMotion 关于Ruby语言 Hendrik以前不仅从未用过 Ruby,还没少嘲笑过它.而现在Hendrik却认为,Ruby绝对是一种有着清晰漂亮语法的编程语言.R

android开发开源宝贝——持续更新。。。

2016年11月11日更新 http://www.apkbus.com/forum-417-1.html http://p.codekk.com/detail/Android/hejunlin2013/LivePlayback www.codekk.com https://github.com/Trinea/android-open-project Android 开源项目分类汇总 我们的微信公众号:codekk.二维码如下: 专注于 Android 开源分享.源码解析.框架设计.Android

大数据课程学习流程

第一阶段 Java编程基础→oracle/mysql→sql优化→jdbc 第二阶段 JavaScript基础→JavaScript深入→jQuery→jquery easyui→bootstrap 第三阶段 Servlet/jsp→ajax→xml→svn→maven实战项目一 第四阶段 Struts2→hibernate→spring/spring mvc→项目实战二→web serviceshiro→mybatis→项目实战三 第五阶段linux+搜索+hadoop体系 Linux基础→s

java 知识结构

JAVA基础阶段 阶段 技术名称 技术内容 T线 JavaSE JAVA 开发基础知识 | Eclipse 开发环境 | JavaSE 7.0 API | JavaSE 8.0新特性 | 多线程技术 | Socket 网络技术 | Regular Expression | Java反射技术 | Properties技术 | 各种实战设计模式| Java Debug技术 | 面向对象设计原则详解 | 实例解决面向对象设计  实战数据结构 数据结构实战训练 | 数组.链表等常用数据结构实战 反射机制

优秀的 Android 开源项目

摘要  转载http://www.trinea.cn/android/android-open-source-projects-view/,方便大家找到自己合适的资料 目录[-] 一.ListView 二.ActionBar 三.Menu 四.ViewPager .Gallery 五.GridView 六.ImageView 七.ProgressBar 八.其他 GitHub上优秀Android开源项目 3. Android开发神器 1.Xabber客户端 2.oschina客户端 3.手机安全

GitHub 优秀的 Android 开源项目

转自:http://blog.csdn.net/shulianghan/article/details/18046021 主要介绍那些不错个性化的View,包含ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar及其它如Dialog.Toast.EditText.TableView.Activity Animation等等. 一.ListView android-pulltorefresh 一个强大的拉动

GitHub上最火的74个Android开源项目(收藏)

GitHub上最火的40个Android开源项目(一) GitHub上最火的40个Android开源项目(二) GitHub上最火的74个Android开源项目(三) GitHub上最火的40个iOS开源项目(一) GitHub上最火的40个iOS开源项目(二) GitHub在中国的火爆程度无需多言,越来越多的开源项目迁移到GitHub平台上.更何况,基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要.利用这些项目,有时能够让你达到事半功倍的效果. 下面,就让我们

GitHub Android 最火开源项目Top20 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上。基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。

1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便地使用所有版本的Android动作栏的设计模式. 对于Android 4.0及更高版本,ActionBarSherlock可以自动使用本地ActionBar实现,而对于之前没有ActionBar功能的版本,基于Ice Cream Sandwich的自定义动作栏实现将自动围绕布局.能够让开发者轻松开发