你还在为项目的集成头疼吗?你还在为管理大量的配置文件烦恼吗?如果是,用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的更多相关文章

  1. Spring Boot 系列(九)数据层-集成Spring-data-jpa

    实际开发中,不可避免地会对数据进行反复的增删改查操作,然而这部分工作是十分繁琐枯燥的.那么,随即而生的ORM框架就能很好的解决这个问题. 我们常用的ORM框架有:Hibernate.Mybatis.J ...

  2. springboot elasticsearch 集成注意事项

    文章来源: http://www.cnblogs.com/guozp/p/8686904.html 一 elasticsearch基础 这里假设各位已经简单了解过elasticsearch,并不对es ...

  3. Springboot Application 集成 OSGI 框架开发

    内容来源:https://www.ibm.com/developerworks/cn/java/j-springboot-application-integrated-osgi-framework-d ...

  4. SpringBoot项目集成Hystrix

    Hystrix Hystrix是由Netflix开源的一个服务隔离组件,通过服务隔离来避免由于依赖延迟.异常,引起资源耗尽导致系统不可用的解决方案. 1.什么是服务熔断   服务熔断就是对该服务的调用 ...

  5. 钉钉通知机器人与SpringBoot的集成

    Spring Boot Admin 集成自定义监控告警(2.0.1版本)------钉钉机器人 - yuancao24的博客 - CSDN博客https://blog.csdn.net/yuancao ...

  6. SpringBoot项目集成PageHelper使用

    SpringBoot项目集成PageHelper使用 一.开始 ​ 地址:https://github.com/pagehelper/Mybatis-PageHelper ​ 在spring boot ...

  7. Springboot简单集成ActiveMQ

    Springboot简单集成ActiveMQ 消息发送者的实现 pom.xml添加依赖 <dependency> <groupId>org.springframework.bo ...

  8. 在springboot中集成mybatis开发

    在springboot中利用mybatis框架进行开发需要集成mybatis才能进行开发,那么如何在springboot中集成mybatis呢?按照以下几个步骤就可以实现springboot集成myb ...

  9. 在springboot中集成jsp开发

    springboot就是一个升级版的spring.它可以极大的简化xml配置文件,可以采用全注解形式开发,一个字就是很牛.在springboot想要使用jsp开发,需要集成jsp,在springboo ...

随机推荐

  1. NEO4J中文分词全文索引自动更新解决方案

    NEO4J中文分词全文索引自动更新解决方案 一.样例数据 二.英文与中文全文索引差别 1.创建NEO4J默认索引 2.删除索引 3.创建支持中文分词的索引 三.APOC自带英文全文索引过程(可自动更新 ...

  2. Neo4j使用简单例子

    Neo4j Versions Most of the examples on this page are written with Neo4j 2.0 in mind, so they skip th ...

  3. asp.net Core 使用redis(StackExchange.Redis)

    原文:asp.net Core 使用redis(StackExchange.Redis) 一.添加配置(appsettings.json) "Redis": { "Def ...

  4. javascript面向对象编程笔记(函数)

    第三章 函数 3.1 什么是函数 一般来说,函数声明通常由以下几部分组成: function子句 函数名称 函数所需参数 函数体 return子句.如果某个函数没有显示的返回值,默认它的返回值为und ...

  5. NIO教程笔记

    NIO操作文件部分详解 NIO——New IO,也可以理解为非阻塞IO(Non Blocking IO).可以替代旧IO,更高效的支持读写(文件读写,网络读写).但文件操作都是阻塞的.学习NIO首先要 ...

  6. PHP算法之回文数

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121输出: true示例 2: 输入: -121输出: false解释: 从左向右读, ...

  7. sublime text-----查看当前文件的编码格式

    1.preferences->settings,在user中添加 "show_encoding": true, "show_line_endings": ...

  8. 廖雪峰Java16函数式编程-1Lambda表达式-3方法引用

    Java8引入了Lambda表达式,可以不必编写FunctionalInterface的实现类,直接写Lambda表达式.除了Lambda表达式,我们还可以直接传入方法引用 方法引用是指:如果某个方法 ...

  9. day34 异常处理、断言、socket之ftp协议

    Python之路,Day20 = 异常处理.断言.socket之ftp协议 参考博客:http://www.cnblogs.com/metianzing/articles/7148191.html 异 ...

  10. spss modeler出现使用错误提

    spss modeler出现使用错误提 1.对字段"compensation汇总导出"指定的类型不充分 问题: 为了分析需要,我加了一个"字段选项"--&quo ...