Spring整合JdbcTemplate模板的详细教程

      Spring框架针对数据库开发中的应用提供了 JDBCTemplate 类,该类是 Spring 对 JDBC 支持的核心,它提供了所有对数据库操作功能的支持。

     Spring 框架提供的JDBC支持主要由四个包组成,分别是 core(核心包)、object(对象包)、dataSource(数据源包)和 support(支持包),org.springframework.jdbc.core.JdbcTemplate 类就包含在核心包中。作为 Spring JDBC 的核心,JdbcTemplate 类中包含了所有数据库操作的基本方法。

     JdbcTemplate 类继承自抽象类 JdbcAccessor,同时实现了 JdbcOperations 接口。其直接父类 JdbcAccessor 为子类提供了一些访问数据库时使用的公共属性。

     以Maven项目案例的形式给大家介绍JdbcTemplate的具体使用。

    项目案例主要的流程为:通过service层调用dao层,然后通过dao层调用JdbcTemplate模板进行数据库操作,最后使用Demo测试类,在测试类中调用service层,测试是否能操作数据。

    项目核心的部分包含:1)项目相关依赖  2)spring核心配置文件  3)service层内容  4)dao层内容   5)Demo测试类内容

    具体内容如下:

1.相关依赖

        <!--spring基础依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.20</version>
        </dependency>
        <!--spring连接数据库-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.20</version>
        </dependency>
        <!--mysql数据库-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
        </dependency>
        <!--连接池-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>2.11.0</version>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.30</version>
        </dependency>

2. Spring核心配置文件:applicationContext.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
 
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/student_db"/>
        <property name="username" value="root"/>
        <property name="password" value="12345678"/>
    </bean>
 
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>
 
    <bean id="studentDao" class="com.laoma.dao.impl.StudentDaoImpl">
        <property name="jdbcTemplate" ref="jdbcTemplate"/>
    </bean>
 
    <bean id="studentService" class="com.laoma.service.impl.StudentServiceImpl">
        <property name="studentDao" ref="studentDao"/>
    </bean>
 
</beans>

3. 实体类:Student

@Data
public class Student {
    private int id;
    private String name;
    private String birth;
    private String sex;
}

4. service层接口:StudentService

public interface StudentService {
    public Student getStudentById(int id);
    public List<Student> listStudents();
    public List<Student> listStudentsBySex(String sex);
    public int updateNameById(String name,int id);
}

5.Service层实现类 :StudentServiceImpl

public class StudentServiceImpl implements StudentService {

    private StudentDao studentDao;

    public void setStudentDao(StudentDao studentDao) {
        this.studentDao = studentDao;
    }

    @Override
    public Student getStudentById(int id) {
        return studentDao.getStudentById(id);
    }

    @Override
    public List<Student> listStudents() {
        return studentDao.listStudents();
    }

    @Override
    public List<Student> listStudentsBySex(String sex) {
        return studentDao.listStudentsBySex(sex);
    }

    @Override
    public int updateNameById(String name, int id) {
        return studentDao.updateNameById(name,id);
    }
}

6. Dao层接口:StudentDao

public interface StudentDao {
    public Student getStudentById(int id);
    public List<Student> listStudents();
    public List<Student> listStudentsBySex(String sex);
    public int updateNameById(String name,int id);
}

7. Dao层接口 实现类: StudentDaoImpl

public class StudentDaoImpl implements StudentDao {

    private JdbcTemplate jdbcTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    public Student getStudentById(int id) {
        String sql = "select * from t_student where id=?";
        /**
         * T queryForObject(String sql, RowMapper<T> rowMapper, @Nullable Object... args)
         *  1. String sql 执行的sql语句,可以使用占位符
         *  2. RowMapper<T> 接口:
         *  2.1 mapRow(ResultSet rs, int rowNum) : 查询出数据的每一行的映射
         *  2.1.1 ResultSet rs :结果中存储的是一个行的数据
         *  2.1.2 int rowNum:每一行的下标
         *  3. Object... args: 可变参 :传递过来的参数,可以匹配sql中的占位符
         */
        Student student = jdbcTemplate.queryForObject(sql, new RowMapper<Student>() {
            @Override
            public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
                Student stu = new Student();
                stu.setId(rs.getInt("id"));
                stu.setName(rs.getString("name"));
                stu.setBirth(rs.getString("birth"));
                stu.setSex(rs.getString("sex"));
                return stu;
            }
        },id);

