首页 > 代码库 > c3p0和QueryRunner的结合使用,让开发更加简便
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文件
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 @Override45 public String toString() {46 return "User [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + ", phone=" + phone47 + "]";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 * @return17 */18 public List<User> selectUser();19 20 /***21 * 根据编号查询22 * @param id23 * @return24 */25 public User selectUserId(int id);26 27 28 /***29 * 根据条件查询信息30 * @param user31 * @return32 */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 @Override21 public List<User> selectUser() {22 //创建QueryRunner23 //记住查询是BeanListHandler区别增删改的方法BeanHandler24 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 @Override45 public User selectUserId(int id) {46 //创建QueryRunner47 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 //创建QueryRunner61 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 //初始化c3p020 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 sql39 * @param arr40 * @return41 */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 user17 * @return18 */19 public List<User> select(User user);20 21 /***22 * 添加用户信息23 * @param user24 * @return25 */26 public boolean insertUser(User user);27 28 /***29 * 修改用户的信息30 * @param user31 * @return32 */33 public boolean updateUser(User user);34 35 /***36 * 删除用户信息37 * @param id38 * @return39 */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 @Test25 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 @Test34 public void selectUserId(){35 User user=dao.selectUserId(1);36 System.out.println(user);37 }38 39 //根据条件查询信息40 @Test41 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 @Test51 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 @Test68 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 @Test82 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 }
演示效果如下所示:
初试成功,等待复试(技术试),加油!!!奋斗吧,小青年
c3p0和QueryRunner的结合使用,让开发更加简便