数据库使用MySQL 5.7.18版本。

装配DataSource的步骤:
1.加入数据库驱动

pom.xml:

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.study.springboot</groupId>
<artifactId>spring-boot-jdbc</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging> <name>springboot</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.3.RELEASE</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

2.配置
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot
spring.datasource.username=root
spring.datasource.password=adminroot

application.properties:

 spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot
spring.datasource.username=root
spring.datasource.password=adminroot

以上操作,springboot会自动装配好DataSource和JdbcTemplate,可以直接使用

 package com.study.spring_boot_jdbc.dao;

 import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository; @Repository
public class ProductDao { @Autowired
private JdbcTemplate jdbcTemplate; public void addProduct(String name){
String sql = "insert into product (pname) values ('" + name + "')";
jdbcTemplate.execute(sql);
} }
 @SpringBootApplication public class App {

     public static void main(String[] args) throws Exception {
ConfigurableApplicationContext context = SpringApplication.run(App.class,args);
DataSource ds = context.getBean(DataSource.class);
Connection conn = ds.getConnection();
System.out.println(conn.getCatalog());
System.out.println(context.getBean(JdbcTemplate.class));
conn.close();
System.out.println(ds.getClass());
context.close();
} }

如果不想使用Tomcat的DataSource,可以使用两种方式配置需要的数据源,步骤:

1.pom.xml 添加相关依赖

 <dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>

2.

a)spring.datasource.type配置项,可指定具体使用哪种数据源

默认支持Tomcat,Hikari,Dbcp,Dbcp2,Generic(1.5.3.RELEASE)

application.properties:

 spring.datasource.type=com.zaxxer.hikari.HikariDataSource

b)排除Tomcat的数据源

pom.xml:

         <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>

配置自定义DataSource,只需要装配一个DataSource到spring容器中即可

         <dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.31</version>
</dependency>
 @SpringBootConfiguration
public class DBConfiguration {
@Autowired
private Environment env;
@Bean
public DataSource createDataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setUrl(env.getProperty("spring.datasource.url"));
ds.setUsername(env.getProperty("spring.datasource.username"));
ds.setPassword(env.getProperty("spring.datasource.password"));
ds.setDriverClassName(env.getProperty("spring.datasource.driverClassName"));
return ds;
} }

事务:
首先要使用@EnableTransactionManagement启用对事务的支持
然后,在需要使用事务的方法上加上@Transactional
注意,默认只会对运行时异常进行事务回滚,非运行时异常不会回滚事务

APP.class:

 @SpringBootApplication
@EnableTransactionManagement
public class App { public static void main(String[] args) throws Exception {
ConfigurableApplicationContext context = SpringApplication.run(App.class,args); context.getBean(ProductDao.class).addProductBatch("TV","MP3","MP4"); System.out.println(ds.getClass());
context.close();
} }
 package com.study.spring_boot_jdbc.dao;

 import java.io.FileNotFoundException;

 import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional; @Repository
public class ProductDao { @Autowired
private JdbcTemplate jdbcTemplate; public void addProduct(String name){
String sql = "insert into product (pname) values ('" + name + "')";
jdbcTemplate.execute(sql);
} /**
* rollbackFor 设置对哪些异常进行回滚,默认是运行时异常
* noRollbackFor 设置哪些异常不回滚
* @param names
* @throws Exception
*/
@Transactional(noRollbackFor=NullPointerException.class)
public void addProductBatch(String ... names) throws Exception{
for (String name : names) {
String sql = "insert into product (pname) values ('" + name + "')";
jdbcTemplate.execute(sql);
if ("".equals("")) {
throw new NullPointerException();
}
} } }

注意,在需要使用事务的方法上加上@Transactional!!!

 package com.study.spring_boot_jdbc.dao;

 import java.io.FileNotFoundException;

 import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional; @Repository
public class ProductDao { @Autowired
private JdbcTemplate jdbcTemplate; public void addProduct(String name){
String sql = "insert into product (pname) values ('" + name + "')";
jdbcTemplate.execute(sql);
} @Transactional
public void addProductBatch(String ... names) throws Exception{
add(names); } @Transactional
public void add(String ... names) throws Exception{
for (String name : names) {
String sql = "insert into product (pname) values ('" + name + "')";
jdbcTemplate.execute(sql);
if ("".equals("")) {
throw new NullPointerException();
}
}
} }

若addProductBatch方法没有@Transactional,执行addProductBatch,事务不起作用。若是执行add,事务起作用。

