JdbcTemplate 是 Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作
环境准备
需要导入的依赖
出了Spring基本的IOC和AOP的依赖还需导入
spring-tx-5.2.18.RELEASE.jar
spring-orm-5.2.18.RELEASE.jar
spring-jdbc-5.2.18.RELEASE.jar
数据库驱动和数据源
mysql-connector-java-8.0.25.jar
druid-1.2.6.jar
数据库配置文件
jdbc.username=root
jdbc.password=1234
jdbc.url=jdbc:mysql://localhost:3306/wcy
jdbc.driver=com.mysql.cj.jdbc.Driver
Spring配置文件
注解扫描
<context:component-scan base-package="com.wcy"/>
数据源配置
<!--配置文件-->
<context:property-placeholder location="classpath:db.properties"/>
<!--引用外部配置文件 配置数据源-->
<context:property-placeholder location="classpath:db.properties"/>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
</bean>
JdbcTemplate配置
<!--配置jdbcTemplate-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
实体类
public class User {
private Integer id;
private String username;
private String password;
private String email;
// getter and setter
}
实体对应的表
UserDao接口
public interface UserDao {
/**
* 添加一个user
*/
int addUser(User user);
/**
* 删除一个User
*/
int deleteUser(Integer id);
/**
* 更改一个user
*/
int updateUser(User user);
/**
* 查询记录条数
*/
Integer queryCount();
/**
* 查询一个user
*/
User queryUser(Integer id);
/**
* 查询全部user
*/
List<User> queryAllUsers();
/**
* 批量添加
*/
void batchAddUser(List<User> userList);
/**
* 批量修改
*/
void batchUpdateUser(List<User> userList);
/**
* 批量删除
*/
void batchDeleteUser(List<Integer> idList);
}
UserDao实现类
目前全部做空实现,后面慢慢来实现
首先需要将其放到容器中
再注入我们配置好的jdbcTemplate
@Repository("userDao")
public class UserDaoImpl implements UserDao {
@Autowired
JdbcTemplate jdbcTemplate;
//全部空实现...
}
update
JdbcTemplate提供了一个update方法来执行单条的增删改的操作
public int update(String sql, @Nullable Object... args)
-
sql
是需要执行的语句 -
args
是语句中所需的参数
接下来实现增加,修改和删除User的方法
@Override
public int addUser(User user) {
String sql = "insert into t_user (id, username, password, email) values (?, ?, ?, ?)";
return jdbcTemplate.update(
sql, user.getId(), user.getUsername(), user.getPassword(), user.getEmail()
);
}
@Override
public int deleteUser(Integer id) {
String sql = "delete from t_user where id=?";
return jdbcTemplate.update(sql, id);
}
@Override
public int updateUser(User user) {
String sql = "update t_user set username=?, password=?, email=? where id=?";
return jdbcTemplate.update(
sql, user.getUsername(), user.getPassword(), user.getEmail(), user.getId()
);
}
操作大致相同
单条记录查询
查询的是具体的某个值,只有一行一列
public <T> T queryForObject(String sql, Class<T> requiredType)
-
requiredType
是这个值的类型
实现查询记录条数的方法
@Override
public Integer queryCount() {
String sql = "select count(*) from t_user";
return jdbcTemplate.queryForObject(sql, Integer.class);
}
查询的是一条记录
public <T> T queryForObject(String sql, RowMapper<T> rowMapper, @Nullable Object... args)
-
rowMapper
RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装,泛型是记录的类型
实现查询一个User
@Override
public User queryUser(Integer id) {
String sql = "select * from t_user where id=?";
return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), id);
}
多条记录查询
public <T> List<T> query(String sql, RowMapper<T> rowMapper)
实现查询全部user
@Override
public List<User> queryAllUsers() {
String sql = "select * from t_user";
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
}
batchUpdate
批量的update操作
public int[] batchUpdate(String sql, List<Object[]> batchArgs)
-
batchArgs
参数List 每一个元素Object[] 代表一条记录的参数
批量的增删改
@Override
public void batchAddUser(List<User> userList) {
String sql = "insert into t_user (id, username, password, email) values (?, ?, ?, ?)";
ArrayList<Object[]> argsList = new ArrayList<>();
for (User user : userList) {
argsList.add(new Object[]{user.getId(), user.getUsername(), user.getPassword(), user.getEmail()});
}
jdbcTemplate.batchUpdate(sql, argsList);
}
@Override
public void batchUpdateUser(List<User> userList) {
String sql = "update t_user set username=?, password=?, email=? where id=?";
ArrayList<Object[]> argsList = new ArrayList<>();
for (User user : userList) {
argsList.add(new Object[]{user.getUsername(), user.getPassword(), user.getEmail(), user.getId()});
}
jdbcTemplate.batchUpdate(sql, argsList);
}
@Override
public void batchDeleteUser(List<Integer> idList) {
String sql = "delete from t_user where id=?";
ArrayList<Object[]> argsList = new ArrayList<>();
for (Integer id : idList) {
argsList.add(new Object[]{id});
}
jdbcTemplate.batchUpdate(sql, argsList);
}