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. }

  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. * @param user
  30. * @return
  31. */
  32. public List<User> select(String sql,List<Object> list);
  33.  
  34. }
  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. public List<User> select(String sql,List<Object> list) {
  59. //创建QueryRunner
  60. QueryRunner qr=BaseUtils.getQueryRunner();
  61. try {
  62. //第一个参数是传来的sql,第二个是实现实体类的设置,第三个是集合转化为数组
  63. return qr.query(sql, new BeanListHandler<User>(User.class), list.toArray());
  64.  
  65. } catch (Exception e) {
  66. e.printStackTrace();
  67. }
  68. return null;
  69. }
  70.  
  71. }

  这里将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. }

  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("1748@qq.com");
  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. @Test
  67. public void update(){
  68. User user=new User();
  69. user.setName("李四");
  70. user.setId(1);
  71.  
  72. boolean mark=service.updateUser(user);
  73. if(mark){
  74. System.out.println("修改成功");
  75. }else{
  76. System.out.println("修改失败");
  77. }
  78. }
  79.  
  80. @Test
  81. public void delete(){
  82. boolean mark=service.deleteUser(1);
  83. if(mark){
  84. System.out.println("用户信息删除成功");
  85. }else{
  86. System.out.println("用户信息删除失败");
  87. }
  88. }
  89.  
  90. }

演示效果如下所示:


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

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

  1. c3p0在spring中的配置

    在大家的开发和学习其中应该经经常使用到数据库的连接和使用,只是连接 的方式就有非常多种方式了,例如说用最最简单的JDBC 也好,还实用比 较复杂一点的就是数据库连接池.当然还有使用DBCP的连接的,各 ...

  2. [SAP ABAP开发技术总结]OPEN SQL

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. Android开发中用到的框架、库介绍

    Android开发中用到的框架介绍,主要记录一些比较生僻的不常用的框架,不断更新中...... 网路资源:http://www.kuqin.com/shuoit/20140907/341967.htm ...

  4. 【如何快速的开发一个简单的iOS直播app】(代码篇)

    开篇([如何快速的开发一个完整的iOS直播app](原理篇)) 好久没写简书,因为好奇的我跑去学习直播了,今天就分享一下我的感慨. 目前为止直播还是比较热点的技术的,简书,git上有几篇阅读量和含金量 ...

  5. 【Android 应用开发】GitHub 优秀的 Android 开源项目

    原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea 主要介绍那些不错个性化的View,包括Lis ...

  6. 源码下载:74个Android开发开源项目汇总

    1. ActionBarSherlock ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便地使用所 ...

  7. java 知识结构

    JAVA基础阶段 阶段 技术名称 技术内容 T线 JavaSE JAVA 开发基础知识 | Eclipse 开发环境 | JavaSE 7.0 API | JavaSE 8.0新特性 | 多线程技术 ...

  8. CRL快速开发框架开源完全转到Github

    CRL简介 CRL是一款面向对象的轻量级ORM框架,本着快速开发,使用简便的原则,设计为 无需关心数据库结构,CRL自动维护创建,即写即用(CRL内部有表结构检查机制,保证表结构一致性) 无需第三方工 ...

  9. CRL快速开发框架升级到3.1

    CRL是一款面向对象的轻量级ORM框架,本着快速开发,使用简便的原则,设计为 无需关心数据库结构,CRL自动维护创建,即写即用(CRL内部有表结构检查机制,保证表结构一致性) 无需第三方工具生成代理类 ...

随机推荐

  1. POJ - 1039 Pipe(计算几何)

    http://poj.org/problem?id=1039 题意 有一宽度为1的折线管道,上面顶点为(xi,yi),所对应的下面顶点为(xi,yi-1),假设管道都是不透明的,不反射的,光线从左边入 ...

  2. Hdu 5072 Coprime(容斥+同色三角形)

    原题链接 题意选出三个数,要求两两互质或是两两不互质.求有多少组这样的三个数. 分析 同色三角形n个点 每两个点连一条边(可以为红色或者黑色),求形成的三条边颜色相同的三角形的个数反面考虑这个问题,只 ...

  3. VUE2.0 饿了吗视频学习笔记(七-终):compute,循环,flex,display:table

    一.star组件使用到了computed属性 computed相当于属性的一个实时计算,当对象的某个值改变的时候,会进行实时计算. computed: { starType() { return 's ...

  4. spring注解第06课 @Value

    1.注入<bean>中的属性 支持3种类型的赋值 <bean id="person" class="com.model.Person"> ...

  5. Centos7编译hadoop异常:Received fatal alert: handshake_failure

    保持网络畅通 或者 配置代理 能够访问cdh的仓库 https://repository.cloudera.com/artifactory/cloudera-repos/ 编译hadoop版本 had ...

  6. mysql 原理 ~ sql执行

    一 普通sql执行的具体过程1 连接器  管理连接,权限验证2 分析器  词法分析,语法分析   比如 数据表和数据列是否存在, 别名是否有歧义,是否符合标准sql语法等3 优化器检测   执行计划生 ...

  7. android彻底关闭应用程序方法

    Android SDK > 7(Android2.1)之后,即Android2.2及以后版本彻底关闭应用的方法,目前试验只有一下方法有效: Intent startMain = new Inte ...

  8. html 速查表

    HTML 速查列表 HTML 速查列表. 你可以打印它,以备日常使用. HTML 基本文档 <!DOCTYPE html> <html> <head> <ti ...

  9. 【API】检查进程是否存在 - CreateToolhelp32Snapshot

    1 学习目标 今天静态逆向mydocument病毒时,看到病毒代码为了防止自身被调试会先检测杀毒软件和调试工具的进程是否存在.如果没有杀毒软件则释放真正的病毒文件,提前熟悉一下枚举进程的反汇编代码. ...

  10. MR室内室外用户区分

    mro_view_details_year中v3字段 1:室外用户 0:室内用户 主小区是室内站 主小区信号>-90dBm ==> 室内 主小区信号>-100dBm &&am ...