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 }
演示效果如下所示:
初試成功,等待復試(技術試),加油!!!奮斗吧,小青年