JAVA开发中如何使用Spring JDBC中的JdbcTemplate对数据进行增删改查操作

Spring JDBC

Spring JDBC模块分四个包:core(核心包) 、dataSource(数据源包)、object(对象包)和support(支持包)

                              

                                          图片来源于www.itheima.com

JdbcTemplate

JdbcTemplate是Spring JDBC的核心类,针对数据库的操作,Spring框架提供了JdbcTemplate类,该类是Spring框架数据抽象层的基础。

常用方法:

                                          图片来源于www.itheima.com

 

execute()方法测试:

创建数据库,这里我用到的数据库是mysql,相应的数据库驱动以及jar包如下图所示:

 

然后创建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-4.3.xsd">

<!-- 1.配置数据源 -->

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<!-- 数据库驱动 -->

<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>

<!-- 连接数据库的url-->

<property name="url" value="jdbc:mysql://localhost:3306/spring"></property>

<!-- 连接数据库的用户名-->

<property name="username" value="root"></property>

<!-- 连接数据库的密码-->

<property name="password" value="123456"></property>

</bean>

 

<!-- 2.配置JDBC模板 -->

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

     <!--  默认必须使用数据源-->

     <property name="dataSource" ref="dataSource"></property>

    </bean>   

    

 

 </beans>

在数据库中创建一张表,我使用的工具是Navicat

 

编写测试类JdbcTemplateTest:

package cn.edu.jdbc;

 

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import org.springframework.jdbc.core.JdbcTemplate;

 

public class JdbcTemplateTest {

// //使用execute()方法建表

public static void main(String[] args) {

ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");

//获取JdbcTemplate实例

JdbcTemplate jdbcTemplateTest=(JdbcTemplate) applicationContext.getBean("jdbcTemplate");

//使用excute方法执行sql语句,创建用户账户管理表account

jdbcTemplateTest.execute("create table account("+

"id int primary key auto_increment,"+

"username varchar(50),"+

"balance double)");

System.out.println("账户表accunt创建成功");

}

}

运行结果和数据库变更后的结果如下

 

 

 

updata()测试,插入删除更新

新建Account类,类中有表中的属性值

package cn.edu.jdbc;

 

public class Account {

private Integer id;//账户id

private String username;//用户名

private double balance;//账户余额

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public double getBalance() {

return balance;

}

public void setBalance(double balance) {

this.balance = balance;

}

@Override

public String toString() {

return "Account [id=" + id + ", username=" + username + ", balance=" + balance + "]";

}

 

}

 

新建AccountDao接口

package cn.edu.jdbc;

 

public interface AccountDao {

 

//添加

public int addAccount(Account account);

//更新

public int updataAccount(Account account);

//删除

public int deleteAccount(int id);

}

新建AccountDaoImpl类实现Account中的方法

package cn.edu.jdbc;

 

import org.springframework.jdbc.core.JdbcTemplate;

 

public class AccountDaoImpl implements AccountDao {

 

// 声明JdbcTemplate属性及其setter

private JdbcTemplate jdbcTemplate;

 

public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {

this.jdbcTemplate = jdbcTemplate;

}

 

// 添加账户

@Override

public int addAccount(Account account) {

// 定义sql

String sql = "insert into account(username,balance) value(?,?)";

// 定义数组来存放sql语句中的参数

Object[] obj = new Object[] { account.getUsername(), account.getBalance() };

//执行添加操作后返回的受影响的行数

int num = this.jdbcTemplate.update(sql, obj);

return num;

}

 

// 更新账户

@Override

public int updataAccount(Account account) {

 

String sql = "update account set username=? , balance=? where id=?";

// 定义数组来存放sql语句中的参数

Object[] params = new Object[] {account.getUsername(), account.getBalance(), account.getId() };

//执行更新操作后返回的受影响的行数

int num = this.jdbcTemplate.update(sql, params);

return num;

 

}

 

// 删除账户

@Override

public int deleteAccount(int id) {

String sql = "delete from account where id=?";

//执行删除操作后返回的受影响的行数

int num = this.jdbcTemplate.update(sql, id);

return num;

}

 

}

配置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-4.3.xsd">

<!-- 1.配置数据源 -->

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<!-- 数据库驱动 -->

<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>

