我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaSpring的数据库开发详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaSpring的数据库开发详解

1.Spring JDBC

1.1 Spring JdbcTemplate的解析

针对数据库的操作,Spring框架提供了JdbcTemplate类,该类是Spring框架数据抽象层的基础,其他更高层次的抽象类是构建于JdbcTemplate类之上的。可以说,JdbcTemplate类是Spring JDBC的核心类。JdbcTemplate类的继承关系十分简单。它继承自抽象类JdbcAccessor,同时实现了JdbcOperations接口。

(1)JdbcOperations接口定义了在JdbcTemplate类中可以使用的操作集合,包括添加、修改、查询和删除等操作。

(2)JdbcTemplate类的直接父类是JdbcAccessor,该类为子类提供了一些访问数据库时使用的公共属性,具体如下。

  • DataSource:其主要功能是获取数据库连接,具体实现时还可以引入对数据库连接的缓冲池和分布事务的支持,它可以作为访问数据库资源的标准接口。
  • SQLExceptionTranslatororg.springframework.jdbc.support.SQLExceptionTranslator接口负责对SQLException进行转译工作。通过必要的设置或者获取SQLExceptionTranslator中的方法可以使JdbcTemplate在需要处理SQLException时委托SQLExceptionTranslator的实现类来完成相关的转译工作。

1.2 Spring JDBC的配置

Spring JDBC模块主要由4个包组成,分别是core(核心包)、dataSource(数据包)、object(对象包)和support(支持包)。关于这4个包的具体说明如表所示。

Spring对数据库的操作都封装在了这几个包中,如果想要使用Spring JDBC,就需要对其进行配置。在Spring中,JDBC的配置是在配置文件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">
    <!-- 1.配置数据源 -->
    <bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverMangerDataSource">
        <!-- 数据库驱动 -->
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <!-- 连接数据库url -->
        <property name="url" value="jdbc:mysql://localhost:3306/db_spring"/>
        <!-- 连接数据库的用户名 -->
        <property name="username" value="root"/>
        <!-- 连接数据库的密码 -->
        <property name="password" value="root"/>
    </bean>
    <!-- 2.配置JDBC模板 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.jdbcTemplate">
        <!-- 默认必须使用数据源 -->
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- 3.配置注入类 -->
    <bean id="xxx" class="xxx">
        <!-- 默认必须使用数据源 -->
        <property name="jdbcTemplate" ref="jdbcTemplate"/>
    </bean>
</beans>

在上述代码中定义了3个Bean,分别是dataSource、jdbcTemplate和需要注入类的Bean。其中dataSource对应的org.springframework.jdbc.datasource.DriverManagerDataSource类用于对数据源进行配置,jdbcTemplate对应的org.springframework.jdbc.core.JdbcTemplate类中定义了JdbcTemplate的相关配置。上述代码中dataSource的配置就是JDBC连接数据库时所需的4个属性,如表所示。

定义jdbcTemplate时,需要将dataSource注入jdbcTemplate中,而其他需要使用jdbcTemplate的Bean,也需要将jdbcTemplate注入该Bean中(通常注入Dao类中,在Dao类中进行与数据库的相关操作)。

2 Spring JdbcTemplate的常用方法

在JdbcTemplate类中提供了大量更新和查询数据库的方法,我们就是使用这些方法来操作数据库的。

2.1 execute()——执行SQL语句

execute(String sql)方法能够完成执行SQL语句的功能。

【示例4-1】下面以创建数据表的SQL语句为例演示此方法的使用,具体步骤如下。

 步骤01 在MySQL中创建一个名为db_spring的数据库。

步骤02 在idea中创建一个名为chapter00的Web项目。

步骤03 在class="lazy" data-src目录下创建配置文件applicationContext.xml,在该文件中配置id为dataSource的数据源Bean和id为jdbcTemplate的JDBC模板Bean,并将数据源注入JDBC模板中。

<?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">
    <!-- 1.配置数据源 -->
    <bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverMangerDataSource">
        <!-- 数据库驱动 -->
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <!-- 连接数据库url -->
        <property name="url" value="jdbc:mysql://localhost:3306/db_spring"/>
        <!-- 连接数据库的用户名 -->
        <property name="username" value="root"/>
        <!-- 连接数据库的密码 -->
        <property name="password" value="root"/>
    </bean>
    <!-- 2.配置JDBC模板 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.jdbcTemplate">
        <!-- 默认必须使用数据源 -->
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