        return student;
    }

    @Override
    public List<Student> listStudents() {
        //-:定义sql语句
        String sql = "select * from t_student";
        /**
         * 执行jdb
         * <T> List<T> query(String sql, RowMapper<T> rowMapper)
         *  1. String sql 执行的sql语句
         *  2. RowMapper<T> 接口:
         *  2.1 mapRow(ResultSet rs, int rowNum) : 查询出数据的每一行的映射
         *  2.1.1 ResultSet rs :结果中存储的是一个行的数据
         *  2.1.2 int rowNum:每一行的下标
         */
        List<Student> students = jdbcTemplate.query(sql, new RowMapper<Student>() {
            @Override
            public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
                Student stu = new Student();
                stu.setId(rs.getInt("id"));
                stu.setName(rs.getString("name"));
                stu.setBirth(rs.getString("birth"));
                stu.setSex(rs.getString("sex"));
                return stu;
            }
        });
        return students;
    }

    @Override
    public List<Student> listStudentsBySex(String sex) {
        String sql = "select * from t_student where sex=?";
        /**
         * List<T> query(String sql, RowMapper<T> rowMapper, @Nullable Object... args)
         *  1. String sql 执行的sql语句,可以使用占位符
         *  2. RowMapper<T> 接口:
         *  2.1 mapRow(ResultSet rs, int rowNum) : 查询出数据的每一行的映射
         *  2.1.1 ResultSet rs :结果中存储的是一个行的数据
         *  2.1.2 int rowNum:每一行的下标
         *  3. Object... args: 可变参 :传递过来的参数,可以匹配sql中的占位符
         */
        List<Student> students = jdbcTemplate.query(sql, new RowMapper<Student>() {
            @Override
            public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
                Student stu = new Student();
                stu.setId(rs.getInt("id"));
                stu.setName(rs.getString("name"));
                stu.setBirth(rs.getString("birth"));
                stu.setSex(rs.getString("sex"));
                return stu;
            }
        },sex);
        return students;
    }

    @Override
    public int updateNameById(String name, int id) {
        String sql = "update t_student set name=? where id=?";
        /**
         * int update(String sql, @Nullable Object... args)
         * 1. String sql 执行的sql语句,可以使用占位符
         * 2. Object... args: 可变参 :传递过来的参数,可以匹配sql中的占位符
         */
        int res = jdbcTemplate.update(sql,name,id);
        return res;
    }
}

8. 测试类:Demo

public class Demo {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        StudentService studentService = (StudentService) context.getBean("studentService");
        //-查询所有的数据
        List<Student> students = studentService.listStudents();
        System.out.println(students);
        //-根据性别查询所有的数据
        List<Student> students1 = studentService.listStudentsBySex("女");
        System.out.println(students1);
        //-根据Id查询指定的对象信息
        Student student = studentService.getStudentById(2);
        System.out.println(student);
        //-更新数据
        int res = studentService.updateNameById("汤姆",5);
        if(res>0){
            System.out.println("修改成功");
            //-:查询出修改之后的数据
            students = studentService.listStudents();
            System.out.println(students);
        }else{
            System.out.println("修改失败");
        }

    }
}

到此,整个流程结束!

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud JdbcTemplate是一个用于简化数据库访问的框架,可以方便地进行SQL操作。而分表查询是指将数据按照一定的规则拆分到多个表中,通过某种方式进行查询。在使用Spring Cloud JdbcTemplate进行分表查询时,可以按以下步骤进行操作: 1. 配置数据源:通过在Spring Boot配置文件中配置数据库连接信息,包括URL、用户名和密码等。可以使用JdbcTemplate的DataSource来获取数据库连接。 2. 创建数据库表:根据分表的规则,创建多个数据库表,并根据需要在表中添加索引等。 3. 定义数据访问对象(DAO):可以创建多个DAO来对应不同的分表,每个DAO中定义相应的查询方法。可以使用JdbcTemplate提供的方法来执行SQL语句,并将查询结果映射为Java对象。 4. 执行分表查询:根据业务需求,编写SQL查询语句,并使用JdbcTemplate提供的方法执行查询。在查询时,可以根据分表规则动态生成表名,并将查询结果返回。 5. 处理查询结果:根据需要对查询结果进行处理,可以对查询结果进行排序、分页等操作。 6. 销毁资源:在使用完JdbcTemplate后,需要销毁相关资源,包括关闭数据库连接等。 总结来说,通过Spring Cloud JdbcTemplate进行分表查询的过程是先配置数据源,然后创建数据库表和DAO,最后执行查询,并对查询结果进行处理。使用JdbcTemplate可以简化数据库访问的过程,提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值