




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
小工具2JdbcUtilsJdbcUtils用来获取Connection对象,以及开启和关闭事务。l Connection getConnection():从c3p0连接池获取Connection对象,所以需要提供c3p0-config.xml配置文件;l beginTransaction():为当前线程开启事务;l commitTransaction():提交当前线程的事务;l rollbackTransaction():回滚当前线程的事务;l releaseConnection(Connection):如果参数连接对象不是当前事务的连接对象,那么关闭它,否则什么都不做;c3p0-config.xml jdbc:mysql:/localhost:3306/mydb1com.mysql.jdbc.Driverroot123310210JdbcUtilsTest.java/* * 测试JdbcUtils类 * author qdmmy6 * */工欲善其事,必先利其器。下面我们来介绍一下在项目中要使用的小工具(itcast-tools-1.4.jar)。这个小工具底层使用了:l c3p0数据库连接池;l common-beanutils;l common-dbutils;l javaMail;1CommonUtilsCommonUtils类就两个方法:l String uuid():生成长度32的随机字符,通常用来做实体类的ID。底层使用了UUID类完成;l T toBean(Map, Class):把Map转换成指定类型的Bean对象。通常用来获取表单数据(request.getParameterMap())封装到JavaBean中,底层使用了common-beanutils。注意,本方法要求map中键的名称要与Bean的属性名称相同才能完成映射,否则不能完成映射。/* * 随机生成32位长的字符串,通常用来做实体类的ID */Testpublic void testUuid() String s = CommonUtils.uuid();/生成随机32位长的字符串System.out.println(s);/* * 把Map类型映射成Bean类型。 * 要求map中键的名称与Person类的属性名称相同。 * 即map的key分别为:pid、name、age、birthday,person的属性名称也是pid、name、age、birthday */Testpublic void testToBean() Map map = new HashMap();/* * map的key:pid、age、birthday、myname * person的属性:pid、age、birthday、name * map中没有名为name的键值,而多出一个名为myname的键值,所以映射后的person对象Person p = CommonUtils.toBean(map, Person.class);System.out.println(p);public class JdbcUtilsTest /* * 通过C3P0连接池获取连接对象 * throws SQLException */Testpublic void testGetConnection() throws SQLException Connection con = JdbcUtils.getConnection();/获取连接System.out.println(con);JdbcUtils.releaseConnection(con);/如果参数con不是当前线程的连接对象,那么关闭之/* * 当开始事务后,调用getConnection()会为当前线程创建Connection,而且多次调用getConnection()返回的是同一个对象 * throws SQLException */Testpublic void testTansaction() throws SQLException JdbcUtils.beginTransaction();/开启事务Connection c1 = JdbcUtils.getConnection();/第一次获取当前线程的事务连接对象Connection c2 = JdbcUtils.getConnection();/第二次获取当前线程的事务连接对象Assert.assertEquals(true, c1 = c2);/比较两次是否相同JdbcUmitTransaction();/提交事务3TxQueryRunnerTxQueryRunner类是common-dbutils下QueryRunner类的子类,用来简化JDBC操作。TxQueryRunner类内部使用了JdbcUtils.getConnection()类来获取连接对象,以及使用JdbcUtils.releaseConnection()关闭连接的name属性值为null。 * map中的age和birthday都是字符串类型,而person的age是int类型、birthday是Date类型,但toBean()方法会自动对Map中值进行类型转换。 */map.put(pid, CommonUtils.uuid();map.put(age, 23);map.put(birthday, 2014-01-30);map.put(myname, 张三);。l int batch(String sql, Object params):执行批处理,参数sql是SQL语句模板,params为参数;l T query(String sql, ResultSetHandler rh):执行查询,执行查询,参数sql为要执行的查询语句模板,rh是结果集处理,用来把结果集映射成你想要的结果;l T query(String sql, ResultSetHandler rh, Object params):执行查询,参数sql为要执行的查询语句模板,rh是结果集处理,用来把结果集映射成你想要的结果,params是sql语句的参数;l int update(String sql):执行增、删、改语句,参数sql是要执行的SQL语句;l int update(Stringsql, Object param)l 字段说明pid主键name姓名age年龄birthday生日Person.javapublic class Person private String pid;private String name;private int age;private Date birthday;PersonDao.java/* * 测试TxQueryRunner * author qdmmy6 * */public class PersonDao private QueryRunner qr = new TxQueryRunner();public void add(Person person) throws SQLException String sql = insert into t_person values(?,?,?,?);Object params = person.getPid(), person.getName(), person.getAge(), new java.sql.Date(person.getBirthday().getTime();qr.update(sql, params);public void edit(Person person) throws SQLException String sql = update t_person set name=?,age=?,birthday=? where pid=?;Object params = person.getName(), person.getAge(), new java.sql.Date(person.getBirthday().getTime(),person.getPid();qr.update(sql, params);public void delete(String pid) throws SQLException String sql = delete from t_person where pid=?;qr.update(sql, pid);public Person load(String pid) throws SQLException String sql = select * from t_person where pid=?;return qr.query(sql, new BeanHandler(Person.class), pid);public List findAll() throws SQLException String sql = select * from t_person;return qr.query(sql, new BeanListHandler(Person.class);l :执行增、删、改语句,参数sql是要执行的SQL语句,参数param是参数(一个参数);l int update(String sql, Object params):执行增、删、改语句,参数sql是要执行的SQL语句,参数params是参数(多个参数);为了测试TxQueryRunner,我们在mydb1数据库下创建t_person表,然后再创建Person实体类,以及PersonDao类,最后测试PersonDao类中的方法。t_personPersonDaoTest.javapublic class PersonDaoTest Testpublic void testAdd() throws SQLException Person p1 = new Person(CommonUtils.uuid(), 张三, 18, new Date();Person p2 = new Person(CommonUtils.uuid(), 李四, 81, new Date();Person p3 = new Person(CommonUtils.uuid(), 王五, 66, new Date();PersonDao dao = new PersonDao();dao.add(p1);dao.add(p2);dao.add(p3);Testpublic void testEdit() throws SQLException PersonDao dao = new PersonDao();Person person = dao.load(2F371BE415984DE89781CCCA7B8734CB);person.setAge(88);dao.edit(person);Testpublic void testDelete() throws SQLException PersonDao dao = new PersonDao();dao.delete(2F371BE415984DE89781CCCA7B8734CB);Testpublic void testFindAll() throws SQLException PersonDao dao = new PersonDao();List list = dao.findAll();System.out.println(list);标页面。例如:l f:/index.jsp:其中f:表示转发,即forward的意思,/index.jsp表示转发到/index.jsp页面;l r:/index.jsp:其中r:表示重定向,即redirect的意思,/index.jsp表示重定向到/index.jsp页面。l null:表示不转发也不重定向;因为BaseServlet中可以有多个请求处理方法,所以在访问BaseServlet时一定要给出名为method的参数来指定要请求的方法名称。AServlet.javapublic class AServlet extends BaseServlet /* * 请求处理方法的参数都与doGet()和doPost()相同,即request和response * 但请求处理4MailUtilsMailUtils是用来发邮件的小工具,底层使用JavaMail完成,所以它这件事mail.jar和activaion.jar。MailUtilsTest.java/* * 测试发送普通邮件 * throws IOException * throws MessagingException */Testpublic void fun() throws MessagingException, IOException Session session = MailUtils.createSession(, itcast_cxf, itcastitcast);创建sessionMail mail = new Mail(itcast_, itcast_, 测试MailUtils, 这是正文!);创建邮箱对象,参数分别为:发件人、收件人、主题、正文MailUtils.send(session, mail);发送邮件5BaseServletBaseServlet是用来作为其它Servlet父类的,它有如下两个优点:一个Servlet多个处理方法BaseServlet的作用是用来简化Servlet。通过我们需要为每个功能编写一个Servlet,例如用户注册写一个RegistServlet,用户登录写一个LoginServlet。如果使用BaseServlet,那么我们可以只写一个UserServlet,然后让UserServlet去继承BaseServlet,然后在UserServlet给出两个请求处理方法,一个方法叫regist(),一个叫login()。BaseServlet来简化了Servlet中请求转发和重定向的代码。简化了请求转发和重定向的代码BaseServlet中的请求处理方法有一个String类型的返回值,返回值表示转发或重定向的目方法有String类型的返回值,而doGet()和doPost()没有返回值。 * 在请求本方法时需要给出method=regist参数! */public String regist访问本方法的URL为http:/localhost:8080/day01/AServlet?method=regist(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException System.out.println(AServlet regist().);return f:/index.jsp;转发到/index.jsp页面/* * 在请求本方法时需要给出method=login参数! */public String login访问本方法的URL为http:/localhost:8080/day01/AServlet?method=login(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException System.out.println(AServlet login().);return r:/index.jsp重定向到/index.jsp;6 EncodingServlet/* * 测试EncodingFilter * author qdmmy6 * */public class EncodingServlet 因为添加了EncodingFilter过滤器,那么所有的Servlet都不用再去处理请求编码的问题了。extends BaseServlet /* * 可以使用POST和GET两种方式请求test()方法!查看输出是否为乱码! */public String test(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException String name = request.getParameter(name);System.out.println(name);return null;7VerifyCodeServlet(一次性验证码)通过在表单中总是需要使用一次性验证码,这一问题可以使用VerifyCodeServlet来处理。让元素的src指向VerifyCodeServlet即可在页面中生成一次性验证码。而且VerifyCodeServlet还会把验证码保存到session中,名称为:vCode,也就是说,你可以通过session来获取验证码文本:session.getAttribute(“vCode”)。web.xml VerifyCodeServlet cn.itcast.vcode.servlet.VerifyCodeServlet VerifyCodeServlet /VerifyCodeServletMyJsp.jspform action= EncodingFilterEncodingFilter用来处理请求编码问题。我们知道,如果是POST请求,我们需要调用request.setCharacterEncoding(“utf-8”)方法来设计编码;如果是GET请求,我们需要自己手动来处理编码问题。如果我们使用了EncodingFilter,那么就处理了POST和GET请求的编码问题。web.xmlEncdoingFiltercn.itcast.fil
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能制造背景下收缩膜连续化生产中的微孔缺陷实时监测技术
- 时区错位导致的全球服务链路时延敏感度量化评估方法
- 新能源汽车热泵系统前散热器罩防结霜表面处理技术迭代路径
- 无锡工艺考试题型及答案
- 新型环保涂层在盐雾腐蚀环境下的长效防护效能与经济性评估
- 新型复合材料在高压差工况下板框变形的动态响应模型构建
- 整烫机械模块化设计对快速换线柔性化生产的支撑作用
- 一 积贫积弱的北宋教学设计-2025-2026学年高中历史人民版选修历史上重大改革回眸-人民版2004
- 数字孪生技术在虚拟办公场景的映射精度衰减问题
- 2025年酒泉地理答题题库及答案
- 工程伦理 课件全套 李正风 第1-9章 工程与伦理、如何理解伦理- 全球化视野下的工程伦理
- 新能源材料与器件导论绪论
- 和大人一起读
- 2023届高考统编版历史三轮冲刺复习:中国赋税制度的演变-选择题刷题练习题(含答案解析)
- 婴幼儿发展高职全套教学课件
- 重污染天气应急减排措施“一厂一策”实施方案
- 【课件】二十四节气和日晷(人教版2019选择性必修1)
- 2023年广东外语外贸大学考研英语练习题100道(附答案解析)
- 医古文课件 2华佗传
- 大数据与会计专业人才需求与专业调研报告
- 高中日语宣讲 试听课件
评论
0/150
提交评论