Project Metadata 设置项目坐标及项目名称
坐标Group ID是项目组织唯一的标识符,实际对应项目中的package包。
坐标Artifact ID是项目的唯一的标识符,实际对应项目的project name名称,Artifact不可包含大写字母。
创建 controller.HelloController
/**
* @author MuXin
* @date 2020/11/2 14:04
*/
@RestController //修饰该Controller所有的方法返回JSON格式,直接可以编写Restful接口
@EnableAutoConfiguration //让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置
public class HelloController {
@RequestMapping("/hello")
public String sayHW() {
return "Hello World";
}
}
启动主程序,打开浏览器访问 http://localhost:8080/hello 即可查看调用结果
在进行 Web 端开发时,需要引用大量的js、css、图片等静态资源;
springboot 默认提供的静态资源目录位置需置于classpath下,目录名需符合如下规则:
/static
/public
/resources
/META-INF/resources
@ExceptionHandler 表示拦截异常;
@ControllerAdvice 是 controller 的一个辅助类,最常用的就是作为全局异常处理的切面类;
@ControllerAdvice 可以指定扫描范围;
@ControllerAdvice 约定了几种可行的返回值,如果是直接返回 model 类的话,需要使用 @ResponseBody 进行 json 转换
/**
* @author MuXin
* @date 2020/11/2 14:43
*/
@ControllerAdvice //全局异常处理、全局数据绑定、全局数据预处理
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)
@ResponseBody
public Map<String, Object> exceptionHandler() {
HashMap<String, Object> hm = new HashMap<>();
hm.put("errorCode", "101");
hm.put("errorMsg", "系统错误");
return hm;
}
}
Spring Boot提供了默认配置的模板引擎主要有以下几种:
Thymeleaf
FreeMarker
Velocity
Groovy
Mustache
Spring Boot建议使用这些模板引擎,避免使用JSP,若一定要使用JSP将无法实现Spring Boot的多种特性
当你使用上述模板引擎中的任何一个,它们默认的模板配置路径为:src/main/resources/templates。当然也可以修改这个路径,具体如何修改,可在后续各模板引擎的配置属性中查询并修改。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-freemarkerartifactId>
dependency>
/**
* @author MuXin
* @date 2020/11/2 15:12
*/
@Controller
public class IndexControler {
@RequestMapping("/index")
public String index(ModelMap map) {
map.put("name", "测试");
return "index";
}
}
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8"/>
<title></title>
</head>
<body>
${name}
</body>
</html>
spring:
freemarker:
allow-request-override: false
cache: true
check-template-location: true
charset: utf-8
content-type: text/html
expose-request-attributes: false
expose-session-attributes: false
expose-spring-macro-helpers: false
suffix: .ftl
template-loader-path: classpath:/templates/
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-jdbcartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/sbdemo?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
username: root
password: 123456
/**
* @author MuXin
* @date 2020/11/3 10:52
*/
@Service
public class UserServiceImpl implements UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void createUser(String name, Integer age) {
jdbcTemplate.update("insert into users values (?,?)", name, age);
}
}
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8"/>
<title></title>
</head>
<body>
${name}
</body>
</html>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
/**
* @author MuXin
* @date 2020/11/3 14:12
*/
@Mapper
@Repository
public interface UserMapper {
@Select("select * from users where name =#{name}")
User findByName(@Param("name") String name);
@Insert("insert into users(name,age) values(#{name},#{age}")
int insert(@Param("name") String name, @Param("age") Integer age);
}
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-jpaartifactId>
dependency>
/**
* @author MuXin
* @date 2020/11/3 14:31
*/
@Entity(name = "users")
public class User {
@Id
@GeneratedValue
private Integer id;
@Column
private String name;
@Column
private Integer age;
public User() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
/**
* @author MuXin
* @date 2020/11/3 14:50
*/
public interface UserDao extends JpaRepository<User,Integer> {
}
/**
* @author MuXin
* @date 2020/11/3 14:52
*/
@RestController
public class UserController {
@Autowired
private UserDao userDao;
@RequestMapping("/user")
public String user(Integer id) {
Optional<User> user = userDao.findById(id);
return user.get().getName();
}
}