Java--JavaWeb使用commons-dbutils简化数据库操作
2016-09-06 10:38
274 查看
具体实现步骤:
1,使用C3P0连接池--这里使用在src根目录下创建名为c3p0-config.xml的文件。
另外,还用到了JavaBean对象Stu
使用这种方式:
(1)将增删改操作简化了,即同时使用一个模板即可,只需修改sql语句和参数即可;
(2)查询结果直接可以通过ResultSetHandler的实现类封装成JavaBean对象。
解析common-dbutils.jar:
QueryRunner对象
方法:
update方法:
--》int update(String sql,Object... params):可执行增删改语句
Query方法(泛型):
--》T Query(String sql,ResultSetHandler rsh,Object...params):可执行查询
他会先得到ResultSet,然后调用rsh的handle()把rs转换成需要的类型!
ResultSetHandler接口的实现类:
(1)BeanHandler(单行)--》构造器需要一个Class类型的参数,用来把一行结果转换成指定类型的JavaBean对象;
(2)BeanListHandler(多行)--》构造器也是需要一个Class类型的参数,用来把一行结果集转换成一个javaBean,那么多行就是多个JavaBean对象,组合成一个List对象。
(3)MapHandler(单行)把一行结果及转换成Map对象
例如:一行记录为
sid sname age gender
001 zhangsan 20 male
那么转换成Map就是:
{sid:001,sname:zhangan,age:20,gender:male}
(4)MapListHandler(多行)--》把一行记录用一个Map装起来,那么多航记录就是多个Map,即List<Map>
(5)ScalarHandler(单行单列)--》通常用于select count(*)from tb_stu语句。结果集是单行单列的,返回一个object。
1,使用C3P0连接池--这里使用在src根目录下创建名为c3p0-config.xml的文件。
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <!-- 这是默认配置信息 --> <default-config> <!-- 连接四大参数配置 --> <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb1</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="user">root</property> <property name="password">123</property> <!-- 池参数配置 --> <property name="acquireIncrement">3</property> <property name="initialPoolSize">10</property> <property name="minPoolSize">2</property> <property name="maxPoolSize">10</property> </default-config> <!-- 专门为oracle提供的配置信息 --> <named-config name="oracle-config"> <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb1</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="user">root</property> <property name="password">123</property> <property name="acquireIncrement">3</property> <property name="initialPoolSize">10</property> <property name="minPoolSize">2</property> <property name="maxPoolSize">10</property> </named-config> </c3p0-config>2.新建一个JDBCUtils类,为其他类提供数据库连接对象或者数据库连接池(在QueryRunner中会用到数据库连接池)
package com.c3p0.jdbc; import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; /** * 注意必须使用c3p0-config.xml的配置方式。将c3p0-config.xml文件放在src根目录下。 * 默认配置。 * * */ public class JDBCUtils { private static ComboPooledDataSource ds=new ComboPooledDataSource(); /** * 使用连接池返回一个连接对象 * */ public static Connection getConnection() throws SQLException{ return ds.getConnection(); } /** * 返回一个连接池对象。 * * */ public static DataSource getDataSource(){ return ds; } }3.编写操作数据库的类
package com.c3p0.demo1; import java.sql.SQLException; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.junit.Test; import com.c3p0.jdbc.JDBCUtils; public class Demo2 { /** * 查询记录 * @throws SQLException * * */ @Test public void fun1() throws SQLException{ //创建QueryRunner,需要提供数据库连接池; QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource()); //给出sql模板 String sql="select * from tb_stu where number=?"; //给出参数 Object[] params={"stu_001"}; //执行Query,需要给出结果集处理器,即ResultHandler的实现类对象 //我们给的是BeanHandler,他实现了ResultSetHandler //它需要一个类型,然后他会把rs中的数据封装到指定类型的javabean对象中,然后返回javabean. Stu stu=qr.query(sql, new BeanHandler<Stu>(Stu.class),params); System.out.println(stu); } /** * 插入新的一条记录 * @throws SQLException * * */ @Test public void fun2() throws SQLException{ QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource()); String sql="insert into tb_stu values(?,?,?,?,?)"; Object[] params={"stu_003","wangwu",20,"female","dancing"}; int count=qr.update(sql, params); System.out.println("count:"+count); } }
另外,还用到了JavaBean对象Stu
package com.c3p0.demo1; public class Stu { private String number; private String name; private int age; private String gender; private String hobby; public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getHobby() { return hobby; } public void setHobby(String hobby) { this.hobby = hobby; } public Stu(String number, String name, int age, String gender, String hobby) { this.number = number; this.name = name; this.age = age; this.gender = gender; this.hobby = hobby; } public Stu() { super(); // TODO Auto-generated constructor stub } @Override public String toString() { return "Stu [number=" + number + ", name=" + name + ", age=" + age + ", gender=" + gender + ", hobby=" + hobby + "]"; } }
使用这种方式:
(1)将增删改操作简化了,即同时使用一个模板即可,只需修改sql语句和参数即可;
(2)查询结果直接可以通过ResultSetHandler的实现类封装成JavaBean对象。
解析common-dbutils.jar:
QueryRunner对象
方法:
update方法:
--》int update(String sql,Object... params):可执行增删改语句
Query方法(泛型):
--》T Query(String sql,ResultSetHandler rsh,Object...params):可执行查询
他会先得到ResultSet,然后调用rsh的handle()把rs转换成需要的类型!
ResultSetHandler接口的实现类:
(1)BeanHandler(单行)--》构造器需要一个Class类型的参数,用来把一行结果转换成指定类型的JavaBean对象;
(2)BeanListHandler(多行)--》构造器也是需要一个Class类型的参数,用来把一行结果集转换成一个javaBean,那么多行就是多个JavaBean对象,组合成一个List对象。
(3)MapHandler(单行)把一行结果及转换成Map对象
例如:一行记录为
sid sname age gender
001 zhangsan 20 male
那么转换成Map就是:
{sid:001,sname:zhangan,age:20,gender:male}
(4)MapListHandler(多行)--》把一行记录用一个Map装起来,那么多航记录就是多个Map,即List<Map>
(5)ScalarHandler(单行单列)--》通常用于select count(*)from tb_stu语句。结果集是单行单列的,返回一个object。
package com.c3p0.demo1; import java.sql.SQLException; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.MapHandler; import org.apache.commons.dbutils.handlers.MapListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import org.junit.Test; import com.c3p0.jdbc.JDBCUtils; public class Demo2 { /** * 查询记录 * @throws SQLException * 单行结果集处理器: * (1)BeanHandler单行结果集处理器。 * (2)MapHandler单行结果集处理器 * */ @Test public void fun1() throws SQLException{ //创建QueryRunner,需要提供数据库连接池; QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource()); //给出sql模板 String sql="select * from tb_stu where number=?"; //给出参数 Object[] params={"stu_001"}; //执行Query,需要给出结果集处理器,即ResultHandler的实现类对象 //我们给的是BeanHandler,他实现了ResultSetHandler //它需要一个类型,然后他会把rs中的数据封装到指定类型的javabean对象中,然后返回javabean. Stu stu=qr.query(sql, new BeanHandler<Stu>(Stu.class),params);//(1)使用BeanHandler单行结果集处理器。 Map map=qr.query(sql, new MapHandler(),params);//(2)使用MapHandler单行结果集处理器 System.out.println(map); } /** * 查询记录 * 结果集多行处理器: * BeanListHandler多行结果集处理器 * MapListHandler多行结果集处理器 * 没有参数就不用定义Object[] params={}。 * */ @Test public void fun1_1() throws SQLException{ //创建QueryRunner,需要提供数据库连接池; QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource()); //给出sql模板 String sql="select * from tb_stu"; //给出参数 //Object[] params={}; /*使用BeanListHandler*/ List<Stu> list1=qr.query(sql, new BeanListHandler<Stu>(Stu.class)); Iterator<Stu> it=list1.iterator(); while(it.hasNext()){ Stu s=it.next(); System.out.println(s.toString()); } System.out.println("-----------------------------------"); /*使用MapListHandler*/ List<Map<String, Object>> list2=qr.query(sql, new MapListHandler()); Iterator<Map<String, Object>> it1=list2.iterator(); while(it1.hasNext()){ Map<String,Object> map=it1.next(); System.out.println(map); } } /** * 查询记录 * 单行单列结果 * ScalarHandle * @throws SQLException * */ @Test public void fun3() throws SQLException{ QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource()); String sql="select count(*) from tb_stu"; Object obj=qr.query(sql, new ScalarHandler()); System.out.println(obj.toString()); } /** * 插入新的一条记录 * @throws SQLException * * */ @Test public void fun2() throws SQLException{ QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource()); String sql="insert into tb_stu values(?,?,?,?,?)"; Object[] params={"stu_003","wangwu",20,"female","dancing"}; int count=qr.update(sql, params); System.out.println("count:"+count); } }
相关文章推荐
- 使用commons-dbutils简化JDBC操作(二) dbutils+反射
- 使用commons-dbutils简化JDBC操作(一)
- 【Java进阶】内省IntroSpector操作JavaBean和Apache-commons-dbutils对内省的使用
- JAVA 使用哈希表操作数据库的例子 Using Hashtables to Store & Extract results from a Database.
- (转)利用Jakarta Commons组件beanutils、dbutils简化JDBC数据库操作
- 简单的三层框架以及使用dbutils进行数据库操作(入门)
- 利用Java存储过程简化数据库操作
- 使用Rman的Plus archvielog选项简化数据库备份操作
- 利用Java存储过程简化数据库操作
- JAVA本地程序使用FileSystemXmlApplicationContext读取application-datasorce.xml进行数据库操作
- 利用Java存储过程简化数据库操作
- 使用java对操作数据库的封装例子
- java 数据库操作使用批处理
- 利用Jakarta Commons组件beanutils、dbutils简化JDBC数据库操作
- 利用Jakarta Commons组件beanutils、dbutils简化JDBC数据库操作
- 利用Java存储过程简化数据库操作
- 简单的三层框架以及使用dbutils进行数据库操作(入门)
- Jakarta Commons组件BeanUtils、DbUtils简化JDBC数据库操作
- 利用Java存储过程简化数据库操作
- 数据库工具包的使用(commons-dbutils-1.2.jar)