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. Spring架构简单描述

    原文:https://www.shiyanlou.com/courses/document/212 Spring 概述 1. Spring 是什么 Spring是一个开源的轻量级Java SE(Jav ...

  2. Git与GitHub学习笔记(五)一次提交失败的记录

    代码已经跟踪了,添加注释说明,但是总是添加不了 error: pathspec 'live-page'' did not match any file(s) known to git. 重复了好多遍, ...

  3. xml总结(一 )

    一.了解 XML(eXtensive Markup Language)可扩展标记语言. XML是被用来传输和存储数据,焦点是内容,是对html的补充. HTML是将数据进行格式化显示.xml需要自定义 ...

  4. STM32L15XXX 入门笔记

    一.系统时钟默认是32M,最高支持32M,不过下图已经改成72M也可以运行,可能会有什么后遗症,位置在 二.定时器1ms两种方法1.Main.c里 void delay_nms(uint32_t ti ...

  5. u-boot移植(十三)---代码修改---裁剪及环境变量 一

    一.内核裁剪 内核的裁剪首先就是修改我们的配置文件,即 include/configs/jz2440.h 文件,里面定义的很多宏,我们也许用不上的就要去掉. /* * (C) Copyright 20 ...

  6. VS中空项目、win32项目、控制台程序的区别(转)

    空项目,大多数想单纯创建c++工程的新同学,打开vs后很可能不知道选择创建什么工程,这时候请相信我,空项目是你最好的选择.因为空工程不包含任何的源代码文件,接下来你只需要在相应的源代码文件夹和头文件文 ...

  7. .net 事务处理

    方法1:直接写入到sql 中在存储过程中使用 BEGIN TRANS, COMMIT TRANS, ROLLBACK TRANS 实现begin transdeclare @orderDetailsE ...

  8. 出现fonts/fontawesome-webfont.woff?v=4.5.0 net::ERR_ABORTED

    虽然网页正常显示和运行,但是有2个字体文件出现404错误. 原因:服务器没有配置MIME类型而已. 1. 在IIS网站中,找打网站对应的MIME类型,双击. 2.能看到此网站对应的MIME类型,点击右 ...

  9. 图片的Base64编码

    Base64编码是一种图片处理格式,通过特定的算法将图片编码成一长串字符串,在页面上显示的时候,可以用该字符串来代替图片的url属性. 我们可以来看一下实际的效果 Base64编码效果 在上图中,我们 ...

  10. URLSession

    URLSession时ios7中的心得网络接口,与NSURLConnection是并列的. 当程序在前台时,URLSession与NSURLConnection大部分可以互相替代. URLSessio ...