Spring JDBC配置与讲解

Spring JDBC配置与讲解

目录

一、Spring JDBC概述1、Spring JDBC需要配置的依赖2、Spring配置项文件配置

二、Spring JDBC的使用1、Spring JDBC的增加操作2、Spring JDBC的修改操作3、Spring JDBC的删除操作4、Spring JDBC的查询操作

三、Spring JDBC的事务1、xml的形式进行事务2、@Transactional注解

一、Spring JDBC概述

Spring Data JDBC 是 Spring Data 项目的一部分,它提供了一种简化的数据访问方式,用于与关系型数据库进行交互。与传统的 ORM 框架相比,Spring Data JDBC 更加轻量级,并且更注重直接映射数据库表结构和 SQL 查询的控制。它基于 JDBC 驱动程序,提供了一套简洁的 API 和注解,使开发人员能够通过简单的 Java 对象来表示数据库表,并通过自动生成的 SQL 语句执行常见的 CRUD 操作。Spring Data JDBC 还支持复杂的关联关系、查询方法的定义和自定义 SQL 查询等功能,使开发人员能够更灵活地操作数据库。

1、Spring JDBC需要配置的依赖

我们创建好maven项目之后,需要对maven项目添加相对应的依赖,在本文章当中如果我们想要使用Spring JDBC的时候需要添加如下的依赖 :

junit

junit

3.8.1

test

org.springframework

spring-jdbc

5.3.21

mysql

mysql-connector-java

5.1.6

org.projectlombok

lombok

1.18.30

org.springframework

spring-context

5.0.2.RELEASE

commons-logging

commons-logging

1.2

org.springframework

spring-test

5.0.2.RELEASE

log4j

log4j

1.2.12

junit

junit

4.12

test

aopalliance

aopalliance

1.0

org.springframework

spring-aspects

5.0.2.RELEASE

org.aspectj

aspectjweaver

1.8.3

其中使用jdbc的核心依赖是:

org.springframework

spring-jdbc

5.3.21

mysql

mysql-connector-java

5.1.6

使用AOP的依赖是:

aopalliance

aopalliance

1.0

org.springframework

spring-aspects

5.0.2.RELEASE

org.aspectj

aspectjweaver

1.8.3

2、Spring配置项文件配置

我们使用Spring AOP、SpringIoC、Spring JDBC的情况下,我们需要在maven项目中的resources文件下创建Spring的配置项文件,并且进行配置。

Spring.xml的配置如下:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:aop="http://www.springframework.org/schema/aop"

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/aop

http://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

其中: xmlns:tx="http://www.springframework.org/schema/tx"是为了防止事务爆红把必须添加的,不添加使用事务的时候会爆红。 需要在Spring配置自己的数据库,以及配置jdbcTemplate,需要将这两部分交给IoC容器管理。

二、Spring JDBC的使用

该项目的目录如下创建: entity目录中查询返回来的结果。 dao层用来存放执行和数据库交互的文件的目录。 User类创建如下:

package com.example.entity;

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

import java.util.Date;

@Data

@AllArgsConstructor

@NoArgsConstructor

public class User {

private Integer id;

private String username;

private Date birthday;

private String sex;

private String address;

}

如果想要使用lombok的情况下,就得按照上面情况引入lombok依赖: 建立的数据库可执行代码如下(需要自己建立好数据库,这里只提供创建表的sql语句):

