Spring——JdbcTemplate


目录
  • 环境准备
  • update
  • 单条记录查询
  • 多条记录查询
  • batchUpdate

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配置文件

注解扫描


数据源配置







	
	
	
	

JdbcTemplate配置



	


实体类

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 queryAllUsers();

    /**
     * 批量添加
     */
    void batchAddUser(List userList);

    /**
     * 批量修改
     */
    void batchUpdateUser(List userList);

    /**
     * 批量删除
     */
    void batchDeleteUser(List 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 queryForObject(String sql, Class requiredType)
  • requiredType 是这个值的类型

实现查询记录条数的方法

@Override
public Integer queryCount() {
	String sql = "select count(*) from t_user";
	return jdbcTemplate.queryForObject(sql, Integer.class);
}

查询的是一条记录

public  T queryForObject(String sql, RowMapper rowMapper, @Nullable Object... args)
  • rowMapperRowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装,泛型是记录的类型

实现查询一个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  List query(String sql, RowMapper rowMapper)

实现查询全部user

@Override
public List queryAllUsers() {
	String sql = "select * from t_user";
	return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
}

batchUpdate

批量的update操作

public int[] batchUpdate(String sql, List batchArgs)
  • batchArgs 参数List 每一个元素Object[] 代表一条记录的参数

批量的增删改

@Override
public void batchAddUser(List userList) {
	String sql = "insert into t_user (id, username, password, email) values (?, ?, ?, ?)";
	ArrayList 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 userList) {
	String sql = "update t_user set username=?, password=?, email=? where id=?";
	ArrayList 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 idList) {
	String sql = "delete from t_user where id=?";
	ArrayList argsList = new ArrayList<>();
	for (Integer id : idList) {
		argsList.add(new Object[]{id});
	}
	jdbcTemplate.batchUpdate(sql, argsList);
}