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文件

 <c3p0-config>

     <!-- c3p0默认配置,下面还可以配置多个数据库 -->
<default-config>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/test
</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="initialPoolSize">6</property>
<property name="maxPoolSize">50</property>
<property name="maxIdleTime">1000</property>
</default-config> </c3p0-config>

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

 package com.bie.po;
/**
* @author BieHongLi
* @version 创建时间:2017年3月11日 下午12:55:21
*
*/
public class User { private int id;
private String name;
private String password;
private String email;
private String phone;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + ", phone=" + phone
+ "]";
} }

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

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

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

 package com.bie.dao;

 import java.util.List;

 import com.bie.po.User;

 /**
* @author BieHongLi
* @version 创建时间:2017年3月11日 下午5:46:38
*
*/
public interface UserDao { /***
* 查询所有的用户信息
* @return
*/
public List<User> selectUser(); /***
* 根据编号查询
* @param id
* @return
*/
public User selectUserId(int id); /***
* 根据条件查询信息
* @param user
* @return
*/
public List<User> select(String sql,List<Object> list); }
 package com.bie.dao.impl;

 import java.util.List;

 import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler; import com.bie.dao.UserDao;
import com.bie.po.User;
import com.bie.util.BaseUtils; /**
* @author BieHongLi
* @version 创建时间:2017年3月11日 下午5:47:35
*
*/
public class UserDaoImpl implements UserDao{ @Override
public List<User> selectUser() {
//创建QueryRunner
//记住查询是BeanListHandler区别增删改的方法BeanHandler
QueryRunner qr=BaseUtils.getQueryRunner();
try {
String sql="select * from user ";
//这句话就相当于之前写的下面这一长串代码,这就是QueryRunner的方便之处
/***
*User user=new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
user.setEmail(rs.getString("email"));
user.setPhone(rs.getString("phone"));
*/
return qr.query(sql, new BeanListHandler<User>(User.class)); } catch (Exception e) {
e.printStackTrace();
}
return null;
} @Override
public User selectUserId(int id) {
//创建QueryRunner
QueryRunner qr=BaseUtils.getQueryRunner();
String sql="select * from user where id=? ";
try {
//使用QueryRunner的强大之处在于此处。
return qr.query(sql,new BeanHandler<User>(User.class), id);
} catch (Exception e) {
e.printStackTrace();
}
return null;
} public List<User> select(String sql,List<Object> list) {
//创建QueryRunner
QueryRunner qr=BaseUtils.getQueryRunner();
try {
//第一个参数是传来的sql,第二个是实现实体类的设置,第三个是集合转化为数组
return qr.query(sql, new BeanListHandler<User>(User.class), list.toArray()); } catch (Exception e) {
e.printStackTrace();
}
return null;
} }

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

 package com.bie.util;

 import java.sql.SQLException;
import java.util.List; import javax.sql.DataSource; import org.apache.commons.dbutils.QueryRunner; import com.mchange.v2.c3p0.ComboPooledDataSource; /**
* @author BieHongLi
* @version 创建时间:2017年3月11日 下午1:29:50
* 数据库连接工具类
*/
public class BaseUtils { //初始化c3p0
private static DataSource dataSource=null; static{
//自动加载src目录下面的c3p0的配置文件,【c3p0-config.xml】
dataSource = new ComboPooledDataSource();
} public static QueryRunner getQueryRunner(){
//第一步:创建QueryRunner对象,传入连接池对象
//在创建QueryRunner对象的时候,如果传入数据对象dataSource,
//那么在使用QueryRunner对象的方法时候,就不需要传入连接对象
QueryRunner query=new QueryRunner(dataSource);
//第二步:会自动从数据源中获取连接(不用关闭连接)
return query;
} /***
* 实现增删改的公共方法
* @param sql
* @param arr
* @return
*/
public static boolean addUpdateDelete(String sql,Object[] arr){
QueryRunner qr=getQueryRunner();
int count;
try {
count = qr.update(sql, arr);
if(count>0){
return true;
}else{
return false;
}
} catch (SQLException e) {
e.printStackTrace();
}
return false;
} }

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

 package com.bie.service;

 import java.util.List;

 import com.bie.po.User;

 /**
* @author BieHongLi
* @version 创建时间:2017年3月11日 下午7:10:32
*
*/
public interface UserService { /***
* 根据条件查询用户信息
* @param user
* @return
*/
public List<User> select(User user); /***
* 添加用户信息
* @param user
* @return
*/
public boolean insertUser(User user); /***
* 修改用户的信息
* @param user
* @return
*/
public boolean updateUser(User user); /***
* 删除用户信息
* @param id
* @return
*/
public boolean deleteUser(int id);
}
 package com.bie.service.impl;

 import java.util.ArrayList;