CREATE TABLE `user` (

`id` int(11) NOT NULL auto_increment,

`username` varchar(32) NOT NULL COMMENT '用户名称',

`birthday` datetime default NULL COMMENT '生日',

`sex` char(1) default NULL COMMENT '性别',

`address` varchar(256) default NULL COMMENT '地址',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (1,'老王','2018-02-27

17:47:08','男','北京'),(2,'熊大','2018-03-02 15:09:37','女','上海'),(3,'熊二','2018-03-04

11:34:34','女','深圳'),(4,'光头强','2018-03-04 12:04:06','男','广州');

Test测试文件:

public class Test1 {

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

private JdbcTemplate jdbcTemplate = (JdbcTemplate) applicationContext.getBean(JdbcTemplate.class);

}

测试文件得利用DI将jdbcTemplate加载到当前文件当中

1、Spring JDBC的增加操作

jdbc中的新增操作:

@Test

public void add(){

String sql = "insert into user(username,sex,address) values('as','男','上海')";

jdbcTemplate.execute(sql);

}

2、Spring JDBC的修改操作

@Test

public void update(){

String sql = "update user set username ='刘纯亚' where id = 1";

jdbcTemplate.update(sql);

}

3、Spring JDBC的删除操作

@Test

public void delete(){

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

jdbcTemplate.update(sql,1);

}

4、Spring JDBC的查询操作

@Test

public void searchAll(){

String sql = "select * from user";

List userList = jdbcTemplate.query(sql, new BeanPropertyRowMapper(User.class));

for(User user:userList){

System.out.println(user);

}

}

三、Spring JDBC的事务

案列A对B转账,A的钱少100,B的钱多100,两者具有原子性,要不同时成功,要不同时失败。数据库中的数据如下:

1、xml的形式进行事务

对Spring.xml进行修改:

用来加载DataSourceTransactionManager,上面的操作是通过AOP对原本的事务进行增强,而不是通过修改原本的代码。 AOP操作:

Adao和Adaoimpl中的代码如下:

package com.example.dao.impl;

import com.example.dao.Adao;

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

import org.springframework.jdbc.core.JdbcTemplate;

@NoArgsConstructor

@Data

@AllArgsConstructor

public class AdaoImpl implements Adao {

private JdbcTemplate jdbcTemplate;

@Override

public void transfer(String A, String B, int money) {

String sql1 = "update peoplemoney set money = money-? where id = ?";

String sql2 = "update peoplemoney set money = money+? where id = ?";

jdbcTemplate.update(sql1,money,A);

jdbcTemplate.update(sql2,money,B);

}

}

package com.example.dao;

public interface Adao {

public void transfer(String A,String B,int money);

}

测试类中的代码:

@Test

public void m1(){

Adao adaoImpl = (Adao) applicationContext.getBean("adaoImpl");

adaoImpl.transfer("1","2",100);

System.out.println(adaoImpl);

}

当事务没有回滚的时候,可以实现A减少100,B增加100。 自动添加错误之后; 测试结果: 数据库中的数据没有发生改变出现了事务回滚。

2、@Transactional注解

AdaoImpl中的代码修改如下:

package com.example.dao.impl;

import com.example.dao.Adao;

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;

@Service

@NoArgsConstructor

@Data

@AllArgsConstructor

public class AdaoImpl implements Adao {

private JdbcTemplate jdbcTemplate;

@Override

@Transactional(rollbackFor = Exception.class)

public void transfer(String A, String B, int money) {

String sql1 = "update peoplemoney set money = money-? where id = ?";

String sql2 = "update peoplemoney set money = money+? where id = ?";

jdbcTemplate.update(sql1,money,A);

System.out.println(1/0);

jdbcTemplate.update(sql2,money,B);

}

}

Spring.xml中的代码修改如下:

注释掉AOP等保留DataSourceTransactionManager,配合@Transactional使用就可以完成事务。

相关推荐

暗黑破坏神2重制版全剧情流程攻略
365bet官网提现说维护

暗黑破坏神2重制版全剧情流程攻略

📅 09-08 👁️ 1048
qq的语音说话不能用了怎么办 QQ语音说话无法使用
beat365中文官方网站

qq的语音说话不能用了怎么办 QQ语音说话无法使用

📅 10-20 👁️ 5627
猫眼美甲需要多久才能完成?
mobile365官网是多少

猫眼美甲需要多久才能完成?

📅 08-07 👁️ 6003