springBoot中碰见的问题

学了段时间java后,想找一框架去学习,听说spring boot比较好,就学习学习,结果碰见一系列问题

1在配置数据库时看准文件如果在application.properties文件中写配置是

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/db_test?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

如果在application.yml中写

(重要的事说三次 

  例如 

port: 8082  

这个中间是有空格的!
这个中间是有空格的!
这个中间是有空格的! )
server:
  port: 8082
  servlet.context-path: /bucket
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/bucketSpring?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

2配置中

  

ddl-auto: update

    这个值有五个,建议使用update这样每次运行都是更新表,如果选择create,每次运行项目会重新创建表,当然你表中数据也一起删除,如果数据重要,你就准备跑路吧

3有关事务的问题

在加了注释@Transactional后发现插入两条数据后没发生事务回滚
这是因为如果用的是springBoot2.0的话需要改下引擎。
把表引擎改成InnoDB
或者在配置中加入
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
  #不加这句则默认为myisam引擎

4数据库操作问题

  使用findOne()方法后发现报错

  Spring Boot 2.0版本将findByID()替代了findOne();并且返回的也不再是实体类的类型。而是Optional类型

    @GetMapping(value = "selectIdTest")
    public Optional selectIdTest(
            @RequestParam(value = "id",required = true) Integer id
    ){
        return testRepository.findById(id);
    }

5用springboot创建表不能自己创建也不报错

因为创建的实体类的包和启动类的包名不同

比如

BucketApplication .java文件中包名是  com.zhu.app;

package com.zhu.app;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class BucketApplication {

    public static void main(String[] args) {
        SpringApplication.run(BucketApplication.class, args);
    }
}

而在实体类中包名是  com.zhu.obj;

package com.zhu.obj;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class CollectionObj {
    @Id
    @GeneratedValue
    private Integer collectionId;
}

这样就扫描不到实体类,所有创建不了

我的解决办法

把实体类的包移动到 com.zhu.app 中  于是我的实体类包名是  com.zhu.app.obj;

ider编辑器的两个快捷键

ALT+Enter导入包

在编辑框中右击,选择generator,可以拖选住你想要生成get、set方法的属性,点击完成即可自动生成get和set方法。快捷键为:alt+insert

目前我作为一个菜鸟还在学习中,以后发现问题继续做笔记

原文地址:https://www.cnblogs.com/zhuyupingit/p/9561890.html