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文件
<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的结合使用,让开发更加简便的更多相关文章
- c3p0在spring中的配置
在大家的开发和学习其中应该经经常使用到数据库的连接和使用,只是连接 的方式就有非常多种方式了,例如说用最最简单的JDBC 也好,还实用比 较复杂一点的就是数据库连接池.当然还有使用DBCP的连接的,各 ...
- [SAP ABAP开发技术总结]OPEN SQL
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Android开发中用到的框架、库介绍
Android开发中用到的框架介绍,主要记录一些比较生僻的不常用的框架,不断更新中...... 网路资源:http://www.kuqin.com/shuoit/20140907/341967.htm ...
- 【如何快速的开发一个简单的iOS直播app】(代码篇)
开篇([如何快速的开发一个完整的iOS直播app](原理篇)) 好久没写简书,因为好奇的我跑去学习直播了,今天就分享一下我的感慨. 目前为止直播还是比较热点的技术的,简书,git上有几篇阅读量和含金量 ...
- 【Android 应用开发】GitHub 优秀的 Android 开源项目
原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea 主要介绍那些不错个性化的View,包括Lis ...
- 源码下载:74个Android开发开源项目汇总
1. ActionBarSherlock ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便地使用所 ...
- java 知识结构
JAVA基础阶段 阶段 技术名称 技术内容 T线 JavaSE JAVA 开发基础知识 | Eclipse 开发环境 | JavaSE 7.0 API | JavaSE 8.0新特性 | 多线程技术 ...
- CRL快速开发框架开源完全转到Github
CRL简介 CRL是一款面向对象的轻量级ORM框架,本着快速开发,使用简便的原则,设计为 无需关心数据库结构,CRL自动维护创建,即写即用(CRL内部有表结构检查机制,保证表结构一致性) 无需第三方工 ...
- CRL快速开发框架升级到3.1
CRL是一款面向对象的轻量级ORM框架,本着快速开发,使用简便的原则,设计为 无需关心数据库结构,CRL自动维护创建,即写即用(CRL内部有表结构检查机制,保证表结构一致性) 无需第三方工具生成代理类 ...
随机推荐
- Windows 上安装 Redis 及可能出现的错误和解决方法!
前言 Redis(REmote Dictionary Server) 是一种以key-value写得存储系统.他是开源的ANSI语言编写的.遵守BSD协议.被称作“数据结构服务器”,因为它的值(val ...
- CentOS6.8下安装xz命令
我们有时候会下载到.xz结尾的压缩文件,这时候需要用到xz命令来解压这类文件,而当我们想要用yum -y install xz时,又没有关于xz的安装包,因此就找到一个xz的编译安装包进行编译安装. ...
- indexOf与includes的比较
indexOf和includes都代表检测数组或字符串中是否包含某一个元素 其中indexOf返回的是数值类型,而includes返回的是布尔类型 var ary = [,,]; console.lo ...
- VS设置以管理员方式运行
一直以为VS不能直接以管理员方式运行,原来它是在高级里的.
- axios - 基于 Promise 的 HTTP 异步请求库
axios 是基于 Promise 的 HTTP 请求客户端,可同时在浏览器和 node.js 中使用.Vue 更新到2.0之后,作者就宣告不再对 vue-resource 模块更新,而是推荐使用 a ...
- android ContentObserver内容观察者基本使用
package com.example.observertest; import android.content.ContentResolver; import android.database.Co ...
- js 碰撞 + 重力 运动
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- if语句与switch语句
if语句可以替代switch语句,但是switch语句不能完全替代if语句.比如下面这种就是不对的 switch (len) { case (len <= 4): domLen = 4; bre ...
- python 错误: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
参照:http://www.runoob.com/django/django-form.html 做了个表单提交和回显,但是报了以上错误 查资料发现是 python从request取值的是unicod ...
- 【API】检查进程是否存在 - CreateToolhelp32Snapshot
1 学习目标 今天静态逆向mydocument病毒时,看到病毒代码为了防止自身被调试会先检测杀毒软件和调试工具的进程是否存在.如果没有杀毒软件则释放真正的病毒文件,提前熟悉一下枚举进程的反汇编代码. ...