1.DBUtils
官方文档 https://commons.apache.org/proper/commons-dbutils/examples.html
1)依赖
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
2)创建表
create table persons(
id int primary key auto_increment,
name varchar(10),
age int
)engine=InnoDB default charset=utf8
3)导入jar
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
4)DBUtils的基本用法
public class DBUtilsTest {
public static void main(String[] args) throws ClassNotFoundException, IOException, SQLException {
Connection connection = PrepareStatementTest.getConnection("config.properties");
connection.setAutoCommit(false);
//其中可以放入数据源去定义,那么会相应的少去con的设置和管理
QueryRunner queryRunner = new QueryRunner();
// 增加
// String sql="insert into persons(name,age) values(?,?)";
// int execute = queryRunner.execute(connection, sql, "丽丽","23");
// 删除
// String sql ="delete from persons where id=?";
// int execute = queryRunner.execute(connection, sql, 2);
// 修改
// String sql ="update persons set name=? ,age=? where id=?";
// int execute = queryRunner.execute(connection, sql, "苗苗",10,1);
// queryRunner.update(conn, sql, params)
// System.out.println(execute);
// 添加
// String sql="insert into persons(name,age) values(?,?)";
// 返回值是 ResultSetHandler<T>的值
// queryRunner.insert(connection, sql, new ResultSetHandler<String>() {
// @Override
// public String handle(ResultSet rs) throws SQLException {
// System.out.println("插入数据");//输出插入数据
// return null;
// }
// },"丽丽",22);
String sql = "select * from persons where id>=1";
// 把返回值装入person对象 或者返回第一条装入对象
// Person query = queryRunner.query(connection,sql,new
// BeanHandler<>(Person.class));
// 查询的所有对象放入集合
//返回值是 ResultSetHandler<T>的值
List<Person> query = queryRunner.query(connection, sql, new BeanListHandler<>(Person.class));
System.out.println(query);
connection.commit();
DbUtils.rollbackAndClose(connection);
/* ResultSetHandler<T>的子类,
* ArrayHandler :将ResultSet中第一行的数据转化成对象数组
* ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[]
* BeanHandler :将ResultSet中第一行的数据转化成类对象
* BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类对象
* ColumnListHandler :将ResultSet中某一列的数据存成List,List中存放的是Object对象
* KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map。Map中存放的是数据
* MapHandler :将ResultSet中第一行的数据存成Map映射
* MapListHandler :将ResultSet中所有的数据存成List。List中存放的是Map
* ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object
*/
}
}
2.BeanUtils
官方文档:https://commons.apache.org/proper/commons-beanutils/
1)依赖
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
2)基本使用
package cn.test;
import org.apache.commons.beanutils.BeanUtils;
import org.junit.Before;
import org.junit.Test;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
public class BeanUtilsTest {
private Person person=null;
@Before
public void init(){
this.person = new Person("张三", "23");
}
//setProperty
@Test//给指定对象bean的指定name属性赋值为指定值value,不能存在什么也不发生
public void testSetProperty() throws InvocationTargetException, IllegalAccessException {
BeanUtils.setProperty(person, "name", "李四");//不支持内部类的反射
System.out.println(person);
}
//getProperty
@Test//获取指定对象bean指定name属性的值,不存在就报错
public void testGetProperty() throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {
String name = BeanUtils.getProperty(person, "name");//不支持内部类的反射
System.out.println(name);
}
//copyProperties
@Test//将对象orig的属性值赋值给对象dest对象对应的属性
public void testCopyProperties() throws InvocationTargetException, IllegalAccessException {
Person p = new Person();
BeanUtils.copyProperties(p , person);
System.out.println(person);
System.out.println(p);
}
//populate
@Test//将一个Map集合中的数据封装到指定对象bean中
public void testPopulate() throws InvocationTargetException, IllegalAccessException {
Person p = new Person();
HashMap<String, String> map = new HashMap<>();
map.put("name", "张三");
map.put("adress", "qwe");
BeanUtils.populate(p, map);
System.out.println(p);
}
public class Person {
private String name;
private String age;
..........
3)添加类型转换器
public static<T> T populate( T t, Map map) throws InvocationTargetException, IllegalAccessException {
DateConverter dateConverter = new DateConverter();//创建日期格式转换器对象
dateConverter.setPattern("yyyy-MM-dd");//设置格式
ConvertUtils.register(dateConverter, Date.class);//注册
BeanUtils.populate(t,map);
return t;
}
具有的转换器还有如下