3.TxQueryRunner
TxQueryRunner类是common-dbutils下QueryRunner类的子类,用来简化JDBC操作。TxQueryRunner类内部使用了JdbcUtils.getConnection()类来获取连接对象,以及使用JdbcUtils.releaseConnection()关闭连接。
public class TxQueryRunner {
/**
* 测试update方法,用来执行insert,update,delete语句
* @throws Exception
*/
@Test
public void testUpdate() throws Exception{
String sql = "insert into t_person(pid,pname,age,sex) values(?,?,?,?)";
Object[] params = {"1","p1",1,"男"};
QueryRunner qr = new cn.itcast.jdbc.TxQueryRunner();//没有给对象提供连接池
qr.update(sql,params);//执行sql也不提供连接,它内部会使用jdbcUtils来获取连接
}
/**
* 使用事务
* @throws Exception
*/
@Test
public void testUpdate2() throws Exception{
try {
JdbcUtils.beginTransaction();//开启事务
//多次操作
String sql = "insert into t_person(pid,pname,age,sex) values(?,?,?,?)";
QueryRunner qr = new cn.itcast.jdbc.TxQueryRunner();
Object[] params = {"2","p2",2,"男"};
qr.update(sql,params);
if (false) {
throw new Exception();
}
params =new Object[] {"3","p3",3,"男"};
qr.update(sql,params);
JdbcUtils.commitTransaction();//提交事务
} catch (SQLException e) {
try {
JdbcUtils.rollbackTransaction();//事务回滚
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
throw e;
}
}
/**
* 测试查询方法
* jdbc查询的结果是ResultSet
* QueryRunner查询的结果是通过ResultSet映射的数据
* (QueryRunner第一步是执行select,得到ResultSet,然后把ResultSet转化为其它类型)
* 通过转换结果:
* javaBean:把结果集疯转到javabean中
* map:把结果集封装到map中
* 把结果集封装到object中(object是单行单列)
* @throws Exception
*/
/*
* javaBean:把结果集疯转到javabean中
*/
@Test
public void testQuery() throws Exception{
String sql = "select * from t_person where pid = ?";
QueryRunner qr = new cn.itcast.jdbc.TxQueryRunner();
Person p = qr.query(sql, new BeanHandler<Person>(Person.class),2);
System.out.println(p);
}
/*
* list
*/
@Test
public void testQuery2() throws Exception{
String sql = "select * from t_person";
QueryRunner qr = new cn.itcast.jdbc.TxQueryRunner();
List<Person> list = qr.query(sql, new BeanListHandler<Person>(Person.class));
System.out.println(list);
}
/*
* map:把结果集封装到map中
*/
@Test
public void testQuery3() throws Exception{
String sql = "select * from t_person where pid = ?";
QueryRunner qr = new cn.itcast.jdbc.TxQueryRunner();
Map<String, Object> map = qr.query(sql, new MapHandler(),2);
System.out.println(map);
}
/*
* MaplistHander
*/
@Test
public void testQuery4() throws Exception{
String sql = "select * from t_person";
QueryRunner qr = new cn.itcast.jdbc.TxQueryRunner();
List<Map<String, Object>> maplist = qr.query(sql, new MapListHandler());
System.out.println(maplist);
}
/*
* ScalarHander,把单行单列的结果集封装到object中
*/
@Test
public void testQuery5() throws Exception{
String sql = "select count(*) from t_person";
QueryRunner qr = new cn.itcast.jdbc.TxQueryRunner();
Object obj = qr.query(sql, new ScalarHandler());
Number number = (Number)obj;//无论哪种类型,一定是number类型
int cnt = number.intValue();
System.out.println(cnt);
}
4.MailUtils
MailUtils是用来发邮件的小工具,底层使用JavaMail完成,所以它这件事mail.jar和activaion.jar。
@Test
public void send() throws MessagingException, IOException{
/**
* 1.登录邮件服务器
* 2.创建邮件对象(发件人,收件人,主题,正文)
* 3.发送(需要session和邮件对象)
*/
Session session = MailUtils.createSession("smtp.i63.com", "itcast_cxf", "itcastitcast");
Mail mail = new Mail("itcast_cxf@163.com", "445482812@qq.com", "测试邮件一封", "<a href='http://www.baidu.com'>百度</a>");
MailUtils.send(session, mail);
}
测试未通过。
5.EncodingFilter
EncodingFilter用来处理请求编码问题。
我们知道,如果是POST请求,我们需要调用request.setCharacterEncoding(“utf-8”)方法来设计编码;如果是GET请求,我们需要自己手动来处理编码问题。如果我们使用了EncodingFilter,那么就处理了POST和GET请求的编码问题。
<filter>
<filter-name>EncdoingFilter</filter-name>
<filter-class>cn.itcast.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncdoingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>