• SpringBoot 初入门


    SpringBoot 初入门

    关于介绍什么之类的就不讲了,主要做一下学习记录。


    1. 启动方式

    1. IDEA 启动

    2. 命令行启动:

    mvn spring-boot:run
    
    1. 部署到服务器启动:

    先进行打包,

    mvn clean package
    

    移动到项目的 target 目录下,可以看到一个后缀名为 jar 的文件,便是刚刚我们打包的 jar 包,

    使用命令行启动:

    java -jar target/luckymoney-0.0.1-SNAPSHOT.jar 
    
    1. 传参方式启动:
    java -jar -Dspring.profiles.active=prod target/luckymoney-0.0.1-SNAPSHOT.jar 
    

    使用 prod 环境。(多环境配置:使用开发和生产环境)


    2. 配置文件

    配置文件有两种写法:

    • application.properties
    server.port=8081
    server.servlet.context-path=/luckmoney
    
    • application.yml
    server:
      port: 8081
      servlet:
        context-path: /luckmoney
    

    推荐后一种写法,结构更清晰。


    3. 项目配置

    a. 单个配置 @value

    在配置文件中使用配置,如下写法:

    minMoney: 0.01
    description: 最少要发${limit.minMoney}元,最多要发${limit.maxMoney} 元。
    

    然后传入参数:

    @Value("${minMoney}")
    private BigDecimal minMoney;
    
    b. 对象配置 @ConfigurationProperties

    如果配置项很多,并且相互联系,把配置放到对象类中,使用 @Component@ConfigurationProperties 。然后使用 @Autowired 方式自动注入 Controller。

    application.yml:

    limit:
      minMoney: 0.01
      maxMoney: 9999
      description: 最少要发${limit.minMoney}元,最多要发${limit.maxMoney} 元。
    

    对象配置类 LimitConfig.java :

    @Component
    @ConfigurationProperties(prefix = "limit")
    public class LimitConfig {
        private BigDecimal minMoney;
        private BigDecimal maxMoney;
        private String description;
    	// getter 和 setter 方法
    }
    

    属性注入 Controller.java :

    @RestController
    @RequestMapping("/hello")
    public class HelloController {
        @Autowired
        private LimitConfig limitConfig;
        // 实现方法
    }
    

    4. Controller 的使用

    名称 作用
    @Controller 处理http请求
    @RestController Spring4之后新加的注解,原来返回json需要@ResponseBody配合@Controller
    @RequestMapping 配置url映射
    @PathVariable 获取url中的数据
    @RequestParam 获取请求参数的值

    @Controller 可以在 springboot 模板注释中用到。

    配合:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    

    @ConrollerResponseBody 返回原来的 json。

    @ResponseBody 可以在方法上或类上使用。

    总结:@Controller + ResponseBody = @RestController

    举个例子:

    @RestController
    @RequestMapping("/hello")
    public class HelloController {
        @Autowired
        private LimitConfig limitConfig;
    
        // RequestParam:地址栏得到 /say?id=1 这种,后两个属性是设置不传参默认为 0
        @GetMapping("/say")
        public String say(@RequestParam(value = "id", required = false, defaultValue = "0") Integer myId) {
            return "id:" + myId;
        }
        
        // PathVariable:地址栏得到 /say1/1 这种
        @GetMapping("/say/{id}")
    	public String say2(@PathVariable("id") Integer id) {
       		return "id:" + id;
    	}
    }
    

    @GetMapping 可以传数组。如:

    @GetMapping({"hello", "say"})
    

    可以在类上使用 @RequestMapping("/xxx"), 方法上使用 GetMapping("/yyy")PostMapping("/yyy") 来达到:/xxx/yyy 的效果。


    5. 数据库操作

    springboot 操作数据库是通过 Spring-Data-Jpa 来实现的。

    JPA(Java Persistence API)定义了一系列对象持久化的标准。

    1. maven 依赖:
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    

    注意:在springboot 中的maven 依赖不用加版本号,springboot已经帮我们选定好了版本号。

    2. 在 application.yml 中设置:
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/luckmoney?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
        username: root
        password: xxxx
    
      jpa:
        hibernate:
          ddl-auto: update
    #      ddl-auto: create (create表示创建,update表示更新)
        show-sql: true   # 控制台打印sql语句
    
    3. 建表:

    建表也可以直接在 springboot 中建,不需要在数据库中建表。

    @Entity
    public class Luckmoney {
    
        // 构造方法
        public Luckmoney() {
        }
        
        @Id
        @GeneratedValue
        private Integer id;
    
        private BigDecimal money;
    
        // 发送方
        private String producer;
    
        // 接收方
        private String consumer;
    
    	// getter 和 setter 方法
    }
    
    4. 增删改查

    在 springboot 中我们也不需要自己去实现增删改查的方法发,可以自定义个接口,继承 JpaRepository 类,再编写 controller 类实现接口就行了。

    接口类:

    public interface LuckmoneyRepository extends JpaRepository<Luckmoney, Integer> {
    }
    

    JpaRepositroy 参数中第一个是:定义的 Entity,第二个是主键的类型。

    实现类:

    @RestController
    public class LuckymoneyController {
    
        @Autowired
        private LuckmoneyRepository repository;
    
        // 获取红包列表
        @GetMapping("/luckmoneys")
        public List<Luckmoney> list() {
            return repository.findAll();
        }
    
    }
    

    6. 事务操作

    事务操作一般都放在 service 文件下。

    注意:

    事务是指数据库的事务,不是指 java 事务,@Transactional 注解只是添加了执行,回滚的操作,具体的事务执行还是要根据数据库情况。比如有些数据库不支持事务,MySQL中 MyISAM 引擎是不支持事务的。

    • 查看当前数据库支持的引擎和默认的数据库引擎:
    show engines;
    
    • 修改表引擎:
    alter table luckmoney ENGINE=InnoDB;
    
    • 查看当前表的创建语句:
     show create table luckmoney 
    

    7. 具体代码

    具体代码:luckmoney

  • 相关阅读:
    你想要的是水还是杯子?
    有哪些违背“君子之风”的无知行为
    如何给无限级树添加大纲目录索引
    0的哲学:简化规则
    计算机中的不可解问题——停机问题
    java基于mongodb实现分布式锁
    开源基于docker的任务调度器pipeline,比`quartzs` 更强大的分布式任务调度器
    解决 VSCode 的模块导入别名问题
    hugegraph 源码解读 —— 索引与查询优化分析
    Java xss攻击拦截,Java CSRF跨站点伪造请求拦截
  • 原文地址:https://www.cnblogs.com/weixuqin/p/11079375.html
Copyright © 2020-2023  润新知