步骤04 在class="lazy" data-src目录下创建一个com.ssm.jdbc包,在该包中创建测试类JdbcTemplateTest。在该类的main()方法中通过Spring容器获取在配置文件中定义的JdbcTemplate实例,然后使用实例的execute(String s)方法执行创建数据表的SQL语句。

package com.ssm.jdbc;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;



public class JdbcTemplateTest {
    public static void main(String[] args) {
        //加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取jdbcTemplate实例
        JdbcTemplate jdbcTemplate =(JdbcTemplate)applicationContext.getBean("jdbcTemplate");
        //使用excute()方法执行sql语句,创建用户表user
        jdbcTemplate.execute("create table user(" +
                "id int primary key auto_increment," +
                "username varchar(40)," +
                "password varchar(40))");
    }
}

2.2 update()——更新数据

update()方法可以完成插入、更新和删除数据的操作。在JdbcTemplate类中提供了一系列update()方法,其常用格式如表所示。

【示例4-2】通过一个用户管理的案例来演示update()方法的使用,具体步骤如下。

步骤01 在chapter00项目的com.ssm.jdbc包中创建User类,在该类中定义id、username和password属性,以及其对应的getter()/setter()方法。

package com.ssm.jdbc;


// User实体类
public class User {
    private Integer id; //用户id
    private String username; //用户名
    private String password; //密码
    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 String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String toString() {
        return "User [id=" +id+ ", username=" +username+", password=" + password + "]";
    }
}

步骤02 在com.ssm.jdbc包中创建接口UserDao,并在接口中定义添加、更新和删除用户的方法。

package com.ssm.jdbc;

public interface UserDao {
    //添加用户方法
    public int addUser(User user);
    //更新用户方法
    public int updateUser(User user);
    //删除用户方法
    public int deleteUser(int id);
}

步骤03 在com.ssm.jdbc包中创建UserDao接口的实现类UserDaoImpl,并在类中实现添加、更新和删除账户的方法。

package com.ssm.jdbc;

import org.springframework.jdbc.core.JdbcTemplate;



public class UserDaoImpl implements UserDao {
    private JdbcTemplate jdbcTemplate;
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
    //添加用户方法
    public int addUser(User user) {
        String sql = "insert into user(username,password) value(?,?)";
        Object[] obj = new Object[] {
            user.getUsername(),
            user.getPassword()
        };
        int num = this.jdbcTemplate.update(sql,obj);
        return num;
    }
    //更新用户方法
    public int updateUser(User user) {
        String sql = "update user set username=? ,password=? where id=?";
        Object[] params = new Object[] {
                user.getUsername(),
                user.getPassword(),
                user.getId()
        };
        int num = this.jdbcTemplate.update(sql,params);
        return num;
    }
    //删除用户方法
    public int deleteUser(int id) {
        String sql = "delete from user where id=?";
        int num = this.jdbcTemplate.update(sql,id);
        return num;
    }
}

添加、更新和删除操作的实现步骤类似,只是定义的SQL语句有所不同。

步骤04 在applicationContext.xml中定义一个id为userDao的Bean,该Bean用于将jdbcTemplate注入userDao实例中。

 <!-- 定义id为 UserDao 的 Bean -->
    <bean id="UserDao" class="com.ssm.jdbc.UserDaoImpl">
        <!-- 将jdbcTemplate 注入userDao实例中 -->
        <property name="jdbcTemplate" ref="jdbcTemplate"/>
    </bean>

步骤05 在测试类JdbcTemplateTest中添加一个测试方法addUserTest()。该方法主要用于添加用户信息。

package com.ssm.jdbc;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;



public class JdbcTemplateTest {
    
    @Test
    public void addUserTest() {
        //加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取userDao实例
        UserDao userDao = (UserDao)applicationContext.getBean("UserDao");
        //创建User实例
        User user = new User();
        //创建User实例属性值
        user.setUsername("zhangsan");
        user.setPassword("123456");
        //添加用户
        int num = userDao.addUser(user);
        if (num>0) {
            System.out.println("成功插入了" + num + "条数据。");
        } else {
            System.out.println("添加用户失败!");
        }
    }
}

获取UserDao的实例后又创建了User对象,并向User对象中添加了属性值。然后调用UserDao对象的addUser()方法向数据表中添加一条数据。最后,通过返回的受影响的行数来判断数据是否插入成功。运行后,控制台的输出结果如图所示。

此时再次查询数据库中的user表,其结果如图所示。从中可以看出,使用JdbcTemplate的update()方法已成功地向数据表中插入了一条数据。

