【Spring Boot】JdbcTemplate数据连接模板 — 使用JdbcTemplate操作数据库

使用JdbcTemplate操作数据库

成功在Spring Boot项目中集成JdbcTemplate后,如何使用JdbcTemplate数据库连接模板操作数据库呢?接下来以示例演示JdbcTemplate实现学生信息的增、删、改、查等操作,让我们在实践中边学边用,更好地理解和吸收。

实现学生数据管理功能

步骤01 创建实体类。

根据之前创建的Student表结构创建对应的实体类Student,具体代码如下:

public class Student {
    
    
    private Long id;
    private String name;
    private int sex;
    private int age;

    public Student() {
    
    

    }
    public Student(String name ,  int sex, int age) {
    
    
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
    //省略get、set方法
}

需要注意的是,实体类的数据类型要和数据库字段一一对应。

步骤02 定义Repository接口。

首先,创建StudentRepository接口并定义常用的增、删、改、查接口方法,示例代码如下:

public interface StudentRepository {
    
    
    int save(Student student);
    int update(Student student);
    int delete(Long id);
    Student findById(Long id);
}

在上面的示例中,在StudentRepository中定义了save()、update()、delete()和findById()方法。

然后,创建StudentRepositoryImpl类,继承StudentRepository接口,实现接口中的增、删、改、查等方法,示例代码如下:

@Repository
public class StudentRepositoryImpl implements StudentRepository {
    
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
}

在上面的示例中,在StudentRepositoryImpl类上使用@Repository注解用于标注数据访问组件JdbcTemplate,同时在类中注入JdbcTemplate实例。

步骤03 实现增、删、改、查功能。

接下来逐个实现对应的增、删、改、查方法。

1)新增:在StudentRepositoryImpl类中实现StudentRepository接口中的save()方法。示例代码如下:

    @Override
    public int save(Student student) {
    
    
        return jdbcTemplate.update("INSERT INTO Student(name, sex, age) values(?,?,?)",
        student.getName(),student .getSex(),student.getAge());
    }

在JdbcTemplate中,除了查询有几个API之外,新增、删除与修改操作统一都调用update()方法来完成,传入SQL即可。Update()方法的返回值就是SQL执行受影响的行数。

2)删除:通过用户id删除用户信息,在StudentRepositoryImpl类中实现StudentRepository接口的update( )方法。示例代码如下:

    @Override
    public int delete(Long id) {
    
    
        return jdbcTemplate.update("DELETE FROM Student where id = ? ", id);
    }

看到这里读者可能会有疑问:怎么新增、删除、修改都调用update()方法,这与其他的框架不一样?严格来说,新增、删除、修改都属于数据写入,通过update()执行对应的SQL语句即可实现对数据库中数据的变更。

3)修改:修改和新增类似,在StudentRepositoryImpl类中实现StudentRepository接口的update()方法。示例代码如下:

    @Override
    public int update(Student student) {
    
    
        return jdbcTemplate.update("UPDATE Student SET name = ? , password = ? , age = ?, WHERE id=?", student.getName(), student.getSex(), student.getAge(), student.getId());
    }

4)查询:根据用户id查询用户信息,同样在StudentRepositoryImpl类中实现StudentRepository接口的findById()方法。示例代码如下:

    @Override
    public Student findById(long id) {
    
    
        return jdbcTemplate.queryForObject("SELECT * FROM Student WHERE id=?", new Object[] {
    
     id }, new BeanPropertyRowMapper<Student>(Student.class));
    }

在上面的示例中,JdbcTemplate执行查询相关的语句调用query()方法及queryForXXX()方法,查询对象调用queryForObject方法。JdbcTemplate支持将查询结果转换为实体对象,使用new BeanPropertyRowMapper(Student.class)对返回的数据进行封装,它通过名称匹配的方式自动将数据列映射到指定类的实体类中。

在执行查询操作时,需要有一个RowMapper将查询出来的列和实体类中的属性一一对应起来:如果列名和属性名是相同的,那么可以直接使用BeanPropertyRowMapper;如果列名和属性名不同,就需要开发者自己实现RowMapper接口,将数据列与实体类属性字段映射。

步骤04 验证测试。

接下来对封装好的StudentRepository进行测试,测试StudentRepository中的各个方法是否正确。创建StudentRepositoryTests类,将studentRepository注入测试类中。

@SpringBootTest
class StudentRepositoryImplTest {
    
    
    @Autowired
    private StudentRepository studentRepository;

    @Test
    void save() {
    
    
        Student student = new Student("example", 1, 30);
        studentRepository.save(student);
    }

    @Test
    void update() {
    
    
        Student student = new Student("example", 1, 18);
        student.setId(1L);
        studentRepository.update(student);
    }

    @Test
    void delete() {
    
    
        studentRepository.delete(1L);
    }

    @Test
    void findById() {
    
    
        Student student = studentRepository.findById(1L);
        System.out.println("student == " + student.toString());
    }
}

接下来,依次执行上面的单元测试方法,验证学生信息的增删改查功能是否正常,结果如图所示。
结果表明单元测试执行正常,说明StudentRepository中的方法执行成功,也可以查看数据库中的数据是否符合预期。

猜你喜欢

转载自blog.csdn.net/weixin_45627039/article/details/132401787