Spring框架(三)
目录:
1.什么是组件扫描
2.如何完成组件扫描*****
3.和组件扫描相关的其它标注***
4.组件装配相关的标注******
5.Spring DAO 做了哪些改进
6.Spring DAO 中的核心类 JdbcTemplate
7. 采用继承JdbcDaoSupport 来完成 JdbcTemplate 的使用
8. 采用不继承JdbcDaoSupport 来完成 JdbcTemplate 的使用
9.JdbcTemplate 的API
1.什么是组件扫描
Component Scan 组件扫描技术
是Spring 提供的一套基于注解(标注)
用来解决组件的创建 组装 维护组件关系的技术 这个技术可以大大的简化 XML的编写。
2.如何完成组件扫描 10000000
2.1 建立一个项目
导入jar包(ioc aop)
拷贝配置文件到 src
2.2 自定义一个java 类
2.3 在配置文件中开启组件扫描
<context:component-scan base-package="包名" />
2.4 在java类上 打对应的标注
@Component 通用层标注
@Repository 持久层标注
@Service 业务层标注
@Controller 控制层标注
2.5 创建Spring 容器 从容器中获取组件进行测试
3.和组件扫描相关的其它标注 7
控制作用域的标注
@Scope("singleton")
可以通过 prototype 调整成非单例
控制初始化的标注
@PostConstruct
加在初始化方法上
完成对象初始化
控制销毁的标注
@PreDestroy
加在销毁方法上
4.组件装配相关的标注 10000000000000000000000000000000000000000
4.1 @Value
用在 成员变量 set方法上
如果是赋值简单值 直接@Value("值")
如果是复杂值 则使用 @Value("#{对象id}")
4.2 @Autowired
用在 成员变量 set方法 还有构造方法上
它是解决复杂值注入问题的
它优先使用类型进行匹配
如果类型有冲突 则启用名字进行匹配。
@Qualifier("cc") 可以结合 @Qualifier 来指定名字查找 找不到会报错 不再启用类型
@Autowired 对组件的依赖 默认属于强依赖 可以通过 required = false 指定弱依赖
@Qualifier 不能用在构造方法上
4.3 @Resource
用在 成员变量 set方法
它是解决复杂值注入问题的
它优先使用名字进行匹配 如果匹配不上 会启用类型
它是JDK 中的标注 但是可以完美的和Spring 结合
它可以指定名字查找 需要使用name 属性来指定 不能解决强依赖
5.Spring DAO 做了哪些改进
简化了DAO 实现类的编写
对jdbc代码做了高级的封装
提供了基于AOP的事务管理
对jdbc 中的检查异常 做了封装
封装成了 DataAccessException
这个异常继承自RuntimeException
6.Spring DAO 中的核心类 JdbcTemplate
这个类可以完成
驱动加载
连接获取
sql执行环境获取
资源释放
JdbcDaoSupport这个类可以提供 JdbcTemplate
-
采用继承JdbcDaoSupport 来完成 JdbcTemplate 的使用
7.1 建立一个项目
导入jar包(ioc aop dao 连接池 数据库驱动)
并拷贝配置文件到src下
7.2 编写一个DAO 接口
编写一个查询表中数据条数的方法
7.3 编写一个DAO 的实现类
继承 JdbcDaoSupport
并实现DAO接口
开启组件扫描
在实现类上加标注 @Repository
给 DAO实现类的父类 JdbcDaoSupport 设置一个dataSource
使用JdbcDaoSupport 中的模板 完成查询
7.4 构建Spring 容器
从容器中获取dao 实现类 测试 -
采用不继承JdbcDaoSupport 来完成 JdbcTemplate 的使用
8.1 建立一个项目
导入jar包(ioc aop dao 连接池 数据库驱动)
并拷贝配置文件到src下
8.2 编写一个DAO 接口
编写一个查询表中数据条数的方法
8.3 编写一个DAO 的实现类
实现DAO接口
自定义一个模板 JdbcTemplate
从容器中加载这个类型对应的对象
容器中定义一个 JdbcTemplate
这个对象依赖于dataSource
开启组件扫描
在实现类上加标注 @Repository
使用自己的模板 完成查询8.4 构建Spring 容器
从容器中获取dao 实现类 测试9.JdbcTemplate 的API
queryForInt 查询一个整数
queryForObject 查询一个对象 整数 字符串
上面的两个 只能查询一个数据 查询的列数也只能是1如何完成多列的查询
比如根据id 查询一个用户对象
需要用到 RowMapper
queryForObject + RowMapper
查询所有 也可以使用上面的 RowMapper
query + RowMapper如何完成增删改
update