使用JDBC技术是一件麻烦的事情,为了使数据库更加高效,有一种简化jdbc技术的操作--DBUtils。DbUtils(org.apache.commons.dbutils.DbUtils)是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。DbUtils类主要负责装载驱动、关闭连接的常规工作。
QreryRunner类(org.apache.commons.dbutils.QueryRunner) 是Dbutils的核心类之一,它显著的简化了SQL查询,并与ResultSetHandler协同工作将使编码量大为减少。
首先,我们调用一下QueryRunner
private QueryRunner queryRunner = new QueryRunner();
编写增、删、改操作——BaseDao
public int updata(String sql, Object... args) { Connection connection = jdbcutil.getConnection(); try { return queryRunner.update(connection, sql, args); } catch (SQLException e) { e.printStackTrace(); } finally { jdbcutil.close(connection); } return -1; }
jdbcutil.getConnection()这个是我们已经编写好的jdbc连接工具,在这里进行调用
String sql, Object... args这个是我们针对我们即将要编写sql语句传递的一些参数、我们在编写sql语句的时候、针对我们不同的操作、我们会使用占位符来帮助我们实现很好的代码复用,这里的Object... args是可以传递任意个数的Object对象。
操作成功返回1失败就是-1
这里我们需要对获取或者修改的数据做持久化操作——Pojo(JavaBean)
public class User{ private String username; private String password; public User() {} public User(String username, String password) { this.username = username; this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "BaseDaao{" + "username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
然后我们就可以操作数据库、使用不同的sql语句完成所需操作
public int saveUserInformation(User user) { String sql = "insert into userinformation(username,password)values(?,?)"; return updata(sql,user.getUsername(),user.getPassword()); }
就好比在我们javaweb里面,编写的注册页面、需要保存信息到我们的user表里面、我们将sql语句传入进我们的BaseDao里面、再将我们需要保存的数据先用占位符?保留位置、随着sql语句把数据一起传进去,如果我们在这里写死了的话,那么一个BaseDao是无法满足我们整个程序的编写
对于操作数据库的大体流程就是这样
我们可以再编写出比较基本的两个查询数据库的方法
根据用户名查找整个用户信息
public <T> T queryForOne(Class<T> type,String sql,Object ...args){ Connection connection = jdbcutil.getConnection(); try { return queryRunner.query(connection,sql,new BeanHandler<T>(type),args); } catch (SQLException e) { e.printStackTrace(); }finally { jdbcutil.close(connection); } return null; }
Class<T> type因为我们再使用BeanHandler的时候,返回的是我们的javabean,也就是帮助我们把信息都封装进了pojo
public User queryUserByUserAndPassword(String username, String password) { String sql = "select * from userinformation where username= ? and password= ?"; return queryForOne(User.class,sql,username,password); }
返回全部信息
public <T> List<T> queryUser(Class<T> type, String sql, Object... args) { Connection connection = jdbcutil.getConnection(); try { return queryRunner.query(connection, sql, new BeanListHandler<T>(type), args); } catch (SQLException e) { e.printStackTrace(); } finally { jdbcutil.close(connection); } return null; }
这里我们返回的是一个List数组的JavaBean
public List<User> queryUser() { String sql = "select * from userinformation"; return queryUser(User.class,sql); }