简化开发的冗余代码java
转帐操做
mysql
将对个Sql操做封装成一个事务对象,它有返回值,执行成功就返回ture,否者返回false.而后对事务进行回滚(rollback)不破坏原有数据web
public static int update(Connection con,String sql,Object...Para)
QueryRunner类的query方法 public T<T> query (Connection con,String sql,ResultSetHandler r,Object...params)
public static void insert(){ QueryRunner qr = new QueryRunner(); String sql = "INSERT INTO sort (sname,pass,desc)VALUE(?,?,?)" Object[] params = {"xxxx",123,"xxxx"}; int row = qr.update(con,sql,params); DbUtils.closeQuiety(con); } public static void delete(){ }
结果集处理接口,对全部的查询结果数据的处理类,每一种对应的实现类就是一种结果的处理方式sql
Function | describle |
---|---|
ArrayHandler | 将结果集封装到Object[]数组中每一个元素就是一个字段的值 |
ArrayListHandler | 将结果的每一条记录封装搭配Object[]中,在封装到List中 |
将结果集中的第一条记录封装到指定JavaBean中 | |
BeanListHandler | 将结果的每条记录封装到JavaBean中,在封装到List中 |
ColumnListHandler | 将结果集中指定的列的字段值封装到List中 |
ScalarHandler | 用于单数据如:SELECT count(*) FROM 'table' |
MapHandler | |
MapListHandler |
既是以各类不一样的方式来处理结果数据库
//将结果集的第一行存储到对象数组中Object[] QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort"; //调用方法的query Objcet[] objs = qr.query(con,sql,new ArrayHandler()); //遍历查询结果 for(Object[] obj:objcs){ //TODO }
QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort"; List<Object[]> results = qr.query(con,sql,new ArrayListHandler()); for(Object[] objs:results){ for(Object obj:objs){ //TODO } }
实现BeanHandler的构造传入的类必须用空参的构造器数组
//无论数据有多少只把第一行封装到bean对象 QueryRunner qr = newe QueryRunner(); String sql = "SELETE * FROM sort"; //BeanHandler没有空参构造器 //public BeanHandler(Class c)传递Sort类的class文件对象 Sort s = qr.query(con,sql,new BeanHandler<Sort>(Sort.class)); //若是没有这个结果集那么被封装到Bean的对象就是null
//将结果集的每一行封装到JavaBean对象 QueryRunner qr = new QueryHandler(); String sql = ""; List<Sort> list = qr.query(con,sql,new BeanListHandler<Sort>(Sort.class)); for(Sort s : list){ //TODO }
//将指定的列的数据封装到List集合 QueryRunner qr = new QueryRunner(); String sql = "SELECT * FROM sort"; //在column中要拿那一列就要在sql语句中有体现 List<Object> list = qr.query(con,sql,new ColumnListHandler<Object>("columnName")); for(Object obj : list){ //TODO }
对于查询之后只有一个结果的查询适用安全
QueryRunner qr = new QueryRunner(); String sql = "SELECT count(*) FROM sort"; //必须保证结果的类型是肯定的才能够肯定类型,否者都是Object Object obj = qr.query(con,sql,new ScalerHandler);
QueryHandler qr = new QueryHandler(); String sql = "SELECT * FROM sort"; //返回值:map集合,Map接口的实现类。泛型 Map<String,Object> map = qr.query(con,sql,new MapHandler()) for(Object obj : map){ //TODO }
QueryHandler qr = new QueryHandler(); String sql = "SELECT * FROM sort"; List<Map<String,Object>> list = qr.query(con,sql,new MapListHandler()); for(Map<String,Object> map :list){ for(String key : map.getKey()){ map.getValue(key); } }
若是操做链接与释放资源操做就会占用大量的资源,特别是对于多用户链接访问的网络程序服务器
规范:
数据源的链接池都是由第三方提供,可是无论是谁提供都的实现javax.sql.DataSource网络
Tomcat:
java的web服务器,内置了一个链接池,把咱们写好的class文件放在Tomcat中,在运行是,Tomcat会监听端口。ui
因此开发一个交互数据库项目须要不少的jar包的支持