SpringBoot学习(3) - jdbc的更多相关文章

  1. springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务

    springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...

  2. Springboot学习07-数据源Druid

    Springboot学习07-数据源Druid 关键字 Druid 前言 学习笔记 正文 1-Druid是什么 Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池.插件框架和SQL解析器 ...

  3. 尚硅谷springboot学习14-自动配置原理

    配置文件能配置哪些属性 配置文件能配置的属性参照 自动配置的原理 1).SpringBoot启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration 2).@Ena ...

  4. SpringBoot学习笔记(7):Druid使用心得

    SpringBoot学习笔记(7):Druid使用心得 快速开始 添加依赖 <dependency> <groupId>com.alibaba</groupId> ...

  5. SpringBoot学习笔记(10):使用MongoDB来访问数据

    SpringBoot学习笔记(10):使用MongoDB来访问数据 快速开始 本指南将引导您完成使用Spring Data MongoDB构建应用程序的过程,该应用程序将数据存储在MongoDB(基于 ...

  6. SpringBoot学习笔记(8):事物处理

    SpringBoot学习笔记(8):事物处理 快速入门 在传统的JDBC事务代码开发过程中,业务代码只有一部分,大部分都是与JDBC有关的功能代码,比如数据库的获取与关闭以及事务的提交与回滚.大量的t ...

  7. springboot 学习笔记(二)

    springboot 学习笔记(二) 快速创建一个springboot工程,并引入所需要的依赖 1.利用Spring initializr 来创建一个springboot项目,登陆http://sta ...

  8. SpringBoot学习笔记:动态数据源切换

    SpringBoot学习笔记:动态数据源切换 数据源 Java的javax.sql.DataSource接口提供了一种处理数据库连接的标准方法.通常,DataSource使用URL和一些凭据来建立数据 ...

  9. SpringBoot学习- 3、整合MyBatis

    SpringBoot学习足迹 1.下载安装一个Mysql数据库及管理工具,同类工具很多,随便找一个都可以,我在windows下做测试项目习惯使用的是haosql 它内部集成了MySql-Front管理 ...

随机推荐

  1. MapReduce-自动化运行配置

    1.打包时指定main  Class信息 注意:默认直接通过maven插件打成jar包中没有指定main class信息,因此在运行mapreduce的jar包时必须在指令后明确main class信 ...

  2. spring 与mybatis 整合

    步骤: pom文件添加依赖 创建包结构 添加application.yml, 配置数据库信息 使用mybatis-gennerator 生成三个文件 实体类 接口类 xml 文件 错误信息 xml 绑 ...

  3. 「CF86D」Powerful array 解题报告

    题面 给出一个\(n\)个数组成的数列\(a\),有\(t\)次询问,每次询问为一个\([l,r]\)的区间,求区间内每种数字出现次数的平方×数字的值 的和 思路: 直接上莫队咯 然后就T了 没学过莫 ...

  4. 还看不懂同事代码?快来补一波 Java 7 语法特性

    前言 Java 平台自出现到目前为止,已经 20 多个年头了,这 20 多年间 Java 也一直作为最流行的程序设计语言之一,不断面临着其他新兴编程语言的挑战与冲击.Java 语言是一种静态强类型语言 ...

  5. 03_常用的JS正则表达式54种形式类型

    1.由数字.26个英文字母或者下划线组成的字符串: ^[0-9a-zA-Z_]{1,}$ 2.非负整数(正整数 + 0 ): ^/d+$ 3. 正整数: ^[0-9]*[1-9][0-9]*$ 4.非 ...

  6. .gitignore 文件配置

    git 使用过程中,有许多文件或者文件夹是不希望更新到远程仓库了,因为他们比较占地方,这个时候我们可以利用 .gitignore 文件忽略文件. 按项目进行忽略 .gitignore 文件用于忽略文件 ...

  7. AcWing 251. 小Z的袜子| 分块+莫队

    传送门 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿. 终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命. 具体来说,小Z把这N只袜子从 ...

  8. LinkedHashMap与HashMap的使用比较

    现在由于项目需要,使用了LinkedHashMap,一开始由于很少用到Map,然后就直接使用了HashMap,在将数据成功存入之后取出来就出了问题,数据输出顺序没有按预期顺序输出,现在先看代码: 文件 ...

  9. 【转】Hive Data Manipulation Language

    Hive Data Manipulation Language Hive Data Manipulation Language Loading files into tables Syntax Syn ...

  10. 【5min+】 秋名山的竞速。 ValueTask 和 Task

    系列介绍 简介 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的. ...