SpringBoot 05_集成SpringDataJpa
你还在为项目的集成头疼吗?你还在为管理大量的配置文件烦恼吗?如果是,用SpringBoot吧!今天主要介绍如果在SpringBoot的基础上创建一个集成了SpringDataJpa的项目,至于SpringDataJpa是什么,如果用过Hibernate的同学想必都在为不用写sql在庆幸吧,想要了解SpringDataJpa的话,我以后会写相关的博客分享给大家。
下面就带大家来创建一个SpringBoot + SpringDataJpa的项目,创建的环境:
开发工具 :IDEA
SpringBoot版本:SpringBoot1.5.6
Maven版本:Maven3.5.0
JDK版本:1.8
Mysql版本:5.6
创建方式:Spring Initializr
1:打开IDEA,File –> New project –> Spring Initializr –> Next

2:输入项目相关信息 –-> Next
这里的信息根据实际情况自动填写,这里的是项目默认的。

3:添加项目依赖,这里添加两个依赖 –> Next。
如果是web项目,则Web –> Web

添加JPA依赖;SQL —> JPA

添加完了之后,可以在右侧看到这个项目集成了哪些依赖,目前是Web和JPA。之后选择 Next
4:输入项目名之后点击完成
至此关于JPA的集成就集成好了,但是想真正的运行起来还是缺东西,下面我们就开始让项目跑起来吧。
5:添加mysql jdbc连接依赖
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
6:在application.properties/application.yml中配置连接信息,使用Spring Initializr默认生成的是application.properties
########################################################
###数据库连接信息
########################################################
#连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/testJPA
#数据库账户
spring.datasource.username=root
#数据库密码
spring.datasource.password=root
#数据库驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
########################################################
### Java Persistence Api JPA相关配置
########################################################
#指定数据库类型
spring.jpa.database=mysql
#控制台打印sql
spring.jpa.show-sql=true
#建表策略,这里用update,即根据实体更新表结构
spring.jpa.hibernate.ddl-auto=update
#表中字段命名策略,这里要引入hibernate的核心包,不然这个命名策略会报错
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
#方言
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
7:在这里运行可能会出现Bug:Caused by: java.lang.NoSuchMethodError: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Properties;
- 出现原因。理论上SpringBoot集成SpringDataJpa是不需要加入hibernate-core依赖的,但是就是因为字段命名策略的引用导致了需要加入hibernate5.x之间的版本。而SpringBoot-jpa-starter的版本脚底
- 解决方案,参考:http://www.cnblogs.com/homeword/p/7456372.html
8:实战
- 创建实体类
@Data
@Entity
@Table(name = "t_user")
public class User { @Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id; @Column
private String userName; @Column(columnDefinition = "varchar(255) comment '居住地址'")
private String homeAddress; private Long homeTel; }
- 创建UserRepository.java
@Repository
public interface UserRepository extends JpaRepository<User, Long> { }
- 创建UserController.java使用UserRepository
@RequestMapping("/api")
@RestController
public class UserController {
@Autowired
private UserRepository userRepository;
/**
* 添加用户
* @param user 用户信息
* @return 添加成功后的用户id
*/
@PostMapping("/users")
public ServerResult saveUser(@RequestBody User user){
User saveUser = userRepository.save(user);
return new ServerResult("添加成功",saveUser.getId());
}
/**
* 更新用户信息
* @param user 用户信息
* @param id 用户id
* @return 更新结果
*/
@PutMapping("/users/{id}")
public ServerResult updateUserById(@RequestBody User user,@PathVariable Long id){
user.setId(id);
userRepository.save(user);
return new ServerResult("修改成功",id);
}
/**
* 获取用户信息
* @param id 用户id
* @return 用户信息
*/
@GetMapping("/users/{id}")
public ServerResult findUserById(@PathVariable Long id){
User user = userRepository.findOne(id);
return new ServerResult("查找成功",user);
}
/**
* 删除用户信息
* @param id 用户id
* @return 删除结果
*/
@DeleteMapping("/users/{id}")
public ServerResult deleteUserById(@PathVariable Long id){
userRepository.delete(id);
return new ServerResult("删除成功",null);
}
}
9:启动项目
- 查看项目启动日志,发现会创建一张表,之前数据库中是不存在user表的
Hibernate: create table t_user (id bigint not null auto_increment, home_address varchar(255) comment '居住地址', home_tel bigint, user_name varchar(255), primary key (id)) engine=MyISAM
- 查看数据库

- 测试接口,用postman
- 添加接口:localhost:8080/api/users 请求方式:POST

sql:Hibernate: insert into t_user (home_address, home_tel, user_name) values (?, ?, ?)

- 更新接口:localhost:8080/api/users/1 请求方式:PUT

sql:
Hibernate: select user0_.id as id1_0_0_, user0_.home_address as home_add2_0_0_, user0_.home_tel as home_tel3_0_0_, user0_.user_name as user_nam4_0_0_ from t_user user0_ where user0_.id=?
Hibernate: update t_user set home_address=?, home_tel=?, user_name=? where id=?

备注:
Hibernate的更新是先查询,再更新,为什么这么做是和对象的四种状态有关。
- 查找接口:localhost:8080/api/users/1 请求方式:GET

