热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SSM自学笔记(三)

5、SpringJdbcTemplate1.SpringJdbcTemplate基本使用1.1JdbcTemplate概述它是spring框架中提供的一个对象,是对原始繁琐的Jdb

5、Spring JdbcTemplate


1.Spring JdbcTemplate基本使用


1.1 JdbcTemplate概述

它是spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象的简单封装。spring框架为我们提供了很多的操作模板类。例如:操作关系型数据的JdbcTemplate和HibernateTemplate,操作nosql数据库的RedisTemplate,操作消息队列的JmsTemplate等等。


1.2 JdbcTemplate开发步骤


  1. 导入spring-jdbc和spring-tx坐标

  2. 创建数据库表和实体

  3. 创建JdbcTemplate对象

  4. 执行数据库操作


1.3 JdbcTemplate快速入门


  1. 导入坐标



org.springframework
spring-jdbc
5.0.5.RELEASE


org.springframework
spring-tx
5.0.5.RELEASE



  1. 创建accout表和Accout实体


image

public class Account {
private String name;
private double money;
//省略get和set方法
}


  1. 创建JdbcTemplate对象

  2. 执行数据库操作

//1、创建数据源对象
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUser("root");
dataSource.setPassword("root");
//2、创建JdbcTemplate对象
JdbcTemplate jdbcTemplate = new JdbcTemplate();
//3、设置数据源给JdbcTemplate
jdbcTemplate.setDataSource(dataSource);
//4、执行操作
jdbcTemplate.update("insert into account values(?,?)","tom",5000);

1.4 Spring产生JdbcTemplate对象

我们可以将JdbcTemplate的创建权交给Spring,将数据源DataSource的创建权也交给Spring,在Spring容器内部将数据源DataSource注入到JdbcTemplate模版对象中,配置如下:











从容器中获得JdbcTemplate进行添加操作

@Test
public void testSpringJdbcTemplate() throws PropertyVetoException {
ApplicationContext applicatiOnContext= new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplate jdbcTemplate = applicationContext.getBean(JdbcTemplate.class);
jdbcTemplate.update("insert into account values(?,?)","lucy",5000);
}

1.5 JdbcTemplate的常用操作

修改操作

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class JdbcTemplateCRUDTest {
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
//测试修改操作
public void testUpdate(){
jdbcTemplate.update("update account set mOney=? where name=?",1000,"tom");
}
}

删除和查询全部操作

@Test
public void testDelete(){
jdbcTemplate.update("delete from account where name=?","tom");
}
@Test
public void testQueryAll(){
List accounts = jdbcTemplate.query("select * from account", new BeanPropertyRowMapper(Account.class));
for (Account account : accounts) {
System.out.println(account.getName());
}
}

查询单个数据操作操作

@Test
//测试查询单个对象操作
public void testQueryOne(){
Account account = jdbcTemplate.queryForObject("select * from account where name=?", new BeanPropertyRowMapper(Account.class), "tom");
System.out.println(account.getName());
}
@Test
//测试查询单个简单数据操作(聚合查询)
public void testQueryCount(){
Long aLOng= jdbcTemplate.queryForObject("select count(*) from account", Long.class);
System.out.println(aLong);
}

1.6 小结


  1. 导入spring-jdbc和spring-tx坐标

  2. 创建数据库表和实体

  3. 创建JdbcTemplate对象

JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);


  1. 执行数据库操作



    • 更新操作:

    jdbcTemplate.update (sql,params)


    • 查询操作:

    jdbcTemplate.query (sql,Mapper,params)
    jdbcTemplate.queryForObject(sql,Mapper,params)



6、SpringMVC拦截器


1.SpringMVC拦截器


1.1 拦截器(interceptor)的作用

Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理后处理

将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(Interceptor Chain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。


1.2 拦截器与过滤器区别

image
1.3 拦截器是快速入门

自定义拦截器很简单,只有如下三步:



  1. 创建拦截器类实现HandlerInterceptor接口



  2. 配置拦截器



  3. 测试拦截器的拦截效果







  1. 创建拦截器类实现HandlerInterceptor接口

public class MyHandlerInterceptor1 implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse
response, Object handler) {
System.out.println("preHandle running...");
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse
response, Object handler, ModelAndView modelAndView) {
System.out.println("postHandle running...");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse
response, Object handler, Exception ex) {
System.out.println("afterCompletion running...");
}
}


  1. 配置拦截器










  1. 测试拦截器的拦截效果(编写目标方法)

