使用JdbcTemplate对MySQL数据库进行增删改查

大家好,我是邵奈一,一个不务正业的程序猿、正儿八经的斜杠青年。
1、世人称我为:被代码耽误的诗人、没天赋的书法家、五音不全的歌手、专业跑龙套演员、不合格的运动员…
2、这几年,我整理了很多IT技术相关的教程给大家,爱生活、爱分享。
3、如果您觉得文章有用,请收藏,转发,评论,并关注我,谢谢!
博客导航跳转(请收藏):邵奈一的技术博客导航
| 公众号 | 微信 | 微博 | CSDN | 简书 |


0x00 教程内容

  1. Spring配置文件的编写
  2. JDBCTemplate访问接口代码的实现
  3. 测试
  4. 增删改完整代码

紧接着上一篇教程的基础:Spring之Bean的依赖注入(基于XML),这一篇文章继续来操作对数据库的访问,只不过这次是使用Spring里面的JdbcTemplate,其实也是非常简单的。

0x01 Spring配置文件的编写

1. 引入依赖

如果上一教程已经引入过了,则忽略此步骤:

<!-- Spring JDBC依赖包 -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>5.2.4.RELEASE</version>
</dependency>

<!-- Spring context依赖 -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.2.4.RELEASE</version>
</dependency>
2. 注入dataSource

注入 dataSourcejdbcTemplate

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql:///sny"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
</bean>

如果不知道需要设置什么property,可以按住 ctrl 然后点击 DriverManagerDataSource进入需要设置什么属性值。

0x02 新建JDBCTemplate访问接口

1. 新建实现类

新建类 StudentDAOJdbcTemplateImpl 实现 StudentDAO 接口,然后加入JDBCTemplate属性,并且生成 get 和 set 方法 (至少需要有 set 方法):

private JdbcTemplate jdbcTemplate;

public JdbcTemplate getJdbcTemplate() {
    return jdbcTemplate;
}

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

在这里插入图片描述

2. 注入 jdbcTemplate

写好之后,需要在Spring配置文件里注入进来,以供后面测试时直接从IoC容器中获取:

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
</bean>

注意:这里是用了 ref ,表示设置的属性值来自于上面注入的bean,对应的是id。

3. 编写jdbcTemplate访问代码

编写实现StudentDAO里面的查询接口的代码:

@Override
public List<Student> getStudentList() {

final List<Student> studentList = new ArrayList<>();
    String sql = "select id,name,age from student";

    jdbcTemplate.query(sql, new RowCallbackHandler() {
        @Override
        public void processRow(ResultSet resultSet) throws SQLException {

            Student student = new Student();
            student.setId(resultSet.getInt("id"));
            student.setName(resultSet.getString("name"));
            student.setAge(resultSet.getInt("age"));

            studentList.add(student);
        }
    });

    return studentList;
}

在这里插入图片描述

4. 注入接口实现类
<bean id="studentDAO" class="com.shaonaiyi.dao.StudentDAOJdbcTemplateImpl">
    <property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>

注意:这里是用了 ref ,对应的是上面配置的 jdbcTemplate。

0x03 测试

1. 新建测试类

在这里插入图片描述
完整代码如下:

package com.shaonaiyi.dao;

import com.shaonaiyi.domain.Student;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;

/**
 * @Auther: shaonaiyi@163.com
 * @Date: 2021/1/16 15:43
 * @Description: JDBCTemplate方式对数据库进行访问
 */
public class StudentDAOJdbcTemplateImplTest {

    private ApplicationContext applicationContext = null;
    private StudentDAO studentDAO = null;

    @Before
    public void before() {
        applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        studentDAO = (StudentDAO) applicationContext.getBean("studentDAO");
    }

    @After
    public void after() {
        applicationContext = null;
    }

    @Test
    public void testGetStudentList() {
        List<Student> studentList = studentDAO.getStudentList();

        for (Student student : studentList) {
            System.out.println("---------------------");
            System.out.println("学生id:" + student.getId());
            System.out.println("学生名称:" + student.getName());
            System.out.println("学生年龄:" + student.getAge());
        }

    }

}

