spring mysql_玩转Spring二:访问MySQL数据库

前言

通过前一个示例学习(玩转Spring一),已了解@Bean注解的基本概念和利用Bean注解创建RestTemplate对应给Spring的Ioc容器管理。本示例将进一步理解@Bean与@Autowired的区别,学习利用Spring data jpa访问常用的MySQL数据库。

将学习的知识

@Autowired 注解(重点)@Entity 注解@RequestMapping PostMapping GetMapping 注解application.properties 配置文件

代码编辑

一、 下载官网的示例。

git clone https://github.com/spring-guides/gs-accessing-data-mysql.git

,怎样使用这一块可参考本人前面的文章哈。官网的教程地址:https://spring.io/guides/gs/accessing-data-mysql/

二、 在终端连接本地的MySQL数据库,创建名为db_example的数据库。如果没有安装MySQL的,自行百度安装,哈哈。

ee38c741b9dbc540fd8f983a78b4e534.png

三、配置application.properties文件

1ef67b28d6bb5e653809f601a4b97df9.png

我的本地MySQL账号密码均为root,各位大大根据实际情况调整。这里的文件格式为properties,使用等于号配置,官网推荐的是使用yaml格式来配置的。以后大规模配置的时候再使用Yaml格式来写啦。如果需要使用Yaml,只需要调整该文件名为 application.yaml或application.yml即可。

这里的spring.jpa.hibernate.ddl-auto有四种模式,分别为none,update,create,create-drop

none: The default for MySQL. No change is made to the database structure(默认模式,不对数据库结构进行调整)update: Hibernate changes the database according to the given entity structures(Hibernate会根据给定的实体类更新数据结构。我们一般使用这种模式).create: Creates the database every time but does not drop it on close.(每次运行该程序,会重新创建表格,但关闭时不会清理数据。注意,重新启动程序时会清理数据,只创建表结构。)create-drop: Creates the database and drops it when SessionFactorycloses(每次运行该程序,会重新创建表格,但关闭程序时会删除表格。删库跑路的方案,重启程序就完蛋).四、 在启动文件同一级的目录下,创建User.java的实体类。

482c0dc531feb7846d2825dda3a5420b.png

为此类的属性自动生成getter、setter,在IDEA编辑器上右键选择Generate生成。

为此类加上@Entity注解,表明此类为实体类,与数据库的表进行关联,默认表名为类名(User),如果需要指定表名,可使用@Table(name="xx_user")注解此类。

@Id注解在属性上表明此属性为主键。

GenerationType, JPA提供的四种标用法为TABLE,SEQUENCE,IDENTITY,AUTO(默认). 具体的区别可看下图注释,了解一下就好。以后用到再细查。

16c20156b8d4f282a8f8b7d4a29de781.png

五、编写UserRepository.java接口

此接口主要是继承CrudRepository接口,CrudRepository里面实现了大多数的增删改查等方法。

0ffd44caaea074ba19342fd6284ed79e.png

相信你会和我一样地好奇,这里只是创建了一节UserRepository接口,该接口继承于CrudRepository接口,怎么就实现了增删改查的方法呢?我们可从没写过类去实现这些接口中的方法啊。官方实例也只是简单的说明了一下Spring会自动实现这一接口。

Spring automatically implements this repository interface in a bean that has the same name (with a change in the case—it is calleduserRepository

其实是Spring通过动态代理对象去实现这个功能的。里面有个SimpleJapRepository类实现了这些方法。通过后面编写完MainController后的断点调试,可找到个类的源码,此处仅仅满足好奇心,其实作为初学者,我们知道怎么用就好啦。详细的调试可参考此文档:https://www.pianshen.com/article/2589187911/

0f2be36f5d214c814b455a9dc597ee8b.png

六、编写MainController.java类,实现Controller层。

4c48e086dccc5c26590679fa6b60d5d8.png

@Controller 注解表明此类为MVC中的Controller层,是一个控制器。

@RequestMapping 也可在方法上进行此注解的,包含解析post/get这两种请求。@PostMapping就是只能使用post请求啦。对应的@GetMapping就只能使用get请求。path的值为路径。

@Autowired 注解为告知Spring为这个userRepository为注入实例,根据类名来注入。还记得上一章我们创建的对象通过加@Bean注解来交给Spring进行管理吗。现在可通过@Autowired来注入使用啦。

98bf689d1d8d915314a8ab85fcd22429.png

七、启动、测试。

由于浏览器操作POST方法很繁琐,建议使用POSTMAN来提交测试数据。或者参考官网的终端curl命令。

curl localhost:8080/demo/add -d name=First -d email=someemail@someemailprovider.com

发送post请求添加数据后,在浏览器输入:http://localhost:8080/demo/all 即可查找到数据啦。

0970d33d186e88993a9a889e0890043c.png

结束

本章学习了@Autowired 和@Entity的注解使用方式,了解了增删改查数据库的基本流程。在学习本例的过程中,用了比较长的时间查询CrudRepository动态代理的实现方式,感觉有点浪费时间。加油

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值