Spring框架细讲 JdbcTemplate部分
文章目录
前言
了解或会写JDBC会更方便你对该组件的了解,如果没有该前置知识建议与了解下再来会更好
如果对于部分注解或者配置不太了解可以看下
Spring之IOC
Spring之 AOP
JDBC 该文章还未完善 期待后续
一、概述
1、什么是 JdbcTemplate
(1)Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库
2、JdbcTemplate底层也是依赖于动态代理
二、使用步骤
2.1 引入相关依赖jar包
2.2 上手使用之xml配置JdbcTemplate
- xml配置
- 配置连接池
- 创建JdbcTemplate对象
- 开启组件扫描 可配置扫描规则
- 创建dao层 注入jdbcTemplate / service 创建service bean对象
需要引入context命名空间
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 引入外部jdbc配置文件 -->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
<!-- 配置连接池 -->
<!-- DruidDataSource dataSource = new DruidDataSource(); -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<!-- dataSource.setDriverClassName("com.mysql.jdbc.Driver");
set方法注入
-->
<!-- 获取properties文件内容,根据key获取,使用spring表达式获取 -->
<property name="driverClassName" value="${prop.jdbcDriveClass}"></property>
<property name="url" value="${prop.url}"></property>
<property name="username" value="${prop.username}"></property>
<property name="password" value="${prop.password}"></property>
</bean>
<!--JDBCTemplate对象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--开启组件扫描-->
<context:component-scan base-package="com.worker">
<!--配置扫描的规则-->
<!-- use-default-filters="false"-->
<!--<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Component"/>-->
</context:component-scan>
<bean id="fruitService" class="com.worker.spring.service.FruitService"></bean>
</beans>
2.3 配置类
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@Configuration /*配置当前类为配置类 替代xml配置文件*/
@ComponentScan(basePackages = "com.worker") /*开启组件扫描*/
@EnableAspectJAutoProxy(proxyTargetClass = true) /* 开启Aspectj生成代理对象 */
public class MyConfig {
}
2.4 上手使用之增删改
了解数据库的最清楚不过的四大操作增删改查
// 注入jdbcTemplate
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void update(String sql, Object... args) {
jdbcTemplate.update(sql,args);
}
2.5 上手使用之查询
2.5.1 查询某个值(count max min avg sum)
queryForObject 参数:1.sql语句 2.返回值类型
queryForObject(String sql,Class<T> requiredType)
// 查询记录条数
@Override
public int queryForNum(String sql) {
Integer o = (Integer) jdbcTemplate.queryForObject(sql,Integer.class);
return o;
}
2.5.2 查询某一条数据(返回对象)
queryForObject(String sql,RowMapper,args)有三个参数
⚫ 第一个参数:sql 语句
⚫ 第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成 数据封装
⚫ 第三个参数:sql 语句值
@Override
public Fruit findFruitInfo(String sql,int fid) {
/* 每条数据都封装成了Fruit对象 */
RowMapper<Fruit> rowMapper =new BeanPropertyRowMapper<>(Fruit.class);
Fruit fruit = jdbcTemplate.queryForObject(sql, rowMapper, fid);
return fruit;
}
三、批量操作(插入/删除/更新)
batchUpdate(sql,List<Object[]> list)
@Override
public void batchAddFruit(String sql, List<Object[]> batchArgs) {
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(Arrays.toString(ints));
}
四、全注解开发
文中的jdbc.properties配置文件为自己配置
@Configuration//代表此类是配置类
@ComponentScan(basePackages={"com.worker"})//要扫描的包
@PropertySource({"classpath:jdbc.properties"})//从哪个properties文件中取值
public class MyConfig {
@Value("${prop.jdbcDriveClass}")//value注解代表把文件中的值赋值给此变量
private String driver;
@Value("${prop.url}")
private String url;
@Value("${prop.username}")
private String user;
@Value("${prop.password}")
private String password;
@Bean(name="dataSource")//给方法取名字
public DataSource getDataSource(){
DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName(driver);
driverManagerDataSource.setUrl(url);
driverManagerDataSource.setUsername(user);
driverManagerDataSource.setPassword(password);
return driverManagerDataSource;
}
@Bean(name="jdbcTemplate")
public JdbcTemplate createJdbcTemplate(DataSource dataSource){
return new JdbcTemplate( dataSource);
}
}
总结
JdbcTemplate操作其实是对于Spring对于JDBC的封装,使操作更加简单罢了,底层还是JDBC,你了解了JDBC与MySQL前置知识,理解简直就是so easy好吧