@RequestMapping("/quick23")
@ResponseBody
public ModelAndView quickMethod23() throws IOException, ParseException {
System.out.println("目标方法执行....");
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("name","itcast");
modelAndView.setViewName("index");
return modelAndView;
}


  1. 测试拦截器的拦截效果(访问网址)

http://localhost:8080/itheima_springmvc1/quick23

​ 控制台打印结果

image


1.4 多拦截器操作

同上,在编写一个MyHandlerInterceptor2操作,测试执行顺序(执行顺序与两个拦截器配置顺序有关)

image


1.5 拦截器方法说明

image-20210608204605256
1.6 小结

自定义拦截器步骤



  • 创建拦截器类实现HandlerInterceptor接口



  • 配置拦截器



  • 测试拦截器的拦截效果




2.案例-用户登录权限控制

需求:用户没有登录的情况下,不能对后台菜单进行访问操作,点击菜单跳转到登录页面,只有用户登录成功后才能进行后台功能的操作


image-20210608204802163

7、SpringMVC异常处理机制


1、SpringMVC异常处理


1.1 异常处理的思路

系统中异常包括两类:预期异常运行时异常****RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试等手段减少运行时异常的发生。

系统的DaoServiceController出现都通过throws Exception向上抛出,最后由SpringMVC前端控制器交由异常处理器进行异常处理,如下图:

image


1.2 异常处理两种方式


  • 使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver



  • 实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器




1.3 简单异常处理器SimpleMappingExceptionResolver

SpringMVC已经定义好了该类型转换器,在使用时可以根据项目情况进行相应异常与视图的映射配置


image
1.4 自定义异常处理步骤


  1. 创建异常处理器类实现HandlerExceptionResolver

  2. 配置异常处理器

  3. 编写异常页面

  4. 测试异常跳转





  1. 创建异常处理器类实现HandlerExceptionResolver

public class MyExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
//处理异常的代码实现
//创建ModelAndView对象
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("exceptionPage");
return modelAndView;
}
}


  1. 配置异常处理器

class="com.itheima.exception.MyExceptionResolver"/>


  1. 编写异常页面

<%@ page cOntentType="text/html;charset=UTF-8" language="java" %>





这是一个最终异常的显示页面




  1. 测试异常跳转

@RequestMapping("/quick22")
@ResponseBody
public void quickMethod22() throws IOException, ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
simpleDateFormat.parse("abcde");
}

1.5 小结

异常处理方式



  • 配置简单异常处理器SimpleMappingExceptionResolver

  • 自定义异常处理器

自定义异常处理步骤



  1. 创建异常处理器类实现HandlerExceptionResolver

  2. 配置异常处理器

  3. 编写异常页面

  4. 测试异常跳转



推荐阅读
  • 本文介绍了如何在 Spring Boot 项目中使用 spring-boot-starter-quartz 组件实现定时任务,并将 cron 表达式存储在数据库中,以便动态调整任务执行频率。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • LDAP服务器配置与管理
    本文介绍如何通过安装和配置SSSD服务来统一管理用户账户信息,并实现其他系统的登录调用。通过图形化交互界面配置LDAP服务器,确保用户账户信息的集中管理和安全访问。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 本文详细介绍了数据库并发控制的基本概念、重要性和具体实现方法。并发控制是确保多个事务在同时操作数据库时保持数据一致性的关键机制。文章涵盖了锁机制、多版本并发控制(MVCC)、乐观并发控制和悲观并发控制等内容。 ... [详细]
  • 本文将详细介绍如何注册码云账号、配置SSH公钥、安装必要的开发工具,并逐步讲解如何下载、编译 HarmonyOS 2.0 源码。通过本文,您将能够顺利完成 HarmonyOS 2.0 的环境搭建和源码编译。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • 利用爬虫技术抓取数据,结合Fiddler与Postman在Chrome中的应用优化提交流程
    本文探讨了如何利用爬虫技术抓取目标网站的数据,并结合Fiddler和Postman工具在Chrome浏览器中的应用,优化数据提交流程。通过详细的抓包分析和模拟提交,有效提升了数据抓取的效率和准确性。此外,文章还介绍了如何使用这些工具进行调试和优化,为开发者提供了实用的操作指南。 ... [详细]
  • 在安装并配置了Elasticsearch后,我在尝试通过GET /_nodes请求获取节点信息时遇到了问题,收到了错误消息。为了确保请求的正确性和安全性,我需要进一步排查配置和网络设置,以确保Elasticsearch集群能够正常响应。此外,还需要检查安全设置,如防火墙规则和认证机制,以防止未经授权的访问。 ... [详细]
author-avatar
橙子小狸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有