mysql spring boot,SpringBoot操作Mysql数据库

前言

在上一篇文章中,我们搭建起了一个最简陋的SpringBoot Web应用,监听本地8080端口,输出一个页面。现在我们来进行进一步的操作,实现一个注册->登录功能,操作Mysql数据库。然后再简单地介绍一下部分SpringBoot的部分启动器(Starter)。

添加Mysql数据库驱动依赖

通过SpringBoot框架操作数据库有很多种方法,这里介绍一种简单且常用的方式,足够我们开发一套大中型的应用了。首先添加依赖如下:

mysql-connector-java作为连接mysql数据库的驱动,是最基础的模块。

spring-boot-starter-data-jpa是一个用于提供数据库JPA(即Java Persistence API)开发的模块,可以很方便地将Java对象关系映射到数据库存储。

我们接下来操作MySQL数据库便是通过JPA来进行的。我在此之前没有用过JPA,一直是手写SQL。对于一般情况下JPA能够很快处理业务逻辑,而针对一些复杂的查询,还是手写SQL来的好,后面也会介绍如何在JPA中使用SQL语句。

理清SpringBoot数据库操作基本概念

首先我们需要了解一些概念,除了上面提到的JPA,还有:

实体(Entity),也就是我们常用的JavaBean类,声明了一个数据表对应的属性。

数据访问对象(Data Access Object)即DAO,用于操控数据库的对象。

SpringBoot中,使用JPA操作数据库的一般处理流程如下:

- 编写Enity类

- 编写DAO接口

- 在DAO接口中编写findBy方法

- 在application.propreties中配置数据库参数

接下来我们就开始编写工作。

编写Entity类

编写UserEntity.java,代码内容如下

这里需要介绍一下用到的注解标签:

1. 类标签

@Entity 配置实体名称,表明该类为实体类。参数:@Entity(name="xxx")

@Table 配置对应表名,若Entity名称与表名相同可以省略。参数:@Table(name="xxx")属性标签

@Column:如果字段名与列名相同,则可以省略。参数:@Column(name="xxx")

@Id:表示该属性为主键。

@GeneratedValue:设置主键生成策略。参数@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "repair_seq"):表示主键生成策略是sequence(可以为Auto、IDENTITY、native等,Auto表示可在多个数据库间切换),指定sequence的名字是repair_seq。

@SequenceGeneretor:配合@GeneratedValue使用,定义一个生成主键的序列。参数@SequenceGeneretor(name = “repair_seq”, sequenceName = “seq_repair”, allocationSize = 1):name为sequence的名称,以便使用,sequenceName为数据库的sequence名称,两个名称可以一致。

编写DAO接口

编写UserDAO.java,代码内容如下

添加@Repository(仓库(Repository))注解,来表明这是一个用来执行与数据库相关操作DAO接口。这里我们只需要创建这样一个接口,Spring会自动帮我们生成实现类。

我们为接口编写了一个findeByUsernameAndPassword的方法,这里需要注意,方法名称一定要规范。Spring会根据我们编写的方法名称和参数,自动帮我们完成数据库的操作方法。关键字示例示例说明AndfindByUsernameAndPasswordwhere x.username=?1 and x.password=?2

OrfindByUsernameAndUserIdwhere x.username=?1 or x.userid=?2

(Is/Equals)findByUsername(Is/Equals)where x.username=?1

BetweenfindByDateBetweenwhere x.date between ?1 and ?2

LessThan(Equal)findByMoneyLessThan(Equal)where x.money

GreaterThan(Equal)findByMoneyGreaterThan(Equal)where x.money >(=) ?1

AfterfindByDateAfterwhere x.date > ?1

BeforefindByDateBeforewhere x.date > ?1

Is(Not)NullfindByAgeIs(Not)Nullwhere x.age is (not) null

(Not)LikefindByUsername(Not)Likewhere x.username is (not) like ?1

NotfindByLevelNotwhere x.level <> ?1

当然这里的表格只列出了部分,手动打起来太麻烦了,还有很多可以自行查阅手册或者尝试。这种方式完成代码的编写有利有弊,大家可以自行斟酌。简单的可以就只样,复杂查询还是自己编写sql语句吧。

配置数据库的参数

数据库的基本参数,包括数据库地址、端口、用户名、密码、数据库名等等。这些我们在application.propreties文件中完成:

此外还有一些其他的配置,比如

- spring.jpa.hibernate.naming-strategy:数据库字段命名规则;

- spring.jpa.hibernate.ddl-auto:自动更新数据库规则,可选参数有

- create:启动时删数据库中的表,然后创建,退出时不删除数据表

- create-drop:启动时删数据库中的表,然后创建,退出时删除数据表 如果表不存在报错

- update:如果启动时表格式不一致则更新表,原有数据保留

- validate:项目启动表结构进行校验 如果不一致则报错

编写一个测试方法

简单的测试代码如下:

我们通过userDao的save方法(这个方法也是Spring为我们实现的),将UserEntity对象直接进行存储。然后再通过findByUsernameAndPassword方法查找到数据库中内容并且转为对象,然后输出信息。整个过程非常的简单方便,而且省去了一堆对象序列化的操作。

总结

今天我们用SpringBoot中JPA的方法完成了MySQL数据库操作流程,与之前写的JDBC有所不同,但是上手也非常容易。SpringBoot的设计中,还有很多我之前没有接触到的内容,后续也会一一记录下来。

Comments

你可能感兴趣的:(mysql,spring,boot)