zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    我所理解的NAT
    H3C防火墙安全策略故障排查思路
    职场建议
    小型企业典型网络内部拓扑
    echo&printf
    笔挺站立 昂首挺胸
    Jordan Peterson 的建议
    刚才思考的两个问题
    高手的见解
    一个企业网络管理人员的注意事项
  • 原文地址:https://www.cnblogs.com/zhuyupingit/p/9561890.html
Copyright © 2011-2022 走看看