JdbcTemplate
概述
1、Spring 框架对 JDBC 进行封装,使用 JdbsTemplate 方便实现对数据库操作
2、相关 jar 包
(1)mysql-connector-java:Java 提供一套用于数据库操作的接口
(2)druid:数据库连接池
(3)spring-jdbc:包含 Spring 对 JDBC 数据访问进行封装的所有类
(4)spring-tx:负责在 Spring 框架中实现事务管理功能
(5)spring-orm:插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,包括 Hibernate,JPA,JDO,Oracle Toplink、iBATIS
前置
1、开启组件扫描
2、配置数据库连接池
3、配置 JdbcTemplate 对象,注入 DataSource
(1)xml
<?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">
<!-- 开启注解(组件)扫描 -->
<context:component-scan base-package="包路径"></context:component-scan>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc_url}" />
<property name="username" value="${jdbc_user}" />
<property name="password" value="${jdbc_password}" />
<property name="filters" value="stat" />
<property name="maxActive" value="20" />
<property name="initialSize" value="1" />
<property name="maxWait" value="6000" />
<property name="minIdle" value="1" />
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="poolPreparedStatements" value="true" />
<property name="maxOpenPreparedStatements" value="20" />
<property name="asyncInit" value="true" />
</bean>
<!-- 创建JdbcTemplate对象 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 注入dataSource -->
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
(2)配置类 + 注解;@Bean 将方法产生对象注入到 IOC 容器
@Configuration
//开启组件扫描
@ComponentScan(basePackages = {"包路径"})
public class ConfigTX {
//创建数据库连接池
@Bean
public DruidDataSource getDruidDataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setUrl("jdbc:mysql://localhost:3306:druid");
druidDataSource.setUsername("用户名");
druidDataSource.setPassword("密码");
//其余配置略
return druidDataSource;
}
//创建JdbcTemplate对象
@Bean
public JdbcTemplate getJdbcTemplate(DataSource dataSource) {
//到IOC容器中找到dataSource
JdbcTemplate jdbcTemplate = new JdbcTemplate();
//注入dataSource
jdbcTemplate.setDataSource(dataSource);
return jdbcTemplate;
}
}
4、创建 Service 类、Dao 类,在 Dao 类注入 JdbcTemplate 对象
@Service
class TestService{
@Autowired
private Dao dao;
}
interface BaseDao {
}
@Repository
class Dao implements BaseDao {
//注入JdbcTemplate对象
@Autowired
private JdbcTemplate jdbcTemplate;
}
创建对应表(users)的实体类(示例)
class User {
private String id;
private String name;
private String status;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
添加、修改、删除(单条)
1、sql:SQL 语句;args:可变参数,设置 SQL 语句值
update(String sql, @Nullable Object... args)
2、在 Dao 进行添加、修改、删除操作
@Service
class TestService {
@Autowired
private Dao dao;
public void add(User user) {
dao.add(user);
}
public void update(User user) {
dao.update(user);
}
public void delete(String id) {
dao.delete(id);
}
}
interface BaseDao {
void add(User user);
void update(User user);
void delete(String id);
}
@Repository
class Dao implements BaseDao {
//注入JdbcTemplate对象
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void add(User user) {
String sql = "insert into users value(?,?,?)";
Object[] args = {user.getId(), user.getName(), user.getStatus()};
int update = jdbcTemplate.update(sql, args);
System.out.println(update);
}
@Override
public void update(User user) {
String sql = "update users set name=?, set status=? where id=?";
Object[] args = {user.getName(), user.getStatus(), user.getId()};
int update = jdbcTemplate.update(sql, args);
System.out.println(update);
}
@Override
public void delete(String id) {
String sql = "delete from users where id=?";
int update = jdbcTemplate.update(sql, id);
System.out.println(update);
}
}
查询
1、方法
(1)sql:SQL 语句;requiredType:返回类型 Class
<T> T queryForObject(String sql, Class<T> requiredType) throws DataAccessException;
(2)sql:SQL 语句;rowMapper:该接口的实现类,封装不同返回数据类型;args:可变参数,设置 SQL 语句值
<T> T queryForObject(String sql, RowMapper<T> rowMapper, @Nullable Object... args) throws DataAccessException;
(3)sql:SQL 语句;rowMapper:该接口的实现类,封装不同返回数据类型;args:可变参数,设置 SQL 语句值
<T> List<T> query(String sql, RowMapper<T> rowMapper, @Nullable Object... args) throws DataAccessException;
2、返回数据类型
(1)值
(2)对象
(3)集合
3、示例
@Service
class TestService {
@Autowired
private Dao dao;
public int selectCount() {
return dao.selectCount();
}
public User selectUser(String id) {
return dao.selectUser(id);
}
public List<User> selectUsers() {
return dao.selectUsers();
}
}
interface BaseDao {
int selectCount();
User selectUser(String id);
List<User> selectUsers();
}
@Repository
class Dao implements BaseDao {
//注入JdbcTemplate对象
@Autowired
private JdbcTemplate jdbcTemplate;
//查询表的记录个数
@Override
public int selectCount() {
String sql = "select count(*) from users";
Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
return count;
}
添加、修改、删除(批量)
1、sql:SQL 语句;batchArgs:添加多条记录
public int[] batchUpdate(String sql, List<Object[]> batchArgs) throws DataAccessException
2、示例
@Service
class TestService {
@Autowired
private Dao dao;
public void batchAdd(List<Object[]> batchArgs) {
dao.batchAdd(batchArgs);
}
public void batchUpdate(List<Object[]> batchArgs) {
dao.batchUpdate(batchArgs);
}
public void batchDelete(List<Object[]> batchArgs) {
dao.batchDelete(batchArgs);
}
}
interface BaseDao {
void batchAdd(List<Object[]> batchArgs);
void batchUpdate(List<Object[]> batchArgs);
void batchDelete(List<Object[]> batchArgs);
}
@Repository
class Dao implements BaseDao {
//注入JdbcTemplate对象
@Autowired
private JdbcTemplate jdbcTemplate;
//批量添加
@Override
public void batchAdd(List<Object[]> batchArgs) {
String sql = "insert into users values(?, ?, ?)";
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(Arrays.toString(ints));
}
//批量修改
@Override
public void batchUpdate(List<Object[]> batchArgs) {
String sql = "update users set name=?, status=? where id=?";
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(Arrays.toString(ints));
}
//批量删除
@Override
public void batchDelete(List<Object[]> batchArgs) {
String sql = "delete from users where id=?";
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(Arrays.toString(ints));
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战