<!-- 连接数据库的url-->

<property name="url" value="jdbc:mysql://localhost:3306/spring"></property>

<!-- 连接数据库的用户名-->

<property name="username" value="root"></property>

<!-- 连接数据库的密码-->

<property name="password" value="123456"></property>

</bean>

 

<!-- 2.配置JDBC模板 -->

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

     <!--  默认必须使用数据源-->

     <property name="dataSource" ref="dataSource"></property>

    </bean>   

    <!-- 定义id为accountDao的Bean -->

<bean id="accountDao" class="cn.edu.jdbc.AccountDaoImpl">

<!-- 将jdbcTemplate注入到accountDao实例中 -->

<property name="jdbcTemplate" ref="jdbcTemplate"></property>

</bean>

 </beans>

新建测试类JdbcTemplateTest

package cn.edu.jdbc;

 

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import org.springframework.jdbc.core.JdbcTemplate;

 

public class JdbcTemplateTest {

// //使用execute()方法建表

public static void main(String[] args) {

ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");

//获取JdbcTemplate实例

JdbcTemplate jdbcTemplateTest=(JdbcTemplate) applicationContext.getBean("jdbcTemplate");

//使用excute方法执行sql语句,创建用户账户管理表account

jdbcTemplateTest.execute("create table account("+

"id int primary key auto_increment,"+

"username varchar(50),"+

"balance double)");

System.out.println("账户表accunt创建成功");

}

/**

 *

 * 学习junit4测试

 *

 */

@Test

public  void mainTest() {

ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");

//获取JdbcTemplate实例

JdbcTemplate jdbcTemplateTest=(JdbcTemplate) applicationContext.getBean("jdbcTemplate");

//使用excute方法执行sql语句,创建用户账户管理表account

jdbcTemplateTest.execute("create table account("+

"id int primary key auto_increment,"+

"username varchar(50),"+

"balance double)");

System.out.println("账户表accunt创建成功");

}

 

@Test

public void addAccountTest(){

ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");

//获取accountDao实例

AccountDao accountDao=(AccountDao) applicationContext.getBean("accountDao");

//创建Account对象并向Account对象中添加数据

Account account=new Account();

account.setUsername("user");

account.setBalance(1000.00);

//执行addAccount方法并获取返回结果

int num = accountDao.addAccount(account);

if(num>0)

System.out.println("成功插入了"+num+"条数据");

else

System.out.println("插入失败");

}

@Test

public void updataAccountTest(){

ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");

//获取accountDao实例

AccountDao accountDao=(AccountDao) applicationContext.getBean("accountDao");

//创建Account对象并向Account对象中添加数据

Account account=new Account();

account.setId(1);

account.setUsername("user01");

account.setBalance(2000.00);

//执行

int num =accountDao.updataAccount(account);

if(num>0)

System.out.println("成功更新了"+num+"条数据");

else

System.out.println("更新失败");

}

@Test

public void deleteAccountTest(){

ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");

//获取accountDao实例

AccountDao accountDao=(AccountDao) applicationContext.getBean("accountDao");

Account account=new Account();

account.setId(3);

int num =accountDao.deleteAccount(account.getId());

if(num>0)

System.out.println("成功删除了"+num+"条数据");

else

System.out.println("删除失败");

}

 

 

}

使用junit4进行单元测试,插入删除更新操作均成功。

query()进行查询

                                          图片来源于www.itheima.com

 

在表中随意添加几条记录,然后在AccountDaoImpl实现类中加入如下代码,需要注意的是单条记录查询是返回的是一个Account对象,我的Account类中的属性与数据库的关键字段是对应的,而全部查询时返回的是一个Account类型的List数组,使用foreach遍历即可。参数中使用的RowMapper需要按照代码所示的固定格式写,目的是为了返回Account类型的对象或者数组,不要过于复杂化的去理解它。

//通过id查询账户数据

@Override

public Account findAccountById(int id) {

String sql="select * from account where id=?";

//创建一个新的BeanPropertyRowMapper对象

RowMapper<Account> rowMapper=new BeanPropertyRowMapper<Account>(Account.class);

//将id绑定到sql语句中,通过RowMapper返回一个Object类型的单行记录

return this.jdbcTemplate.queryForObject(sql, rowMapper, id);

}