步骤06 执行完插入操作后,接下来使用JdbcTemplate类的update()方法执行更新操作。在测试类JdbcTemplateTest中添加一个测试方法updateUser Test()。

    @Test
    public void updateUserTest() {
        //加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取userDao实例
        UserDao userDao = (UserDao)applicationContext.getBean("UserDao");
        User user = new User();
        user.setId(1);
        user.setUsername("lisi");
        user.setPassword("111111");
        //更新用户
        int num = userDao.updateUser(user);
        if (num>0) {
            System.out.println("更新成功了" + num + "条数据。");
        } else {
            System.out.println("更新用户失败!");
        }
    }

与addUserTest()方法相比,更新操作的代码增加了id属性值的设置,并在将用户名和密码修改后调用了UserDao对象中的updateUser()方法执行对数据表的更新操作。使用JUnit4运行方法后,再次查询数据库中的user表,其结果如图所示。从中可以看出,使用update()方法已成功更新了user表中id为1的用户的用户名和密码。

步骤07 在测试类JdbcTemplateTest中添加一个测试方法deleteUserTest()来执行删除操作。

@Test
    public void deleteUserTest() {
        //加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取userDao实例
        UserDao userDao = (UserDao)applicationContext.getBean("UserDao");
        //删除用户
        int num = userDao.deleteUser(1);
        if (num>0) {
            System.out.println("成功删除了" + num + "条数据。");
        } else {
            System.out.println("删除用户失败!");
        }
    }

在上述代码中,获取了UserDao的实例后,执行实例中的deleteUser()方法来删除id为1的数据。

运行方法后,查询user表中的数据,其结果如图所示。从中可以看出,已成功通过deleteUser()方法删除了id为1的数据。由于user表中只有一条数据,因此删除后表中数据为空。

2.3 query()——查询数据

JdbcTemplate类中还提供了大量的query()方法来处理各种对数据库表的查询操作。其中常用的几个query()方法格式如表所示。

【示例4-3】通过一个具体的案例演示query()方法的使用,其实现步骤如下。

步骤01 向数据表user中插入几条数据,插入后user表中的数据如图所示。

步骤02 在UserDao中分别创建一个通过id查询单个用户和查询所有用户的方法。

 	//通过id查询用户
    public User findUserById(int id);
    //查询所有用户
    public List<User> findAllUser();

步骤03 在UserDao接口的实现类UserDaoImpl中实现接口中的方法,并使用query()方法分别进行查询。

  //通过id查询用户数据信息
    public User findUserById(int id) {
        String sql = "select * from user where id=?";
        RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);
        return this.jdbcTemplate.queryForObject(sql,rowMapper,id);
    }

    //查询所有用户数据信息
    public List<User> findAllUser() {
        String sql = "select * from user";
        RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);
        return this.jdbcTemplate.query(sql,rowMapper);
    }

在上面两个方法代码中,BeanPropertyRowMapper是RowMapper接口的实现类,可以自动地将数据表中的数据映射到用户自定义的类中(前提是用户自定义类中的字段要与数据表中的字段相对应)。创建完BeanPropertyRowMapper对象后,在findUserById()方法中通过queryForObject()方法返回了一个Object类型的单行记录,而在findAllUser()方法中通过query()方法返回了一个结果集合。

步骤04 在测试类 JdbcTemplateTest中添加一个测试方法findUserByIdTest()来测试条件查询,其代码如下所示。

    @Test
    public void findUserByIdTest() {
        //加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取userDao实例
        UserDao userDao = (UserDao)applicationContext.getBean("UserDao");
        //通过id查询用户数据信息
        User user = userDao.findUserById(5);
        System.out.println(user);
    }

上述代码通过执行findUserById()方法获取了id为1的对象信息,并通过输出语句输出。运行后,控制台的输出结果如图所示。

 步骤05 在测试类JdbcTemplateTest中添加一个测试方法findAllUserTest()来测试所有用户信息。

    @Test
    public void findAllUserTest() {
        //加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取userDao实例
        UserDao userDao = (UserDao)applicationContext.getBean("UserDao");
        //查询所有用户数据信息
        List<User> list = userDao.findAllUser();
        //循环输出用户信息
        for (User user:list) {
            System.out.println(user);
        }
    }

在上述代码中,调用了UserDao对象的findAllUser()方法查询所有用户账户信息,并通过for循环输出查询结果。运行findAllUser()方法后,控制台的显示信息如图所示,数据表user中的4条记录都已经被查询出来。

到此这篇关于Java Spring的数据库开发详解的文章就介绍到这了,更多相关Spring数据库开发内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaSpring的数据库开发详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaSpring的数据库开发详解

