人生若只如初见

spring-boot learn

2020-03-24 7

spring-boot learn

创建项目

创建maven项目添加依赖

    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.2.0.RELEASE</version>
    </parent>

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

开启自动配置/指定扫描包

package ai.ynt.learn;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;

@EnableAutoConfiguration
@ComponentScan(basePackages = {"ai.ynt.learn.controller", "ai.ynt.learn.service"}) // 配置扫描的包,就可以加载多个控制器
public class Application {

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

编写Controller

package ai.ynt.learn.controller;

import ai.ynt.learn.bean.User;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class Controller {

    @RequestMapping("/")
    @ResponseBody
    public String hello() {
        return "Hello Java Learn";
    }
}

启动程序访问http://127.0.0.1:8080即可

记录全局异常

记录日志/ERROR日志记录姿势

package ai.ynt.learn.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.WebRequest;

import java.util.HashMap;
import java.util.Map;

@ControllerAdvice
public class GlobalExceptionHandler {
    private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    @ExceptionHandler(RuntimeException.class)   // 捕获运行时异常
    @ResponseBody
    public Map<String, Object> exceptionHandler(Exception ex, WebRequest request){
        HashMap<String, Object> map = new HashMap<String, Object>();
        map.put("ErrorCode", "1001");
        map.put("ErrorMessage", "系统错误");
        logger.error("request: {}", request);
        logger.error("error: {}", ex.getMessage(), ex);
        return map;
    }
}

访问静态资源

  1. 将资源放入"resources/static/image/32.jpg"

  2. 访问http://127.0.0.1:8080/image/32.jpg

  3. 其他资源类似

使用HTML模板freemarker

  1. 添加依赖
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
  1. 添加配置resource/application.properties
# 设定ftl文件路径
spring.freemarker.template-loader-path=classpath:/templates
spring.freemarker.suffix=.ftl
  1. 添加HTML模板 resources/templates/stu/list.ftl
<html>
<heade lang="en">
    <meta charset="UTF-8" />
    <title>template</title>
</heade>
<body>
    欢迎 ${Loginname}
</body>
</html>
  1. 添加Controller
package ai.ynt.learn.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Map;

@Controller
@RequestMapping("/stu")
public class StudentController {

    @RequestMapping("/list")
    public String studentList(Map<String, Object> data){
        data.put("Loginname", "TTTTTTT");

        return  "stu/list";
        // 返回的"stu/list"即模板templates目录下的"stu/list.ftl"文件
        // data里面的内容会自动填充到模板
    }
}

使用数据库JDBC

  1. 添加依赖
        <!-- 创建bean使用 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!-- JDBC -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!-- 数据库驱动 mysql connector -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
  1. 添加配置resource/application.properties
# 配置数据库信息
spring.datasource.url=jdbc:mysql://localhost:3306/test1
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  1. 编写代码

  2. 创建一个user bean

package ai.ynt.learn.bean;

import lombok.Data;

@Data
public class User {
    String name;
    Integer age;
    String mail;

    public User(String name, Integer age, String mail) {
        this.name = name;
        this.age = age;
        this.mail = mail;
    }
}
  1. 创建用户接口
package ai.ynt.learn.service;

import ai.ynt.learn.bean.User;

public interface UserService {

    public void registerUser(User user);
}
  1. 创建用户接口的实现
package ai.ynt.learn.service.impl;

import ai.ynt.learn.bean.User;
import ai.ynt.learn.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void registerUser(User user) {
        String sql = "INSERT INTO user (name, age, mail) VALUES (?, ?, ?)";
        jdbcTemplate.update(sql, user.getName(), user.getAge(), user.getMail());
    }
}
  1. 编写Controller
package ai.ynt.learn.controller;

import ai.ynt.learn.bean.User;
import ai.ynt.learn.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    UserService userService;

    @RequestMapping("/register")
    @ResponseBody
    public String register() {
        User user = new User("boot", 12, "12@qq.com");
        userService.registerUser(user);
        return "Success";
    }
}

数据库及数据表的创建

CREATE DATABASE `test1` /*!40100 DEFAULT CHARACTER SET utf8mb4 */
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `mail` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4
0 0