代码解读:从IoC容器中获取 studentDAO对象,然后调用查询接口,将结果查询出来。

2. 测试结果

在这里插入图片描述

0x04 增删改代码

1. 完整代码

增删改代码都非常相似,不做过多的介绍,给出完整的代码:
StudentDAOJdbcTemplateImpl完整代码:

package com.shaonaiyi.dao;


import com.shaonaiyi.domain.Student;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * @Auther: shaonaiyi@163.com
 * @Date: 2021/1/16 15:36
 * @Description: JDBCTemplate方式对数据库进行访问
 */
public class StudentDAOJdbcTemplateImpl implements StudentDAO {

    private JdbcTemplate jdbcTemplate;

    @Override
    public List<Student> getStudentList() {

    final List<Student> studentList = new ArrayList<>();
        String sql = "select id,name,age from student";

        jdbcTemplate.query(sql, new RowCallbackHandler() {
            @Override
            public void processRow(ResultSet resultSet) throws SQLException {

                Student student = new Student();
                student.setId(resultSet.getInt("id"));
                student.setName(resultSet.getString("name"));
                student.setAge(resultSet.getInt("age"));

                studentList.add(student);
            }
        });

        return studentList;
    }

    @Override
    public int save(Student student) {

        String sql = "insert into student (name,age) values (?,?)";
        int result = jdbcTemplate.update(sql, new Object[]{student.getName(), student.getAge()});

        return result;
    }

    @Override
    public int delete(int id) {

        String sql = "delete from student where id = " + id ;
        int result = jdbcTemplate.update(sql);

        return result;
    }

    @Override
    public int update(Student student) {

        String sql = "update student set age = ? where name = ?";
        int result = jdbcTemplate.update(sql, new Object[]{student.getAge(), student.getName()});

        return result;
    }

    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }

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

}

StudentDAOJdbcTemplateImplTest完整代码:

package com.shaonaiyi.dao;

import com.shaonaiyi.domain.Student;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;

/**
 * @Auther: shaonaiyi@163.com
 * @Date: 2021/1/16 15:43
 * @Description: JDBCTemplate方式对数据库进行访问
 */
public class StudentDAOJdbcTemplateImplTest {

    private ApplicationContext applicationContext = null;
    private StudentDAO studentDAO = null;

    @Before
    public void before() {
        applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        studentDAO = (StudentDAO) applicationContext.getBean("studentDAO");
    }

    @After
    public void after() {
        applicationContext = null;
    }

    @Test
    public void testGetStudentList() {
        List<Student> studentList = studentDAO.getStudentList();

        for (Student student : studentList) {
            System.out.println("---------------------");
            System.out.println("学生id:" + student.getId());
            System.out.println("学生名称:" + student.getName());
            System.out.println("学生年龄:" + student.getAge());
        }

    }

    @Test
    public void testSave() {

        Student student = new Student();
        student.setName("邵奈一-jdbc");
        student.setAge(35);

        int result = studentDAO.save(student);
        System.out.println("执行结果行数:" + result);
    }

    @Test
    public void testDelete() {

        int result = studentDAO.delete(7);
        System.out.println("执行结果行数:" + result);

    }

    @Test
    public void testUpdate() {

        Student student = new Student();
        student.setName("邵奈一");
        student.setAge(37);

        int result = studentDAO.update(student);
        System.out.println("执行结果行数:" + result);

    }

}

2. 测试结果

增:
在这里插入图片描述
删:
在这里插入图片描述
改:
在这里插入图片描述

0xFF 总结

  1. Java访问数据库系列,包含最后此篇,一共写了五篇,前四篇的地址如下:
    JDBC连接MySQL数据库(一)
    JDBC连接MySQL数据库(二)
    JDBC实现MySQL数据库的增删改查
    Spring之Bean的依赖注入(基于XML)
  2. 后期有机会还会介绍更多相关的知识,如Hibernate、MyBatis或者Spring Data JPA等等,敬请期待!欢迎关注,点赞,感谢!

邵奈一 原创不易,如转载请标明出处,教育是一生的事业。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值