import java.util.List; import com.bie.dao.UserDao;
import com.bie.dao.impl.UserDaoImpl;
import com.bie.po.User;
import com.bie.service.UserService;
import com.bie.util.BaseUtils; /**
* @author BieHongLi
* @version 创建时间:2017年3月11日 下午7:10:48
*
*/
public class UserServiceImpl implements UserService{ private UserDao dao=new UserDaoImpl(); @Override
public List<User> select(User user) {
StringBuilder sql=new StringBuilder("select * from user where 1=1 ");
List<Object> list=new ArrayList<Object>();
if(user!=null){
//根据编号查询
if(user.getId()!=0 && !"".equals(user.getId())){
sql.append(" and id = ? ");
list.add(user.getId());
} //根据名称模糊查询,模糊查询"" %% "" ++
if(user.getName()!=null && !"".equals(user.getName())){
sql.append(" and name like ? ");
list.add("%"+user.getName()+"%");
}
} return dao.select(sql.toString(), list);
} @Override
public boolean insertUser(User user) {
String sql="insert into user values(0,?,?,?,?)";
List<Object> list=new ArrayList<>();
if(user!=null){
list.add(user.getName());
list.add(user.getPassword());
list.add(user.getEmail());
list.add(user.getPhone());
}
try {
return BaseUtils.addUpdateDelete(sql, list.toArray());
} catch (Exception e) {
e.printStackTrace();
}
return false;
} @Override
public boolean updateUser(User user) {
String sql="update user set name=?,password=?,email=?,phone=? where id=? ";
List<Object> list=new ArrayList<>();
if(user!=null){
list.add(user.getName());
list.add(user.getPassword());
list.add(user.getEmail());
list.add(user.getPhone()); //根据编号修改信息
list.add(user.getId());
} try {
return BaseUtils.addUpdateDelete(sql, list.toArray());
} catch (Exception e) {
e.printStackTrace();
}
return false;
} @Override
public boolean deleteUser(int id) {
String sql="delete from user where id=? ";
List<Object> list=new ArrayList<>();
if(id!=0){
//根据编号修改信息
list.add(id);
} try {
return BaseUtils.addUpdateDelete(sql, list.toArray());
} catch (Exception e) {
e.printStackTrace();
}
return false;
} }

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

 package com.bie.test;

 import java.util.List;

 import org.junit.Test;

 import com.bie.dao.UserDao;
import com.bie.dao.impl.UserDaoImpl;
import com.bie.po.User;
import com.bie.service.UserService;
import com.bie.service.impl.UserServiceImpl; /**
* @author BieHongLi
* @version 创建时间:2017年3月11日 下午5:57:25
*
*/
public class QueryRunnerTest { private UserDao dao=new UserDaoImpl();
private UserService service=new UserServiceImpl(); //查询所有信息的测试
@Test
public void selectUser(){
List<User> list=dao.selectUser();
for(User u:list){
System.out.println(u);
}
} //根绝id查询的信息
@Test
public void selectUserId(){
User user=dao.selectUserId(1);
System.out.println(user);
} //根据条件查询信息
@Test
public void select(){
User user=new User();
user.setName("张三");
List<User> list=service.select(user);
for(User u:list){
System.out.println(u);
}
} @Test
public void insertUser(){
User user=new User();
user.setName("张三");
user.setPassword("123456");
user.setEmail("1748@qq.com");
user.setPhone("11223"); boolean mark=service.insertUser(user);
if(mark){
System.out.println("插入成功");
}else{
System.out.println("插入失败");
}
} @Test
public void update(){
User user=new User();
user.setName("李四");
user.setId(1); boolean mark=service.updateUser(user);
if(mark){
System.out.println("修改成功");
}else{
System.out.println("修改失败");
}
} @Test
public void delete(){
boolean mark=service.deleteUser(1);
if(mark){
System.out.println("用户信息删除成功");
}else{
System.out.println("用户信息删除失败");
}
} }

演示效果如下所示:


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

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. JAVA中初始化ArrayList的三种方式

    下面讲一下ArrayList初始化的几种不同方式. 一.最常用的初始化方式. List<String> list1 = new ArrayList<String>(); lis ...

  2. Codeforces Round #470 (rated, Div. 2, based on VK Cup 2018 Round 1) C.Producing Snow

    题目链接  题意  每天有体积为Vi的一堆雪,所有存在的雪每天都会融化Ti体积,求出每天具体融化的雪的体积数. 分析 对于第i天的雪堆,不妨假设其从一开始就存在,那么它的初始体积就为V[i]+T[1. ...

  3. 解决iOS10下Meta设置user-scalable=no无效问题

    苹果为了提高Safari中网站的辅助功能,屏蔽了Meta下的user-scalable=no功能 所以在iOS10下面,就算加上user-scalable=no,Safari浏览器也能支持手动缩放 解 ...

  4. Python基础(函数部分)-day04

    写在前面 上课第四天,打卡: 加勒比海盗今天上映:端午节公司发的粽子很有范! 一.函数的基本概念 - 函数是什么?  函数,就是一个'锤子',一个具有特定功能的'锤子',使用者可以在适当的时候使用这个 ...

  5. Django学习手册 - 正则URL路由配置/路由分发

    ############################################### 总结: 一.url路由配置: 方式一:(通过url链接get获取) 方式二:(url路由匹配方式获取-拓 ...

  6. 如何调整cell的大小

    一般情况下,我们使用tableview的时候从来没有设置过cell的大小(w,h).位置(x,y)等,而是系统直接给我们自动生成,但是有的时候我们可能会改动cell的大小及位置,比如:在适配ios6跟 ...

  7. 重新学习Servlet

    package javax.servlet; import java.io.IOException; public interface Servlet { public void init(Servl ...

  8. 【ARTS】01_09_左耳听风-20190107~20190113

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  9. gdb 调试入门,大牛写的高质量指南

    引用自:http://blog.jobbole.com/107759/ gdb 调试 ncurses 全过程: 发现网上的“gdb 示例”只有命令而没有对应的输出,我有点不满意.gdb 是 GNU 调 ...

  10. ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Memory order

    1.前言 2.基本概念 Observer 可以发起对memory read/write访问的都是observer; Observability 是一种观察能力,通过read可以感知到别的observe ...