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
51 }
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 * 根据条件查询信息
30 * @param user
31 * @return
32 */
33 public List<User> select(String sql,List<Object> list);
34
35
36 }
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
59 public List<User> select(String sql,List<Object> list) {
60 //创建QueryRunner
61 QueryRunner qr=BaseUtils.getQueryRunner();
62 try {
63 //第一个参数是传来的sql,第二个是实现实体类的设置,第三个是集合转化为数组
64 return qr.query(sql, new BeanListHandler<User>(User.class), list.toArray());
65
66 } catch (Exception e) {
67 e.printStackTrace();
68 }
69 return null;
70 }
71
72
73 }
这里将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
100 }
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
67 @Test
68 public void update(){
69 User user=new User();
70 user.setName("李四");
71 user.setId(1);
72
73 boolean mark=service.updateUser(user);
74 if(mark){
75 System.out.println("修改成功");
76 }else{
77 System.out.println("修改失败");
78 }
79 }
80
81 @Test
82 public void delete(){
83 boolean mark=service.deleteUser(1);
84 if(mark){
85 System.out.println("用户信息删除成功");
86 }else{
87 System.out.println("用户信息删除失败");
88 }
89 }
90
91 }
演示效果如下所示:
初试成功,等待复试(技术试),加油!!!奋斗吧,小青年