hello 大家好我是Monday,继上篇介绍SpringBoot集成Druid数据库连接池后,今天我们开启SpringBoot的学习的系列文章之SpringBoot访问数据库操作
1、什么是DAO? DAO(Data Access Object)是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑 与数据库资源中间。
2、Spring Data Jpa 简介 JPA
(Java Persistence API
)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR 338,这些接口所在包为javax.persistence
,详细内容可参考https://github.com/javaee/jpa-spec) JPA的出现主要是为了简化持久层开发以及整合ORM技术,结束Hibernate、TopLink、JDO等ORM框架各自为营的局面。JPA是在吸收现有ORM框架的基础上发展而来,易于使用,伸缩性强。总的来说,JPA包括以下3方面的技术:
ORM映射元数据 : 支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系
API : 操作实体对象来执行CRUD操作
查询语言 : 通过面向对象而非面向数据库的查询语言(JPQL
)查询数据,避免程序的SQL语句紧密耦合
来看一下Spring官方的解释https://spring.io/projects/spring-data-jpa#overview
开搞
3、在pom.xml文件中添加以下依赖: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-data-jpa</artifactId > </dependency > <dependency > <groupId > mysql</groupId > <artifactId > mysql-connector-java</artifactId > <version > 5.1.39</version > </dependency > <dependency > <groupId > com.alibaba</groupId > <artifactId > druid</artifactId > <version > 1.0.31</version > </dependency >
4、在resources写好配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 ## 设置server参数 ## 端口 server.port=8081 ############################################################ # # 其他自定义变量 # ############################################################ application-dev.username=root application-dev.password=root ############################################################ # # logback 配置,日志管理 # ############################################################ #日志配置,输出到文本, logging.config=classpath:logback-spring.xml #控制台默认日志级别修改 #logging.level.root=warn # 指定输出日志的文件名,默认输出至当前项目目录下 #logging.file.path=springboot.log ############################################################ # # mysql数据库配置 # ############################################################ spring.datasource.url = jdbc:mysql://localhost:3306/wechat //数据库URL spring.datasource.username = root //账号 spring.datasource.password = 123456 //密码 spring.datasource.driverClassName = com.mysql.jdbc.Driver // 驱动 ## 指定使用druid 表明不使用默认的Hikari spring.datasource.type= com.alibaba.druid.pool.DruidDataSource ## #############配置druid参数###################### #druid_config #用户名 druid.login.username=root #密码 druid.login.password=root # 配置一个连接在池中最小生存的时间,单位是毫秒,下面是:5分钟 spring.datasource.druid.min-evictable-idle-time-millis= 300000 # 打开PSCache,并且指定每个连接上PSCache的大小 spring.datasource.druid.pool-prepared-statements= true spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20 # 初始化大小,最小,最大 spring.datasource.druid.initial-size=5 spring.datasource.druid.min-idle= 3 # 最大连接池数量 spring.datasource.druid.max-active= 20 # 配置获取连接等待超时的时间 spring.datasource.druid.max-wait= 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒,下面是:1分钟 spring.datasource.druid.time-between-eviction-runs-millis= 60000 # asyncInit是1.1.4中新增加的配置,如果有initialSize数量较多时,打开会加快应用启动时间 spring.datasource.druid.asyncInit=true # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 spring.datasource.druid.filters=stat,wall,log4j,config spring.datasource.druid.validation-query: select 'x' spring.jpa.show-sql=true spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
5、新建user文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 package com.example.demo.models;import com.fasterxml.jackson.annotation.JsonIgnoreProperties;import javax.persistence.*;@Entity @Table (name="user" )public class User { @Id @GeneratedValue (strategy = GenerationType.IDENTITY) private int id; @Column (name="userName" ) private String userName; @Column (name="passWord" ) private String passWord; public User () { } public User (String userName) { this .userName = userName; } public String getName () { return userName; } public void setName (String userName) { this .userName = userName; } public String getPassword () { return passWord; } public void setPassWord (String passWord) { this .passWord =passWord; } }
6、新建UserDao,继承JpaRepository。 Dao层主要用来实现对数据库的增、删、查、改。 dao只要继承JpaRepository类就可以,几乎可以不用写方法,可以根据方法名来自动的生产SQL,比如findByUserName 会自动生产一个以 userName 为参数的查询方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package com.example.demo.dao;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.jpa.repository.JpaRepository;import com.example.demo.models.User;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Repository;@Repository public interface UserDao extends JpaRepository <User , Long > { User findByUserName (String userName) ; }
创建Userservice接口 1 2 3 4 5 6 7 8 9 10 11 12 13 package com.example.demo.service;import com.example.demo.models.User;import java.util.List;public interface UserService { User save (User user) ; User getOne (long id) ; List<User> findAll () ; }
创建service以及实现类,创建接口的实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 package com.example.demo.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.example.demo.models.User;import com.example.demo.dao.UserDao;import com.example.demo.service.UserService;import java.util.List;@Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override public User getOne (long id) { return userDao.getOne(id); } @Override public List<User> findAll () { return userDao.findAll(); } @Override public User create (User user) { return userDao.save(user); } }
7、新建UserController文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 package com.example.demo.controller;import java.util.ArrayList;import java.util.List;import com.example.demo.dao.UserDao;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.bind.annotation.RestController;import com.example.demo.models.User;@RestController @RequestMapping ("user" )public class UserController { @Autowired private UserDao userDao; @RequestMapping ("/getAllUser" ) @ResponseBody public List<User> findAll () { List<User> list = new ArrayList<User>(); list = userDao.findAll(); return list; } @RequestMapping ("/getByUserName" ) @ResponseBody public User getByUserName (String userName) { User user = userDao.findByUserName(userName); return user; } @RequestMapping ("/createtUser" ) @ResponseBody public User createtUser (String userName,String passWord) { User user = new User(userName,passWord); user.setName(userName); user.setPassWord(passWord); userDao.save(user); return user; } }
8、启动程序注意: 在本地跑项目的时候,本地数据库的版本是5.1.37的版本。 而服务器的数据库版本是8.0.20。 这就是主要原因造成的,先改本地pom文件里的jar包改成和数据库版本一致。 jdbc.driver = com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://49.27.62.218:3306/zjcq?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC 在数据库版本为8.0的时候要加serverTimezone=UTC地区
1 2 3 4 5 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.20</version> </dependency>
10、建表方式 关键的地方在建表方式设置上,配置文件,只有写了这句才会自动建表:
1 spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.hbm2ddl.auto有几种配置:
create:每次加载Hibernate时都会删除上一次生成的表,然后重新生成新表,即使两次没有任何修改也会这样执行,这就导致每次启动都是一个新的数据库,也是导致数据丢失的重要原因。
create-drop:每次加载Hibernate时都会生成表,但当SessionFactory关闭时,所生成的表将自动删除。
update:最常用的属性值,第一次加载Hibernate时创建数据表(前提是需要先有数据库),以后加载HIbernate时只会根据model更新,即使model已经删除了某些属性,数据表也不会随之删除字段。
validate:每次加载Hibernate时都会验证数据表结构,只会和已经存在的数据表进行比较,根据model修改表结构,但不会创建新表。
9、 测试 启动项目。用Postman发送请求进行测试:
http://localhost:8081/user/getAllUser
localhost:8081/user/getByUserName?userName=ceshi
参考链接:
Spring Boot——集成Druid数据库连接池
https://blog.csdn.net/wpc2018/article/details/116948255
Druid使用手册
https://www.bookstack.cn/read/Druid/06014f428e7b0263.md
SpringBoot配置 Druid 连接池(application.properties参数配置详解
https://blog.csdn.net/yuekangwei/article/details/121369124
spring boot连接数据库并插入数据
https://blog.csdn.net/qq_38320255/article/details/81327440
spring boot操作mysql数据库:自动建表,数据添加、查询和修改
https://blog.csdn.net/liuzhijun301/article/details/82461851
spring boot实战系列(11):结合使用druid连接池链接mysql数据库
https://mp.weixin.qq.com/s/mLb2zZ7GqgmbRUy8OUwx1A
Spring Boot连接MySQL数据库
https://www.cnblogs.com/sgh1023/p/10044722.html#_lab3
结束语 :
今天的分享就到这里了,欢迎大家关注微信公众号”菜鸟童靴 “