Spring——JdbcTemplate

目录

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
}

实体对应的表
Spring——JdbcTemplate

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)
  • 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 <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);
}
上一篇:【springboot2】数据库连接操作


下一篇:JdbcTemplate的使用【gradle java 】【demo】【可用】【基础】【复习】【测试】【简洁明了,一眼就会】