美文网首页springbootSpring Boot 核心技术SpringBoot
第三章:SpringBoot使用SpringDataJPA完成C

第三章:SpringBoot使用SpringDataJPA完成C

作者: 恒宇少年 | 来源:发表于2017-04-04 16:29 被阅读20356次

前两章我们简单讲解了SpringBoot的易用性,SpringBoot框架内部提供了很多我们需要用到的组件,需要什么你就可以拿到项目里。
在我们平时的项目中,数据的存储以及访问都是最为核心的关键部分,现在有很多企业采用主流的数据库,如关系型数据库:MySQL,oracle,sqlserver。非关系型数据库:redis,mongodb等。
SpringBoot已经为我们提供了很多种的数据库来做数据存储以及读取,上面只是简单的几种,那么我接下来以MySQL为例来讲述下本章的内容。

本章目标

学习并且使用SpringBoot访问MySQL数据库,并且结合SpringDataJPA完成CRUD(Create,Read,Update,Delete)简单操作。

构建项目

接下来我们先来创建SpringBoot项目,如下图1所示:

图1

点击Next输入一些项目参数,如下图2所示:

图2

点击Next后选择我们需要导入项目的SpringBoot组件,这里要注意一定要选择正确的组件,如下图3所示:

图3

可以看到图3我们选择了,web,MySQL,JPA组件作为我们开发必备组件,我们点击Next输入项目名称后进入项目窗口,如下图4所示:

图4

我们打开pom.xml可以看到springboot自动为我们添加了spring-data-jpa、mysql-connector-java的支持,如下图5所示:

图5

上图的注释是我添加的,项目默认创建完成后是没有注释的。
注意:如果使用内部tomcat运行项目需要将spring-boot-starter-tomcat的scope标签注释掉。

配置数据源以及JPA

今后我们修改application.properties文件配置为application.yml配置。.yml配置文件与.properties配置要更清晰更有层次感,可以很明了的看懂配置信息。
我们在resources目录下创建application.yml文件,并且配置DataSource以及JPA,如下图6所示:

图6

可以看到上述配置文件内,我们使用了本地的一个mysql数据库,mysql数据库是我们事先安装好的,并且创建了一个名叫test的数据库,JPA的配置了show-sql用来在控制台输出JPA自动生成的sql语句。
上述数据配置文件已经完成,接下来我们新建数据库测试表结构我使用的数据库工具是Navicat你们可自行下载或者使用其他工具,结构如下图7所示:

图7

创建表语句我会放到resources目录下,请大家到文档地址下载对应课程源码。
接下来我们开始编写springmvc控制器以及实体类,我们采用@RestController注解来编写一个控制器,如下图8所示:

图8

创建实体

我们根据数据库中的字段对应创建一个UserEntity来作为对应操作,如下图9所示:

图9

可以看到图9中我们使用到了很多注解,关于注解的具体含义我们放到下面章节中具体讲解。

创建JPA

既然实体类我们也已经创建完成了,那么接下来我们需要使用SpringDataJPA来完成数据库操作,我们新建名字叫做jpa的package,然后创建UserJPA接口并且继承SpringDataJPA内的接口作为父类,如下图10所示:

图10

我们UserJPA继承了JpaRepository接口(SpringDataJPA提供的简单数据操作接口)、JpaSpecificationExecutor(SpringDataJPA提供的复杂查询接口)、Serializable(序列化接口)。
我们并不需要做其他的任何操作了,因为SpringBoot以及SpringDataJPA会为我们全部搞定,SpringDataJPA内部使用了类代理的方式让继承了它接口的子接口都以spring管理的Bean的形式存在,也就是说我们可以直接使用@Autowired注解在spring管理bean使用,如下图11所示:

图11

到这一步我们的数据库层几乎已经编写完成了,那么我们需要编写控制器让我们通过页面可以访问到数据。

编写查询方法

我们回到UserController中,然后创建一个查询用户列表的方法,如下图12所示:

图12

其中userJps.findAll()方法就是SpringDataJPA为我们提供的内置方法,它可以查询表内所有的数据,除了findAll还有很多有用的方法,我们后期使用一章的内容来详细介绍这个强大的家伙!

编写添加、更新方法

图13

可以看到上图13中,我们只是简单的实现实体的持久化操作,userJPA.save方法可以执行添加也可以执行更新,如果需要执行持久化的实体存在主键值则更新数据,如果不存在则添加数据。

