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 编程下使用 Class.forName() 加载类【转】

    在一些应用中,无法事先知道使用者将加载什么类,而必须让使用者指定类名称以加载类,可以使用 Class 的静态 forName() 方法实现动态加载类.下面的范例让你可以指定类名称来获得类的相关信息. ...

  2. Javaweb学习笔记——(六)——————xml中jaxp两种解析方式和dom4j运用

    1.xml的scheam约束 dtd的语法:<!ElEMENT 元素名称 约束> **schema符合xml的语法,xml语句 **一个xml中可以有多个schema,多个schema使用 ...

  3. String类型的方法总结

    String :字符串对象的包装类型 var stringObject = new String("wanglehui"); 方法总结: 1.返回该对象表示的基本字符串值(也就是返 ...

  4. C++常量 运算符

    \n  换行   光标移到下一行             \0  空值                               \t   水平制表符 \r   回车  光标回到本行开头      ...

  5. QDoubleSpinBox浮点型数字调节框

    样式: import sys from PyQt5.QtWidgets import QApplication, QWidget, QDoubleSpinBox class Demo(QWidget) ...

  6. cocos2d-x 2.1.4 项目配置过程

    http://cocos2d-x.org 下载cocos2d-x 2.1.4 使用project-creator.py脚本创建Cocos2d-win32 Application项目 1.先下载Wind ...

  7. 洛谷4718【模板】Pollard-Rho算法

    传送门 Description: 给定T个数,分别求出它们的最大质因数 Solution: 其实大概框架是很容易想到的 对于一个数n 找到它的一个因数x 判断这个因数是不是质数 如果是质数就更新答案 ...

  8. BN讲解(转载)

    本文转载自:http://blog.csdn.net/shuzfan/article/details/50723877 本次所讲的内容为Batch Normalization,简称BN,来源于< ...

  9. 分布式系列 - dubbo服务telnet命令【转】

    dubbo服务发布之后,我们可以利用telnet命令进行调试.管理.Dubbo2.0.5以上版本服务提供端口支持telnet命令,下面我以通过实例抛砖引玉一下: 1.连接服务 测试对应IP和端口下的d ...

  10. 阿里云服务器搭建FTP

    操作系统:Windows Server 2008 R2企业版. 首先,创建一个用户组:ftpUsers,创建一个用户:ftpAdmin.并将ftpAdmin隶属于ftpUsers组 其次,需要安装ft ...