//查询所有账户信息

@Override

public List<Account> findAllAccount() {

String sql="select * from account";

RowMapper<Account> rowMapper=new BeanPropertyRowMapper<Account>(Account.class);

//执行查询

return this.jdbcTemplate.query(sql, rowMapper);

 

}

测试类JdbcTemplateTest中添加如下代码进行单元测试:

@Test

public void findAccountByIdTest(){

ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");

//获取accountDao实例

AccountDao accountDao=(AccountDao) applicationContext.getBean("accountDao");

Account account = accountDao.findAccountById(4);

System.out.println(account);

//System.out.println("id="+account.getId()+",username="+account.getUsername()+",balance="+account.getBalance());

}

 

@Test

public void findAllAccountTest(){

ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");

//获取accountDao实例

AccountDao accountDao=(AccountDao) applicationContext.getBean("accountDao");

List<Account> accountList=accountDao.findAllAccount();

//循环输出集合中的对象

for (Account account : accountList) {

System.out.println(account);

}

}

以上代码进行单元测试时均可以正确运行,多调试,才能在错误中学到东西。

 

本博客仅供个人学习,请勿用于商业用途。

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用JdbcTemplate结合SpringSpring MVC可以更加方便地实现学生表student的增删改查。以下是一个简单的示例,演示如何使用JdbcTemplateSpringSpring MVC实现学生表的增删改查。 首先,你需要按照上述提到的步骤配置数据库连接和创建`Student`类。 接下来,你可以创建一个`StudentController`类来处理学生表的增删改查请求: ```java @Controller @RequestMapping("/student") public class StudentController { @Autowired private StudentService studentService; @GetMapping("/list") public String getAllStudents(Model model) { List<Student> students = studentService.getAllStudents(); model.addAttribute("students", students); return "studentList"; } @GetMapping("/{id}") public String getStudentById(@PathVariable int id, Model model) { Student student = studentService.getStudentById(id); model.addAttribute("student", student); return "studentDetail"; } @GetMapping("/add") public String showAddForm(Model model) { Student student = new Student(); model.addAttribute("student", student); return "addStudentForm"; } @PostMapping("/add") public String addStudent(@ModelAttribute("student") Student student) { studentService.addStudent(student); return "redirect:/student/list"; } @GetMapping("/{id}/edit") public String showEditForm(@PathVariable int id, Model model) { Student student = studentService.getStudentById(id); model.addAttribute("student", student); return "editStudentForm"; } @PostMapping("/{id}/edit") public String updateStudent(@PathVariable int id, @ModelAttribute("student") Student student) { student.setId(id); studentService.updateStudent(student); return "redirect:/student/list"; } @GetMapping("/{id}/delete") public String deleteStudent(@PathVariable int id) { studentService.deleteStudent(id); return "redirect:/student/list"; } } ``` 在上述代码,`StudentController`类使用`StudentService`来处理学生表的增删改查操作,并通过Spring MVC的注解来定义不同的请求处理方法。 接下来,你可以创建一个`StudentService`类来实现学生表的增删改查逻辑: ```java @Service public class StudentService { @Autowired private StudentDao studentDao; public List<Student> getAllStudents() { return studentDao.getAllStudents(); } public Student getStudentById(int id) { return studentDao.getStudentById(id); } public void addStudent(Student student) { studentDao.addStudent(student); } public void updateStudent(Student student) { studentDao.updateStudent(student); } public void deleteStudent(int id) { studentDao.deleteStudent(id); } } ``` 在上述代码,`StudentService`类调用`StudentDao`接口定义的方法来实现学生表的增删改查操作。 最后,你可以使用Spring的配置文件来配置JdbcTemplate和其他相关的组件。假设你使用的是XML配置方式,你可以创建一个名为`applicationContext.xml`的配置文件,并添加以下配置: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 配置数据库连接 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/db_name" /> <property name="username" value="db_username" /> <property name="password" value="db_password" /> </bean> <!-- 配置JdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 扫描注解 --> <context:component-scan base-package="com.example.yourpackage" /> </beans> ``` 在上述配置,你需要将`com.example.yourpackage`替换为你实际的包名。 以上是一个简单的示例,你可以根据你的实际需求进行适当的修改和扩展。希望对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值