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;
}
}
访问静态资源
-
将资源放入
"resources/static/image/32.jpg" -
访问
http://127.0.0.1:8080/image/32.jpg -
其他资源类似
使用HTML模板freemarker
- 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
- 添加配置
resource/application.properties
# 设定ftl文件路径
spring.freemarker.template-loader-path=classpath:/templates
spring.freemarker.suffix=.ftl
- 添加HTML模板
resources/templates/stu/list.ftl
<html>
<heade lang="en">
<meta charset="UTF-8" />
<title>template</title>
</heade>
<body>
欢迎 ${Loginname}
</body>
</html>
- 添加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
- 添加依赖
<!-- 创建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>
- 添加配置
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
-
编写代码
-
创建一个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;
}
}
- 创建用户接口
package ai.ynt.learn.service;
import ai.ynt.learn.bean.User;
public interface UserService {
public void registerUser(User user);
}
- 创建用户接口的实现
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());
}
}
- 编写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