编写删除方法

图14

我们删除完用户后直接返回了用户列表,可以查看到用户是否已经删除成功。

 初尝试运行项目

具体如何运行项目请到LessonTwo去阅读,下面我们可以看到项目是正常运行的如下图15所示:

图15

我红色标记的部分可以看到,springmvc加载了我定义的请求。那么我们尝试访问用户列表路径:127.0.0.1:8080/user/list可以看到如下图16所示,因为我们数据库中并没有数据,所以我们没有查询到结果:

图16

可以看下IntelliJ IDEA工具控制台输出的语句:
Hibernate: select userentity0_.t_id as t_id1_0_, userentity0_.t_address as t_addres2_0_, userentity0_.t_age as t_age3_0_, userentity0_.t_name as t_name4_0_ from t_user userentity0_
因为我们没有设置格式化sql所以生成的sql语句都是一行显示的。

添加更新用户

我们现在添加一条用户信息到数据库,请求地址:http://127.0.0.1:8080/user/save?name=admin&age=22&address=jinan,效果如下图17所示:

图17

可以看到我们成功的添加了一条数据,并且用户数据主键编号也返回了,我们在执行参数中并没有添加id的值,这个id是数据库自动生成的,springDataJPA查询成功后会自动返回主键的值到实体主键映射字段中。
多插入几条数据方便我们下一步操作,插入完成后我们再次访问用户列表请求地址,效果如下图18所示:

图18

上图18我们查询出了数据库中的所有用户数据,那么我们接下来更新下主键编号为1的用户信息,我们把age以及address分别改成,23,beijing,效果如下图19所示:

图19

我们可以看到,在访问地址的时候我并没有传name字段的值,那么springDataJPA会认为你要清空name字段的值所以这样访问是不可以的,我们需要将name也传入,效果如下图20所示:

图20

可以看到上图20,更新用户的name属性是有值得。你们可自行访问用户列表地址查询是否已经更新,我这里就不做演示了。

删除用户

我们可以根据用户的主键来删除一条数据,如下图21所示:

图21

我们可以看到我传入的id=1,删除完成后我们自动读取了用户列表,springDataJPA给我们没有返回id=1的用户,我们查看数据库数据也没有发现id=1用户,证明id=1的用户确实已经被从数据库中删除了。

总结

上述内容就是我们本章的全部内容,主要讲述了springboot整合mysql并且使用SpringDataJPA来完成数据库的CRUD操作。
因为我们是接着上一章的内容讲解的,如果你有不明白的地方可以去查看我的第二章:SpringBoot与JSP间不可描述的秘密

本章内容已经更新到码云,请大家下载学习:

SpringBoot配套源码地址:https://gitee.com/hengboy/spring-boot-chapter

SpringCloud配套源码地址:https://gitee.com/hengboy/spring-cloud-chapter

SpringBoot相关系列文章请访问:目录:SpringBoot学习目录

QueryDSL相关系列文章请访问:QueryDSL通用查询框架学习目录

SpringDataJPA相关系列文章请访问:目录:SpringDataJPA学习目录

SpringBoot相关文章请访问:目录:SpringBoot学习目录,感谢阅读!

欢迎加入QQ技术交流群,共同进步。

QQ技术交流群

相关文章

