Skip to content

Commit fe20ae6

Browse files
author
chao
committed
工具类总结
1 parent 203866d commit fe20ae6

File tree

3 files changed

+150
-0
lines changed

3 files changed

+150
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,6 @@
2525
- [15. Ajax与JSON核心知识点汇总](md/Ajax与JSON核心知识点汇总.md)
2626
- [16. 过滤器监听器核心知识点汇总](md/过滤器监听器核心知识点汇总.md)
2727
- [17. 动态代理与类加载器核心知识点汇总](md/动态代理与类加载器核心知识点汇总.md)
28+
- [18. DBUtils与BeanUtils以及Gson工具类](md/DBUtils与BeanUtils以及Gson工具类.md)
2829

2930

SUMMARY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
* [Ajax与JSON核心知识点汇总](md/Ajax与JSON核心知识点汇总.md)
1919
* [过滤器监听器核心知识点汇总](md/过滤器监听器核心知识点汇总.md)
2020
* [动态代理与类加载器核心知识点汇总](md/动态代理与类加载器核心知识点汇总.md)
21+
* [DBUtils与BeanUtils以及Gson工具类](md/DBUtils与BeanUtils以及Gson工具类.md)
2122

2223

2324

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
## DBUtils
2+
3+
### 核心功能介绍
4+
5+
* QueryRunner中提供对SQL语句操作的API
6+
* ResultSetHandler接口,用于定义select操作后,怎样封装结果集
7+
* DBUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
8+
9+
### jar包
10+
11+
* 核心包:commons-dbutils-1.4.jar
12+
* 依赖jar包:mysql-connector-java-5.0.8-bin.jar
13+
14+
### QueryRunner核心类
15+
16+
* 配置方案一:直接传入数据源,连接对象connection不由用户创建,由DBUtils底层自动维护连接connection对象
17+
* QueryRunner(DataSource ds),提供数据源(连接池),
18+
* update(String sql,Object... params),执行更新数据(增删改)
19+
* query(String sql ,ResultSetHandler\<T> rsh,Object... params),执行查询(查)
20+
21+
* 配置方案二:在执行更新或查询时由用户手动指定connection连接对象
22+
23+
* QueryRunner(),因为由用户手动指定连接对象,因此此处不需要提供数据源
24+
* update(Connection connection,String sql,Object... params),手动指定连接对象,更新数据(增删改)
25+
* query(Connection connection,String sql,ResultSetHandler\<T> rsh,Object... params),手动指定连接对象,执行查询(查)
26+
27+
**注意:当采用配置方案一的时候,由于connection对象由DBUtils全程维护,因此不需要用户自己手动关闭连接资源,DBUtils底层就内置了关流操作,但是当采用配置方案二时,因为connection连接对象由用户自己定义,因此关流操作交给用户自己决定,DBUtils不提供自动关流操作**
28+
29+
### ResultSetHandler结果集处理类
30+
31+
| 实现类 | 说明 |
32+
| ------------------- | ---------------------------------------- |
33+
| ArrayHandler | 将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值 |
34+
| ArrayListHandler | 将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组再封装到List集合中 |
35+
| **BeanHandler** | 将结果集中第一条记录封装到一个指定的JavaBean中 |
36+
| **BeanListHandler** | 将结果集中每一条记录封装到指定的JavaBean中,将这些JavaBean再封装到List集合中 |
37+
| ColumnListHandler | 将结果集中指定的列的字段值,封装到一个List集合中 |
38+
| KeyedHandler | 将结果集中每一条记录封装到Map\<String,Object>,再将这个map集合作为另一个Map的value,另一个Map的集合的key是指定的字段的值 |
39+
| MapHandler | 将结果集中第一条记录封装到了Map\<String,Object>集合中,key就是字段名称,value就是字段值 |
40+
| **ScalarHandler** | 它用于单数据。例如select count(*) from 表操作 |
41+
42+
###其他常用方法
43+
44+
> 当用户传递的是自定义connection对象的时候,需要进行手动关流,DBUtils中也提供了几种关流的方法,具体如下
45+
46+
* `closeQuietly(Connection conn)` 关闭连接,如果有异常try后不抛
47+
* `commitAndCloseQuietly(Connection conn)` 提交并关闭连接
48+
* `rollbackAndCloseQuietly(Connection conn)` 回滚并关闭连接
49+
50+
### 示例代码
51+
52+
```java
53+
public class StudentDao {
54+
public Student getStudent(String sname,String gender) throws SQLException {
55+
//当在QueryRunner中引入数据源后不需要手动关流
56+
QueryRunner queryRunner = new QueryRunner(new ComboPooledDataSource());
57+
String sql = "SELECT * FROM day13.stu WHERE sname=? AND gender=?";
58+
Student student = queryRunner.query(sql,new BeanHandler<Student>(Student.class),"ww","");
59+
return student;
60+
}
61+
62+
public void save(Student student) throws SQLException {
63+
QueryRunner queryRunner = new QueryRunner();
64+
String sql = "INSERT INTO day13.stu VALUES(NULL,?,?)";
65+
Connection connection = new ComboPooledDataSource().getConnection();
66+
//返回值,当添加一列成功返回1,添加失败返回0
67+
int update = queryRunner.update(connection, sql, "zs", "");
68+
DbUtils.close(connection);
69+
}
70+
}
71+
```
72+
73+
## BeanUtils
74+
75+
### 核心功能介绍
76+
77+
* 主要用来将前端表单提交的数据封装到对应的JavaBean中。
78+
79+
### jar包依赖
80+
81+
* commons-beanutils-1.8.3.jar
82+
* commons-logging-1.1.1.jar
83+
84+
### 常用方法
85+
86+
* `BeanUtils.populate(Object bean,Map<String,String[]> properties)`
87+
* 将Map数据封装到指定JavaBean中,一般用于将表单的所有数据封装到JavaBean中
88+
* 经常先通过`request.getParameterMap`获取map集合,再利用此方法将map中的数据对应着存储到提供好的bean对象中
89+
* 注意:若Map中的key在Object中找不到对应的,会造成数据存储丢失,若Object中存在的属性在Map中没有对应那么此属性值为null
90+
* `ConverUtils.register(Converter converter,Class clazz)`
91+
* 注册类型转换器
92+
* 经常利用它来处理BeanUtils不能自动转换的情况,如一个对象中的birthday属性若为java.util.Date类型,那么前端对应日期数据过来后在默认情况下是无法自动转换的,需要借助ConverUtils进行手动转换
93+
94+
### 示例代码
95+
96+
```java
97+
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
98+
Map<String, String[]> properties = request.getParameterMap();
99+
User user = new User();
100+
//创建BeanUtils提供的时间转换器
101+
DateConverter dateConverter = new DateConverter();
102+
//设置需要转换的格式
103+
dateConverter.setPattern("yyyy-MM-dd");
104+
//注册转换器
105+
ConvertUtils.register(dateConverter,java.util.Date.class);
106+
//封装数据
107+
BeanUtils.populate(user,properties);
108+
}
109+
```
110+
111+
## Gson
112+
113+
### 核心功能介绍
114+
115+
* 提供对象或者集合与对应的JSON格式的字符串的相互转换
116+
117+
### jar包
118+
119+
* gson-2.5.jar
120+
121+
**注意:为什么此处不说json-lib的jar包而说Gson包呢?因为若是将含有java.util.Date类型的JavaBean转换为对应的JSON字符串的话会报异常,当然,json-lib有对应的解决方式,但是解决方式比较复杂,实用性不强,因此这里介绍了简单易用的Gson**
122+
123+
### 示例代码
124+
125+
```java
126+
@Test
127+
public void testGson_Object2String(){
128+
//gson由对象转json字符串
129+
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
130+
String json = gson.toJson(user);
131+
System.out.println(json);
132+
//gson由json字符串转对象
133+
User user2 = gson.fromJson(json, User.class);
134+
System.out.println(user2);
135+
}
136+
//gson 对json数组的处理
137+
@Test
138+
public void testGson_JsonArray(){
139+
List<User> users = new ArrayList<>();
140+
users.add(user);
141+
Gson gson = new Gson();
142+
String json = gson.toJson(users);
143+
System.out.println(json);
144+
List list = gson.fromJson(json,List.class);
145+
System.out.println(list);
146+
}
147+
```
148+

0 commit comments

Comments
 (0)