数据库框架DBUtils

一,数据库有关框架:

1.框架:提高开发效率。按部就班

2.数据库框架:

  ORM:Object Relation Mapping 对象关系映射。JavaBean --Object数据库----Relation

  知名框架:Hibernate ,MyBatis,JPA(Java Persist API:JavaEE技术之一,ORM标准)

-----------------------------------------------------------------------------------------------------------------------

DBUtils,Spring JDBCTemplate不能算是ORM框架,只是对JDBC编码进行简化处理

二、DBUtils框架:

   QueryRunner:

     1.构造方法:

          QueryRunner()默认构造方法;

          QueryRunner(DataSource ds)需要一个数据源;

     2.具体方法:

          batch:批处理

          int[] batch(Connection conn, String sql, Object[][] params)  // Execute a batch of SQL INSERT, UPDATE, or DELETE queries.使用默认构造方法时

               int[] batch(String sql, Object[][] params) //  Execute a batch of SQL INSERT, UPDATE, or DELETE queries.  

             Object[][]params:高维:执行的语句条数,低维:每条语句需要的参数

          

          query:查询

          public <T> T query(String sql,ResultSetHandler<T> rsh,Object... params)throws SQLException  

////Executes the given SELECT SQL query and returns a result object. The Connection is retrieved from the DataSource set in the constructor.

          public <T> T query(Connection conn,String sql,ResultSetHandler<T> rsh, Object... params)throws SQLException

////Executes the given SELECT SQL query and returns a result object. The Connection is retrieved from the DataSource set in the constructor.

          update:DML  INSERT  UPDATE  DELETE

          int update(String sql, Object... params)   Executes the given INSERT, UPDATE, or DELETE SQL statement.

          update(Connection conn,String sql, Object... params)    Executes the given INSERT, UPDATE, or DELETE SQL statement.

注意:多次调用update方法,需要在一个事物中,用update(Connection conn,String sql, Object... params),用默认构造方法。

          

 例子:

 1 import java.io.File;
 2 import java.io.FileInputStream;
 3 import java.io.FileReader;
 4 import java.io.InputStream;
 5 import java.io.Reader;
 6 import java.sql.Blob;
 7 import java.sql.Clob;
 8 import java.sql.SQLException;
 9 import java.util.Date;
10 
11 import javax.sql.rowset.serial.SerialBlob;
12 import javax.sql.rowset.serial.SerialClob;
13 
14 import org.apache.commons.dbutils.QueryRunner;
15 import org.junit.Test;
16 
17 import com.itheima.util.DBCPUtil;
18 
19 /*
20 create table student(
21     id int primary key,
22     name varchar(100),
23     birthday date
24 );
25  */
26 public class DBUtilDemo1 {
27     private QueryRunner qr = new QueryRunner(DBCPUtil.getDataSource());
28     @Test
29     public void testAdd() throws SQLException{
30         qr.update("insert into student values(?,?,?)", 1,"wf",new Date());
31     }
32 //    @Test
33 //    public void testAdd1() throws SQLException{
34 //        qr.update("insert into student values(?,?,?)", 2,"qhs","1930-09-08");
35 //    }
36     
37     /*
38      * create table t1(id int primary key,content longblob);
39      */
40     @Test 
41     public void testBlob() throws Exception{
42 //        InputStream in = new FileInputStream("src/20.jpg");
43 //        qr.update("insert into t1 values(?,?)", 1,in);
44         
45         InputStream in = new FileInputStream("src/20.jpg");
46         byte b[] = new byte[in.available()];
47         in.read(b);
48         in.close();
49         Blob blob = new SerialBlob(b);
50         qr.update("insert into t1 values(?,?)", 2,blob);
51     }
52     /*
53      * create table t2(id int primary key,content longtext);
54      */
55     @Test 
56     public void testClob() throws Exception{
57         File file = new File("src/jpm.txt");
58         Reader r = new FileReader(file);
59         char ch[] = new char[(int)file.length()];
60         r.read(ch);
61         r.close();
62         Clob c = new SerialClob(ch);
63         qr.update("insert into t2 values(?,?)", 1,c);
64     }
65     /*
66      * create table t3(id int,name varchar(100));
67      */
68     @Test
69     public void testBatch()throws Exception{
70         
71         Object params[][] = new Object[10][];
72         for(int i=0;i<params.length;i++){
73             params[i] = new Object[]{i+1,"aaa"+(i+1)};
74         }
75         qr.batch("insert into t3 values(?,?)", params);
76     }
77 }
DBUtilDemo
 1 import java.io.InputStream;
 2 import java.sql.Connection;
 3 import java.sql.ResultSet;
 4 import java.sql.SQLException;
 5 import java.sql.Statement;
 6 import java.util.Properties;
 7 
 8 import javax.sql.DataSource;
 9 
10 import org.apache.commons.dbcp.BasicDataSourceFactory;
11 
12 public class DBCPUtil {
13     private static DataSource dataSource;
14     static{
15         try {
16             InputStream in = DBCPUtil.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
17             Properties props = new Properties();
18             props.load(in);
19             dataSource = BasicDataSourceFactory.createDataSource(props);
20         } catch (Exception e) {
21             throw new ExceptionInInitializerError("error");
22         }
23     }
24     public static Connection getConnection(){
25         try {
26             return dataSource.getConnection();
27         } catch (SQLException e) {
28             throw new RuntimeException("error");
29         }
30     }
31     public static DataSource getDataSource(){
32         return dataSource;
33     }
34     
35 }
DBCPtil
 1 driverClassName=com.mysql.jdbc.Driver
 2 url=jdbc:mysql://localhost:3306/day17
 3 username=root
 4 password=123456
 5 initialSize=10
 6 maxActive=50
 7 maxIdle=20
 8 minIdle=5
 9 maxWait=60000
10 connectionProperties=useUnicode=true;characterEncoding=utf8
11 defaultAutoCommit=true
12 defaultReadOnly=
13 defaultTransactionIsolation=REPEATABLE_READ
dbcpconfig.properties

三、DBUtils所有的结果处理器(查询返回的结果集)

封装的结果是什么样的:

ArrayHandler:适用于结果集只有一条结果的情况。返回Obejct[],数组中的元素就是记录的每列数据。

ArrayListHandler:适用于结果集中有多条结果的情况。返回的是一个List<Object[]>,List封装了记录,Object[]每条记录的每列数据。

BeanHandler, BeanListHandler,

ColumnListHandler:适用于取某一列的值。返回的是List<Object>,集合中就是该列中的数据。

KeyedHandler:适用于结果中有多条的情况。返回的是一个Map<Object,Map<String,Object>>。

 

MapHandler:适用于结果只有一条的情况。Map<String,Object>,key是字段名,value,字段值。

MapListHandler:适用于结果有多条的情况。List<Map<String,Object>>.List封装了所有的记录,每条记录封装到Map中,key是字段名,value,字段值。

ScalarHandler:适用于结果中只有一行和只有一列的情况。返回的是一个Object。

ThreadLocal类

利用DBUtils进行事物有关操作

利用DBUtils进行多表操作

猜你喜欢

转载自www.cnblogs.com/biaogejiushibiao/p/9327568.html
今日推荐