网友评论

  • f87c73f6a205:请问save方法中传入的entity是自动生成的吗?我save到数据库中的都是null,似乎没有在代码中看到获取属性值并生成entity的操作。
    f87c73f6a205:@恒宇少年
    public UserEntity save(@RequestParam(value = "name") String name,
    @RequestParam(value = "age") int age,
    @RequestParam(value = "address") String address) {
    UserEntity Entity=new UserEntity();
    Entity.setT_name(name);
    Entity.setT_age(age);
    Entity.setT_address(address);
    return userJpa.save(Entity);
    }
    这是我改的save方法,需要用RequestParam获取参数,请问不用RequestParam是怎么实现参数获取的?
    恒宇少年:@zerohzz 没太明白你的意思
  • coolzpw:调用save 直接报错呀?
  • 7b1f8cd2091d:我的为什么报这个?Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: error performing isolated work; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: error performing isolated work] with root cause
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.hibernate_sequence' doesn't exist
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    无根天水:@GeneratedValue(strategy = GenerationType.IDENTITY)这样就可以了,数据库mysql的,主键自动生成
  • 08788ce892d3:Caused by: org.yaml.snakeyaml.parser.ParserException: while parsing a block mapping
    in 'reader', line 2, column 2:
    datasource:
    ^
    expected <block end>, but found BlockMappingStart
    in 'reader', line 7, column 3:
    jpa:
    求解~~~~~~~~~~~~~~~~~~~~~~~~
    ^
    08788ce892d3:求解释
    08788ce892d3:spring:
    datasource:
    url: jdbc:mysql://localhost:3306/content?characterEncoding=utf8
    driverClassName: com.mysql.jdbc.Driver
    username: root
    password: 123456
    jpa:
    database: MySQL
    show-sql: true
    hibernate:
    naming_strategy: org.hibernate.cfg.improvedNamingStrategy
    感觉没有重复啊
  • 55b089fbb0c3:2018-09-05 14:30:54.545 ERROR 292336 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :

    ***************************
    APPLICATION FAILED TO START
    ***************************

    Description:

    Field userJPA in com.example.demo.controller.UserController required a bean of type 'com.example.demo.jpa.UserJPA' that could not be found.

    Action:

    Consider defining a bean of type 'com.example.demo.jpa.UserJPA' in your configuration.
    恒宇少年:没有被扫描到
    7dfff2370069:我也是这个问题
    55b089fbb0c3:请问下这是为什么
  • 6ec9602df16f:楼主,你好。如果删除时要做逻辑删除,这个没有*mapper.xml怎么搞呢?
    恒宇少年:@虚拟的背后 这是jpa不是mybatis
  • c293a29123aa:研究了半天,
    发现掉进了了spring boot1.5 和2.0的坑。
    恒宇少年:@正义宅男 之前的文章是1.5版本
  • 85d07b9a0863:真是日了狗,pom文件完全一样,就是死活加不进来
    恒宇少年:@单行道_0f79 加群说想的问题吧
  • 85d07b9a0863:为啥我的jpareposity死活加不进来,怎样都提示cant resolve
    55b089fbb0c3:我也是,请问你解决了么
  • b2efe7751b24:太多的错误了,唉,一个接一个
    恒宇少年:@热雪1983 下载源码做查看
  • 小炉炉:这一张的pom文件中问什么不见有Hibernate的maven依赖,明明在yml中有Hibernate存在。而且我按照你的过程一抹一样的代码一直是启动报错
  • 小炉炉:一模一样的代码就是启动不了,2018-07-23 10:55:56.444 INFO 1687048 --- [ main] com.snowy.Lesson03Application : Starting Lesson03Application on win7-PC with PID 1687048 (F:\lesson03\target\classes started by win7 in F:\lesson03)
    2018-07-23 10:55:56.449 INFO 1687048 --- [ main] com.snowy.Lesson03Application : No active profile set, falling back to default profiles: default
    2018-07-23 10:55:56.534 INFO 1687048 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@3835c46: startup date [Mon Jul 23 10:55:56 CST 2018]; root of context hierarchy
    2018-07-23 10:55:58.311 INFO 1687048 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
    2018-07-23 10:55:58.566 INFO 1687048 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
    2018-07-23 10:55:58.605 INFO 1687048 --- [ main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for .
    智炜呀:你这个是端口占用
  • 8dcf710d551a:我的代码:
    public interface MydbDAO extends CrudRepository<Mydb, Integer>, Serializable {
    }

    public class MydbService {
    @Autowired
    private MydbDAO mydbDAO;
    }
    报错:

    org.springframework.web.context.ContextLoader.initWebApplicationContext Context initialization failed
    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mydbService': Unsatisfied dependency expressed through field 'mydbDAO'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.concretepage.dao.MydbDAO' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:587)
    智炜呀:为什么不继承JpaRepository
  • 8630b7c5cd1a:执行save方法的时候报了这个错误,按评论区加了@GeneratedValue策略也不行

    java.lang.NullPointerException: null
    at com.example.demo.entity.UserEntity.getId(UserEntity.java:36) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_101]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_101]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_101]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_101]
    at org.springframework.beans.BeanWrapperImpl$BeanPropertyHandler.getValue(BeanWrapperImpl.java:308) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    mohaoyang:对的,ID的生成策略没有指定,报错了;
    JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.
    TABLE:使用一个特定的数据库表格来保存主键。
    SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
    IDENTITY:主键由数据库自动生成(主要是自动增长型)
    AUTO:主键由程序控制。
    418843b585a8:@海天_022d 在实体类中的 @GeneratedValue(strategy = GenerationType.IDENTITY) 我的是这样就可以用了
    8630b7c5cd1a:表结构和文章内容一样, id是主键, 手动添加数据, list方法是通的, save方法报错
  • 5fbe15677d0f:java.lang.reflect.InvocationTargetException: null

    Caused by: java.sql.SQLFeatureNotSupportedException: 这个 org.postgresql.jdbc.PgConnection.createClob() 方法尚未被实作。
    at org.postgresql.Driver.notImplemented(Driver.java:683) ~[postgresql-42.2.2.jar:42.2.2]
    at org.postgresql.jdbc.PgConnection.createClob(PgConnection.java:1252) ~[postgresql-42.2.2.jar:42.2.2]

    2018-06-27 11:35:39.414 ERROR 13224 --- [ main] o.apache.catalina.core.StandardService : Failed to start connector [Connector[HTTP/1.1-8080]]

    Caused by: org.apache.catalina.LifecycleException: Protocol handler start failed

    Caused by: java.net.BindException: Address already in use: bind
    恒宇少年:@嘴角上揚笑的好逞强 端口占用
  • 5fbe15677d0f:在创建项目的时候,选择自己的数据库,但是它生成的jar包的版本不是我使用的版本,而且版本特别高,我可不可以不让他自动生成,而是自己去添加
    1a58a448fc4c:嘤嘤嘤,可以的,mark
    5fbe15677d0f:@恒宇少年 好的
    恒宇少年:@嘴角上揚笑的好逞强 SpringBoot2.0.2默认选取更合适的版本,建议不要换,会出现版本不兼容的问题
  • Mrs_樱释:你好~还有报错:Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
    望赐教
    Mrs_樱释:@恒宇少年
    jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=true 和
    jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false已经试过,仍不可连接成功
    恒宇少年:错误信息告诉你了解决方案
  • Mrs_樱释:你好~请问 : HHH000342: Could not obtain connection to query metadata : Communications link failure是什么错误呢?是需要加上打开数据库的用户名和密码吗?
    上进的小二狗:数据库配置文件错误吧
  • Joey_Zjy:楼主,controller里的delete那里id为什么报错 curdRespository cannot be applied to '(java.lang.Long)'
    90e4e97995f5:userJPA.delete(id);
    应该改为 userJPA.deleteById(id);
    Joey_Zjy:@恒宇少年 我把id类型改为bigint也不行
    恒宇少年:实体主键数据类型的问题,欢迎你加入我的知识星球讨论技术以及为你解答技术问题
  • 0b660fec864f:我最近又试了试这个项目,现在这个保存方法是不支持中文的
    http://localhost:8080/user/save?name=xiaowu&;age=18&address=北京

    出现了sql错误:
    java.sql.SQLException: Incorrect string value: '\xE5\x8C\x97\xE4\xBA\xAC...' for column 't_address' at row 1

    我记得以前是可以的呀。
    恒宇少年:@海边_拾贝 不是坑你啊,这是常识,😄
    0b660fec864f:@恒宇少年
    我去网上百度了一下,还真是这个原因。
    解决办法:http://www.cnblogs.com/wangjikun/p/5687370.html
    楼主,你是故意挖的这个坑的吗?欺负我MySQL用的不熟
    :pensive: :broken_heart:
    恒宇少年:@海边_拾贝 跟你数据库字符集有关系
  • 0b79024a20ea:输出的json格式化是哪里配置的呢?
    0b79024a20ea:@恒宇少年 ok
    恒宇少年:@辛勤与醉了 看下面的章节
  • 32ab83b99162:save的时候报错com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.hibernate_sequence' doesn't exist,把@GeneratedValue改成@GeneratedValue(strategy = GenerationType.IDENTITY)就可以了
    8181339ab7d1:@恒宇少年哦哦,
    恒宇少年:@往忆丶华年 新版本的spring-data-jpa有所变动
    8181339ab7d1:是必须要指定主键生成策略吧,我也遇到这个问题了,按你的办法确实解决了
  • 0b660fec864f:写得是在是太好了,很有帮助:clap: :clap: :clap:
    mohaoyang:不错不错,
    恒宇少年:@海边_拾贝 谢谢你
  • ea74ae77f84d:我用2.0.2版本得springboot 按照楼主得配置之后就新增方法一直报错
    Hibernate: select next_val as id_val from hibernate_sequence for update
    2018-05-31 18:12:44.747 ERROR 9100 --- [nio-8080-exec-2] o.hibernate.id.enhanced.TableStructure : could not read a hi value

    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'td_clotherp.hibernate_sequence' doesn't exist
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_121]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_121]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_121]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_121]
    8f3ef6baa4b3:Field userJpa in **controller required a bean of type UserJpa,that could not be found.这个按照你的步骤来的,有这个问题,求指导;另外@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)是这样的,不然会报datasource的错误,用这个方法解决的
    椛源:Consider defining a bean named 'entityManagerFactory' in your configuration.
    不知道,这个问题是什么错误
    ea74ae77f84d:问题找到了
    @ID
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @column(name = "t_id")
    private Long id;
    实体里面得@GeneratedValue注解后面还得加上设置自增主键得备注
  • f76f4b7c513e:不错不错,最近也在学习SpringBoot.博主有整合Mybaitis的么?
    恒宇少年:@陌上独醉赏昙花 换成druid的starter
    f76f4b7c513e:@恒宇少年 好的,谢谢博主。对了,阿里的这个druid监控,spring boot2.0.2版本需要改什么东西么。我按照你文中的配置,提示白页错误。
    恒宇少年:@陌上独醉赏昙花 可以去看看我的mybatis enhance
  • 藏在车底的阿杜:报错了
    C:\Users\Administrator\Downloads\新建文件夹 (11)\imooc-o2o-master\demo11\src\main\java\com\example\demo11\controller\UserController.java
    Error:(32, 24) java: 不兼容的类型: java.lang.Long无法转换为com.example.demo11.entity.UserEntity
    f76f4b7c513e:看你的报错位置,是不是方法的返回值类型应该是Long类型的,而你写成了entity对象
  • 94e2a5c090e3:这一章的打包方式可以用jar吗
    智炜呀:可以 jar的启动和war是不一样的 但是jar的好用 因为使用jar启动默认就是自带tomcat的
  • 7953294490a8:没有生成 ServletInitializer 类是什么原因啊
    7953294490a8:@恒宇少年 好的,谢谢
    恒宇少年:@gnauhsills war类型的项目才会生成
  • 9c7314dcb9e2:用jap做save时出现重复数据。
  • 14d0dae8f46e:The method findAll() is undefined for the type UserJPA为什么会报这个错误啊?
  • 3ffbf6e3ed46:很难受 看这一章 连接mysql 需要ssl 但是根本就没接触过这个 我看您的文章也没有这个问题呀
    8181339ab7d1:@Crachman 加了useSSL=true我的会出现另一个错误,加了useSSL=false就好了。
    fae38e5a8474:加上&useSSL=true即可。如下
    url: jdbc:mysql://127.0.0.1:3306/springboot?characterEncoding=utf8&useSSL=true
    恒宇少年:@Me_ed4b 那应该是你数据的问题,安装的时候是不是开启了ssl功能?
  • Jafir:mybatis 可以替换 jpa吧?
    恒宇少年:@Jafir 当然可以
  • yunqing_71:@ID
    @GeneratedValue(strategy = GenerationType.IDENTITY)//请问楼主你不写括号里这句
    //怎么实现添加成功的?
    @column(name = "t_id")
    private Long id;
    恒宇少年:@yunqing_71 默认方式
  • fb6df8a0a958:删除的时候,根据id删除应该是userJPA.deleteById(),而不是delete()
  • Fussa:很受用, 谢谢! 好像有个小错误, 应该是: userJPA.deleteById(id) 吧?
    Reborn_L:@恒宇少年 springboot2.0版本确实是deletebyId,建议楼主添加补充。
    Fussa:@恒宇少年 找到了, 是我的环境不一样, 我加载的是 springboot 2.0, 那个方法已经改成的deleteById(ID id)了, 1.5.2下没错
    恒宇少年:@Fussa 你再去看看方法
  • 10cdaaff6bcb:save 只能操作原有 id !!!
    不能添加指定新的id
    直接不写 id 会报错!

    There was an unexpected error (type=Internal Server Error, status=500).
    error performing isolated work; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: error performing isolated work
    恒宇少年:@世间本无善恶 可以添加自定义的id,了你去看下主键策略
  • b2efe7751b24:为什么我用jpa的findall方法查不出数据,页面没报错,就是数据是空的,可是表里面是有数据的
  • 680ec9fc2224:为什么 我运行时报 Failed to load property source from location 'classpath:/application.yml' ?
    96a14354465e:@恒宇少年 我也遇到同样的问题,后来发现是springboot版本升到1.5.9后,Hibernate5.0配置的naming-strategy属性失效了。改成:physical_naming_strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy 就可以了,通过实测。
    Hibernate升到5.1版本,之前的hibernate.ejb.naming_strategy将不再被支持,而是被替换成了两个属性:
    implicit naming strategy:隐式命名策略,使用此属性当我们使用的表或列没有明确指定一个使用的名称 。
    physical naming strategy:物理命名策略,用于转换“逻辑名称”(隐式或显式)的表或列成一个物理名称。
    对于PhysicalNamingStrategyStandardImpl有DefaultNamingStrategy的效果;对于SpringPhysicalNamingStrategy 有ImprovedNamingStrategy的效果。
    恒宇少年:@yjw_jack maven clean项目再重试
  • 9ddad2caa733:谢谢 看了之后 受益匪浅:smile::smile:
  • 893ce07ef437:本人拙见,spring boot已经内置了tomcat,这里可以不对tomcat进行依赖。
    恒宇少年:@墨尔本没有彩虹 对可以的,不过如果你部署在外部容器时,需要添加配置
  • ef34426a1d98:有没有JPA对多表查询或者关联表查询的解释额。我用了JPA,一些关联查询的不知道怎么写。现在都闲置了(个人学习的)
    恒宇少年:@欲望傍身_3bfc 你要去详细了解get与post请求了
    9e6386e867a2:为什么我的增加save用post请求,一直报405错误,换成get请求就能获取到数据啊
    恒宇少年:@丨个猪头个三 查询建议使用querydsl,或者建立关系
  • 559d91bfd641:坐等更新JPA...
    恒宇少年:@朱寒峥 我会尽可能的都更新,公司事情比较多,需要更新的内容也比较多
  • c55ff79fc4d5:请问一下,controller里边的方法为什么没有加@ResponseBody标签,我用eclipse执行代码会发生跳转错误,加上@ResponseBody标签则正常
    恒宇少年:@蒙圈的阿猴 不客气,相互学习,相互成长,可以加群一块讨论问题
    c55ff79fc4d5:@恒宇少年 感谢解答
    恒宇少年:@蒙圈的阿猴 这是个基础问题,如果你想返回json数据,应用于ajax异步请求就得加上这个标签,或者把@Controller换成@RestController
  • a91979ecd431:你好,你举得例子都是简单的基本类型,有没有复杂对象(对象中成员变量是其他对象、其他对象数组),有一对多、多对多关系之类的。
  • 3afcd797f39f:建议:查GET,增POST,改UPDATE,删DELETE,不要全部都是GET
    3afcd797f39f:@YouGuangFu 更新数据
    YouGuangFu:put用于什么情况啊
    恒宇少年:@WanaxYoung 好的,以后我在写文章时会注意的,感谢指教
  • 51f8f2a6f721:CREATE TABLE `t_user` (
    `t_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
    `t_name` VARCHAR(30) NULL DEFAULT NULL COMMENT '名称',
    `t_age` INT(10) NULL DEFAULT NULL COMMENT '年龄',
    `t_address` VARCHAR(100) NULL DEFAULT NULL COMMENT '家庭住址',
    PRIMARY KEY (`t_id`)
    )
    COLLATE='utf8_general_ci'
    ENGINE=InnoDB
    ;
    恒宇少年:@我家有个艳 根据项目实际情况做出修改
    51f8f2a6f721:写得很好!很有条理,一节一节课跟着做
    51f8f2a6f721:建表语句字符集改一下,才支持中文,哈哈
  • summer_abc:楼主辛苦了,我也试图写过这样的系列文章,但是写着写着就发现,难易程度不好把控,写的太详细了,基础比较好的会没有耐心看,反之,技术基础不是太好的有说你挖坑。
    看到楼主的文章,着实受教了
    恒宇少年:@lixian13149999 谢谢,我也是尽力而为,写文章确实存在你说的那种难度把控问题,尽可能的细化也挺好,会的人可以跳着看
  • 飘雨0103:用这个技术,以后开发就简单了
    恒宇少年:@小妹妹别跑 是啊,来源框架一直为我们提供便利
  • 飘雨0103:简单了
    恒宇少年:@小妹妹别跑 ?

本文标题:第三章:SpringBoot使用SpringDataJPA完成C

本文链接:https://www.haomeiwen.com/subject/bdnaottx.html