这篇文章主要介绍了Spring的数据库开发,主要围绕SpringJDBC和SpringJdbcTemplate两个技术来讲解,文中有详细的代码示例,需要的小伙伴可以参考一下
2023-05-17

详解全栈开发Vercel数据库存储服务

这篇文章主要为大家介绍了全栈开发Vercel数据库存储服务功能使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-18

【云开发】小程序端操作数据库详解

文章目录 云数据库云数据库简介手动操作数据库小程序端操作数据库🎲添加数据🎲删除数据🎲修改数据🎲查询数据 云数据库 云数据库简介 云开发中的数据库是
2023-08-18

详解MySQL数据库之触发器

1 引言本文是对MySQL中触发器的总结,从触发器概念出发,结合实例对创建触发器、使用触发器、删除触发器进行介绍。 2 触发器简介MySQL触发器和存储过程一样,都是嵌入到MySQL的一段程序。触发器是由事件来触发某个操作,这些事件包括IN
2022-05-20

阿里云数据库开发技术详解与实战应用

随着互联网技术的快速发展,数据成为了企业的重要资产。因此,数据库的开发和管理成为了企业面临的重要问题。本文将深入探讨阿里云数据库开发的相关技术,包括数据库的种类、特点、优势,以及如何进行数据库的开发和管理。一、阿里云数据库概述阿里云数据库是阿里云提供的数据库服务,包括关系型数据库、NoSQL数据库、分布式数据库等
阿里云数据库开发技术详解与实战应用
2023-10-28

Android开发之数据的存储方式详解

在Android中,数据的存储分为两种方式: 1、直接以文件的形式存储在目录中 2、以json格式存储在数据库中 将数据以文件的存储又分为两种方式: 1、生成.txt文件 2、生成xml文件 那么今天就来详细的说一下以文件的形式存储,由于没
2022-06-06

阿里云数据库并发操作详解

阿里云数据库是阿里云推出的一种云数据库服务,具有高效、稳定、安全等特性。在多用户同时访问数据库时,可能会出现并发操作的问题。本篇文章将详细解释阿里云数据库的并发操作。一、什么是数据库并发并发是指在同一时间内,多个用户同时对同一数据库资源进行操作的现象。在多用户同时访问数据库时,可能会出现并发操作的问题。例如,用户
阿里云数据库并发操作详解
2023-11-07

VB6.0数据库开发实例

以下是一个使用VB6.0进行数据库开发的示例:首先,你需要创建一个新的VB6.0项目。接下来,你需要添加一个数据库。可以使用Microsoft Access来创建一个简单的数据库。在VB6.0中,你可以使用ADO(ActiveX Data
2023-09-20

数据库的范式详解

关系数据库设计之时是要遵守一定的规则的。尤其是数据库设计范式 现简单介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,另有第四范式和第五范式留到以后再介绍。  在你设计数据库之时,若能符合这几个范式,你就是数据库设计的高手。  第一范式
数据库的范式详解
2018-11-21

Oracle数据库事务的开启与结束详解

目录前言commitTruncate – DDLselect xxx for updateselect…for update使用方法失败的DML 和 exitDCL总结 前言Oracle的事务开始于一个DML语句
2022-06-23

GoLangBoltDB数据库详解

这篇文章主要介绍了GoLangBoltDB数据库,boltdb是使用Go语言编写的开源的键值对数据库,boltdb存储数据时key和value都要求是字节数据,此处需要使用到序列化和反序列化
2023-02-03

AndoridSQLite数据库开发中如何创建SQLite数据库

AndoridSQLite数据库开发中如何创建SQLite数据库,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。AndoridSQLite数据库开发基础教程 创建SQLite数据
2023-06-05

MySQL数据库的数据类型decimal详解

在MySQL数据库中,decimal数据类型用于存储精确的小数值。它比其他浮点类型(如float和double)更适合用于存储货币金额、利率等需要精确计算的数据。decimal数据类型的语法如下:DECIMAL(M, D)其中,M是总的数字
2023-09-14

阿里云数据库的开发公司

简介阿里云数据库是阿里巴巴集团旗下的一款云数据库产品,提供了稳定可靠的数据库服务,广泛应用于各种互联网应用场景。作为一款云数据库产品,阿里云数据库不仅具备高性能和高可用性,还提供了丰富的功能和灵活的扩展能力,成为众多企业和开发者首选的数据库解决方案。1.阿里云数据库的开发背景阿里云数据库的开发始于2013年,由阿里云团
阿里云数据库的开发公司
2023-12-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录