sql:
Hibernate: select user0_.id as id1_0_0_, user0_.home_address as home_add2_0_0_, user0_.home_tel as home_tel3_0_0_, user0_.user_name as user_nam4_0_0_ from t_user user0_ where user0_.id=?
这个就不截图了,查询数据库没变化
- 删除接口:localhost:8080/api/users/1 请求方式:DELETE

sql:
Hibernate: delete from t_user where id=?

备注:
你可能会发现更新,获取,删除的接口都是一样的,其实更新还带了请求体的,而在字面上这获取和删除的接口是一样的,你可能会在实验的时候出错,那多半是因为你没注意到请求方式的问题,也就是我在删除中用红框标记的部分。
我这里用的是Restful的请求方式,对于请求接口,请结合上下文进行理解,比如说删除:localhost:8080/api/users/1,删除的请求方式是DELETE,则说明我要删除编号为1的用户。
10:小结
终于写完了,欢迎阅读,指出文中不足,大家共同进步。
SpringBoot 05_集成SpringDataJpa的更多相关文章
- Spring Boot 系列(九)数据层-集成Spring-data-jpa
实际开发中,不可避免地会对数据进行反复的增删改查操作,然而这部分工作是十分繁琐枯燥的.那么,随即而生的ORM框架就能很好的解决这个问题. 我们常用的ORM框架有:Hibernate.Mybatis.J ...
- springboot elasticsearch 集成注意事项
文章来源: http://www.cnblogs.com/guozp/p/8686904.html 一 elasticsearch基础 这里假设各位已经简单了解过elasticsearch,并不对es ...
- Springboot Application 集成 OSGI 框架开发
内容来源:https://www.ibm.com/developerworks/cn/java/j-springboot-application-integrated-osgi-framework-d ...
- SpringBoot项目集成Hystrix
Hystrix Hystrix是由Netflix开源的一个服务隔离组件,通过服务隔离来避免由于依赖延迟.异常,引起资源耗尽导致系统不可用的解决方案. 1.什么是服务熔断 服务熔断就是对该服务的调用 ...
- 钉钉通知机器人与SpringBoot的集成
Spring Boot Admin 集成自定义监控告警(2.0.1版本)------钉钉机器人 - yuancao24的博客 - CSDN博客https://blog.csdn.net/yuancao ...
- SpringBoot项目集成PageHelper使用
SpringBoot项目集成PageHelper使用 一.开始 地址:https://github.com/pagehelper/Mybatis-PageHelper 在spring boot ...
- Springboot简单集成ActiveMQ
Springboot简单集成ActiveMQ 消息发送者的实现 pom.xml添加依赖 <dependency> <groupId>org.springframework.bo ...
- 在springboot中集成mybatis开发
在springboot中利用mybatis框架进行开发需要集成mybatis才能进行开发,那么如何在springboot中集成mybatis呢?按照以下几个步骤就可以实现springboot集成myb ...
- 在springboot中集成jsp开发
springboot就是一个升级版的spring.它可以极大的简化xml配置文件,可以采用全注解形式开发,一个字就是很牛.在springboot想要使用jsp开发,需要集成jsp,在springboo ...
随机推荐
- CSS 命名规范将省下调试时间
我听说很多开发者厌恶 CSS.而在我的经验中,这往往是由于他们并没有花时间来学习 CSS. CSS 算不上是最优美的『语言』,但迄今二十多年来,它都是美化 web 举足轻重的工具.从这点来说,也还算不 ...
- JS事件 鼠标单击事件( onclick )通常与按钮一起使用。onclick是鼠标单击事件,当在网页上单击鼠标时,就会发生该事件。同时onclick事件调用的程序块就会被执行
鼠标单击事件( onclick ) onclick是鼠标单击事件,当在网页上单击鼠标时,就会发生该事件.同时onclick事件调用的程序块就会被执行,通常与按钮一起使用. 比如,我们单击按钮时,触发 ...
- 关于VSCode的一些常用插件和一些常用设置
常用插件: .Beautify :格式化 html ,js,css .Bracket Pair Colorizer :给括号加上不同的颜色,便于区分不同的区块,使用者可以定义不同括号类型和不同颜色 . ...
- Got permission denied while trying to connect to the Docker daemon
答案:https://stackoverflow.com/questions/48568172/docker-sock-permission-denied
- yii2 vendor/bower/jquery/dist not exist
查看 vendor 文件夹,只有bower-asset文件夹 手动修改 bower-asset 为bower 倒也可以,yii2项目每次 composer install 成功之后,每次重命名这个文件 ...
- WebAPI介绍
Web API介绍 API的概念 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访 ...
- VS2010-MFC(对话框:字体对话框)
转自:http://www.jizhuomi.com/software/175.html 字体对话框的作用是用来选择字体.我们也经常能够见到.MFC使用CFontDialog类封装了字体对话框的所有操 ...
- django-filter 实现过滤时查询是否包含在数组的方法,in数组的实现
查了半天无解,还是在官网找到的,记录一下 使用 BaseInFilter 官网地址:https://django-filter.readthedocs.io/en/master/ref/filters ...
- HttpUrlConnection使用详解--转AAAAA
http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/HttpConnection.html HttpUr ...
- day21-time与random等常用模块与包
2018-08-05 # ********************day21-time与random等常用模块与包 ******************* # 参考资料# python模块(转自Yua ...