Java开发框架之Spring JDBC

1.Spring JDBC 简介
那么什么是 Spring JDBC 呢?Spring JDBC 是 Spring 框架的基础模块之一,是 Spring 框架提供的一组 API,用于简化对 JDBC 的编程,只需要声明 SQL 语句、调用合适的 Spring JDBC框架 API、处理结果集即可,其余java培训的事情都交给 Spring JDBC 去完成。下图展示了 Spring JDBC在 Spring 框架中地位。
Java开发框架之Spring JDBC
文章图片

Spring JDBC 通常是在三层架构下和 MVC 模式下使用,那么它在三层架构和 MVC 模式中又是处于什么地位呢?来看下面的这幅图,它描述了 Spring JDBC 在三层架构下和 MVC 模式中的地位。
Java开发框架之Spring JDBC
文章图片

Spring JDBC 提供了三种方式来简化 JDBC 编程,分别是 JDBC 模板方式、关系数据库对象 化方式、SimpleJdbc 方式。本章讲解 JDBC 模板方式。模板方式的核心 JdbcTemplate 类,它 替我们完成了资源的创建以及释放,从而简化了我们对 JDBC 的使用。它还可以帮助我们避 免一些常见的错误,例如忘记关闭数据库连接。JdbcTemplate 将完成 JDBC 核心处理流程, 比如 Connection 对象的创建、PreparedStatement 对象的创建、SQL 语句的执行、事务的开 始和提交、释放资源、调用存储过程等。而把 SQL 语句拼写以及查询结果的提取工作留给我 们的应用代码。
2.Spring JDBC 模块
Java开发框架之Spring JDBC
文章图片

? core
即核心包,它包含了 JDBC 的核心功能。此包内有很多重要的类,包括:JdbcTemplate, SimpleJdbcInsert 类,SimpleJdbcCall 类以及 NamedParameterJdbcTemplate 类。
? datasource
即数据源包,该包中包含了访问数据源的实用工具类,它有多种数据源的实现。
? object
即对象包,以面向对象的方式访问数据库。它允许执行查询并返回业务对象。它可以在 数据表的列和业务对象的属性之间映射查询结果。
? support
即支持包,是 core 和 object 包的支持类,例如提供了异常转换功能的 SQLException 类。
3.JdbcTemplate 类
JdbcTemplate 类是 Spring JDBC 的核心类,该类提供了一组操作 SQL 语句的 API。使用该 类时需要为其设置数据源,数据源中需要设置驱动程序、连接字符串、用户名、密码、数据 库名称等重要的信息,如下图所示。
Java开发框架之Spring JDBC
文章图片

4.Spring 优化配置
? annotation-config
在spring中,bean的依赖注入有两种方式,第一种使用xml配置,第二种使用annotation配置。在前面的课程中已经学习了xml配置方式,本章讲解annotation配置方式。Spring开发团队建议使用annotation配置方式
使用annotation方式实现需要2步。
1:启用annotation配置
在spring配置文件中,启用annotation配置

……

该配置隐式注册了对annotation进行解析处理的处理器类。
2:在类的属性上标注@Resource
public class DeptService {
@Resource(name="deptDao") private DeptDao deptDao =null; //省略部分代码

}DeptService类的属性deptDao上标注了@Resource(name=“deptDao”),表示告诉Spring容器,将Spring容器中bean名称为deptDao的bean对象注入给DeptService类的属性deptDao。
@Resource(name=“deptDao”)private DeptDao deptDao =null;
相当于
因此,使用了annotation配置后,就无需xml配置了。
@Resource注解是位于javax.annotation包中,是web容器提供的注解。
Spring容器也提供了属性注入注解,包括@Autowired、@Qualifier。
? @Resource
@Resource注解可以标注在属性和方法上。默认按照对象名称注入属性值,如果按照名称找不到依赖的对象,则按照类型寻找依赖的对象。对象名称可以通过@Resource注解的name属性指定,如果没有指定name属性,当@Resource标注在属性上时,通过属性名称作为bean名称寻找依赖对象,当@Resource标注在属性的set方法上时,取属性名称作为bean名称寻找依赖对象。如果没有指定name属性,并且默认按照名称仍然找不到依赖对象时,@Resource注解会退回到按照类型匹配。一旦指定了name属性,就只能按照名称注入了。
? @Autowired
@Autowired注解按照类型注入,默认情况下它要求依赖的对象必须存在,如果允许为null,可以设置它的required属性为false。
? @Qualifier
@Autowired是按照类型注入的,如果@Autowired想使用对象名称注入,可以结合@Qualifier注解一起使用,由@Qualifier注解确定注入的对象名称。
? component-scan
context:annotation-config/能够实现为属性注入值,从而简化了xml的配置,但bean对象的创建依然要定义在xml文件中。Spring引入了组件自动扫描机制,他可以在指定的包下寻找标注了@Component、@Service,@Controller,@Respository注解的类,然后自动创建该类的对象,并将对象交给spring容器管理。这些注解的作用和xml中的bean节点配置是一样的,从而进一步简化了xml的配置。使用component-scan需要两步
1:启用component-scan配置
在spring配置文件中,启用component-scan配置




……

该配置隐式注册了对注解进行解析处理的处理器类。base-package属性指定需要扫描的包及其子包。
2:在类的名上标注annotation
在类名上可标注的annotation有@Component、@Service,@Controller,@Respository。@Service用于配置在业务类上,@Controller用于配置在控制器上,@Respository用于配置在数组访问组件上,@Component用于配置在以上三种组件之外的组件上。这些注解并没有严格区分必须用在哪个组件上,事实上也可以将@Controller注解用在业务类上,之所以这样区别只是为了便于识别是业务类还是控制器而已。
? @Service(“deptService”)标注在DeptService类上,表示告诉Spring容器负责创建DeptService类的对象,并将创建的对象名称设置为deptService。
? @Scope
通过@scope注解可设置bean的作用域
@Service("deptService")
@Scope("prototype")
public class DeptService {
@Resource(name="deptDao") private DeptDao deptDao =null; public List findAll(){ return deptDao.findAll(); }

}scope的值包括singleton、prototype、request、session
? @PostConstruct @PreDestroy
通过@PostConstruct可设置bean初始化时调用的方法,通过@PreDestroy可设置bean销毁时调用的方法
? Java-based
【Java开发框架之Spring JDBC】一直以来,spring大量的XML配置及复杂的依赖管理饱受非议。为了实现免XML的开发体验,Spring添加了Java based开发模式。Java-based开发模式中使用注解@Configuration、@Bean、@ImportResource、@ComponentScan等。
? @Bean注解用于标注在方法上,表示一个方法实例化、配置、初始化一个新的被Spring容器管理的bean对象。@Bean注解相当于xml配置文件中的。@Bean通常和@Configuration注解一起使用。
? @Configuration注解用于标注在类上,标注了@Configuration注解的类将作为bean定义的来源。此外@Configuration类允许bean之间依赖,只需简单地调用该类中其他的@Bean方法。
置文件中的。@Bean通常和@Configuration注解一起使用。
? @Configuration注解用于标注在类上,标注了@Configuration注解的类将作为bean定义的来源。此外@Configuration类允许bean之间依赖,只需简单地调用该类中其他的@Bean方法。
? @ImportResource注解标注在类上,表示该类导入的外部资源。

    推荐阅读