一.引言和优势
二.项目约定
传统项目开发:
maven:项目构建工具
ssm:
ssm:
src/main/java 用来存放运行时java代码
com.cwj.entity
.dao
.util
.service
.....
src/main/resource 用来存放运行时需要的配置文件
spring.xml
springmvc.xml
mybatis mapper
log4j.properties
......
src/test/java 用来存放测试时的Java代码
src/test/resource 用来存放测试时的需要配置文件
spring.xml
springmvc.xml
mybatis mapper
log4j.properties
springboot:
约定:
1.spring boot约定spring boot项目中有且只能存在一个入口类(Class)
类名推荐:XXX(项目名)Application.java
a.入口类必须在所有子包之上
b.入口类中必须存在一个启动项项目main函数
2.springboot项目约定必须在项目根目录中存在一个名字为application.yml |或application.properties
springboot:
src/main/java 用来存放运行时java代码
com.cwj.entity
.dao
.util
.service
.sys.xxx
Application-----------
.....
src/main/resource 用来存放运行时需要的配置文件
application.yml
application.properties ------->springboot配置文件
......
src/test/java 用来存放测试时的Java代码
src/test/resource 用来存放测试时的需要配置文件
spring.xml
springmvc.xml
mybatis mapper
log4j.properties
三.环境搭建
环境要求:
1.引依赖
<!--继承springboot的父项目 便于维护-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
</parent>
<dependencies>
<!--引入 springboot Web支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2.在resources中创建application.yml
3.创建XXXApplication入口类,必须有main函数 必须加注解@Spring boot Application 必须在main函数中加入SpringApplication.run()方法
package com.cwj;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//修饰范围:用在类上 只能用在入口类上,只能出现一次
//作用:表示这个类是一个spring boot的入口类 启动整个spring boot项目总入口
@SpringBootApplication
public class Application {
public static void main(String[] args) {
//启动springBoot应用 参数1:入口类的类对象 .class 参数2:main函数参数
SpringApplication.run(Application.class,args);
}
}
4.运行main启动项目
出现以上日志证明启动成功
5.测试springboot(微框架) = springmvc(控制器) + spring
package com.cwj.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
//测试控制器 测试地址://localhost:端口号/项目名/请求路径
//注意: springboot项目默认启动 没有项目名 http://localhost:8080/hello
@RequestMapping("hello")
public String hello(){
System.out.println("springboot!");
return "spring boot";
}
}
有此证明验证成功
6.修改tomcat内嵌端口 以及 项目名
由此端口即可修改成功
四.相关注解说明
五.配置文件拆分以及加载外部配置
1.配置文件拆分
2.外部配置
项目启动之前加(--spring.config.location=)等号后写绝对路径
六.管理对象的创建
工厂创建对象
创建单个对象
springboot(微框架)=spring(工厂)用来管理项目对象 创建项目中对象
+
springmvc (控制器)controller
spring 工厂:创建对象?
2种形式:
1.基于配置文件形式创建对象
spring.xml
<bean id="", class="XXX.xxServiceImpl"/>
2.基于注解方式创建对象
@Component 作用:就是在工厂中创建对象 通用的对象创建
@Controller 控制器
@service 业务层
@Repository Dao mybatis用不到
springBoot:如何创建对象?
a.使用原始spring框架中注解创建对象?
@Component 作用:就是在工厂中创建对象 通用的对象创建
@Controller 控制器
@service 业务层
@Repository Dao mybatis用不到
b.使用配置方式创建对象
@Configuratioin:修饰范围:用在类上 ====> spring.xml
作用:代表这个类是一个spring boot中配置类
@Bean注解:作用:创建对象 相当于 spring.xml 书写bean
@Configuration
public class BeanConfig{
@Bean
public User user(){
return new User();
}
@Bean
public User user(){
return new User();
}
.....
可以创建多个对象
}
创建多个对象![](https://i-blog.csdnimg.cn/blog_migrate/c5df8577c94095050a6a4323bcd8a66a.png)
工厂中获取日历对象,获取当前时间
注意:1.@Configuration:用来在工厂中一次性创建多个对象
2.@Component 用来创建单个对象
七.属性注入
基本属性注入
1.@Value 属性注入 重点
package com.cwj.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 用来测试属性注入
*
* */
@RestController
public class InjectionController {
@Value("${name}")
private String name;
@Value("${age}")
private Integer age;
@Value("${price}")
private Double price;
@Value("${birthday}")
private Date birthday;
@Value("${sex}")
private Boolean sex;
@Value("${qqs}")
private String[] qqs;
@Value("${lists}")
private List<String> lists;
@Value("#{${maps}}")
private Map<String,String> maps;
@RequestMapping("/inject")
public String inject(){
System.out.println("Inject ok---------");
System.out.println("name = " + name);
System.out.println("age = " + age);
System.out.println("price = " + price);
System.out.println("birthday = " + birthday);
System.out.println("sex = " + sex);
System.out.println("遍历数组:");
for (String qq : qqs) {
System.out.println("qq = " + qq);
}
System.out.println("-------------------------");
System.out.println("遍历list");
lists.forEach(lists-> System.out.println("lists = " + lists));
System.out.println("==========================");
System.out.println("遍历Map");
maps.forEach((key,value)-> System.out.println("key = " + key+"value ="+value));
System.out.println("++++++++++++++++++++++++++");
return "Inject ok";
}
}
2.在配置文件中定义注入值
对象注入
1.编写对象注入
package com.cwj.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 测试对象注入
*/
@RestController
@ConfigurationProperties(prefix = "orders")//此处可以使用prefix也可以使用value底层可以看出
//修饰范围:用在类上 作用:用来将指定前缀的属性 注入到当前对象中属性名一致属性中
//注意:使用这个注解为属性一次性赋值 必须为属性提供set方法
public class injectionObjectController {
private Integer id;
private String name;
private Double price;
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setPrice(Double price) {
this.price = price;
}
@RequestMapping("/injectObject")
public String injectObject(){
System.out.println("injectObject ok!!!");
System.out.println("id = " + id);
System.out.println("name = " + name);
System.out.println("price = " + price);
return "injectObject ok";
}
}
2.编写配置文件
3.引入依赖构建自定义注入元数据
<dependencies>
<!--此依赖可以根据@ConfigurationProperties构建自定义注入元数据-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<!--代表这个依赖不会被传递 仅此项目使用子项目不会使用-->
<optional>true</optional>
</dependency>
</dependencies>
八.Jsp模板集成
在springBoot框架中默认模板推荐使用Thymeleaf模板,此处先使用jsp后续会更新Thymeleaf模板
1.引入jsp集成jar包
<!--c标签库-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--让内嵌Tomcat具有解析jsp功能-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
2.引入jsp运行插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
小插曲:快速创建一个jsp页面("!"+TAB)创建完成后缺少一个头:
<%@page pageEncoding="UTF-8" contentType="text/html; UTF-8" isELIgnored="false" %>
3.配置视图解析器
总结:第一步引依赖,二:创建webapp,三:配置视图解析器前缀后缀
九.整合mybatis框架
springboot框架整合mybatis:![](https://i-blog.csdnimg.cn/blog_migrate/0749edbb1c3180628c460ecbcccd3c5a.png)
1.引依赖
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.4</version>
</dependency>
<!--mybatis-spring-boot-starter-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
2.配置yml
a.创建数据源
b.创建sqlsessionFactory
c.创建Dao
在入口类上加@MapperScan注解
3.测试
1.建表
2.开发实体类
3.开发Dao接口
package com.cwj.dao;
import com.cwj.entity.UserEntity;
import java.util.List;
public interface UserDao {
//查所有
List<UserEntity> findAll();
void save(UserEntity userEntity);
}
4.开发Mapper配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cwj.dao.UserDao">
<select id="findAll" resultType="UserEntity">
select id,name,birthday,salary
from user
</select>
<insert id="save" keyProperty="id" useGeneratedKeys="true" parameterType="UserEntity">
insert into user values (#{id},#{name},#{birthday},#{salary})
</insert>
</mapper>
5.开发service接口
package com.cwj.service;
import com.cwj.entity.UserEntity;
import java.util.List;
public interface UserService {
List<UserEntity> findAll();
void save(UserEntity userEntity);
}
6.开发service实现类
package com.cwj.service;
import com.cwj.dao.UserDao;
import com.cwj.entity.UserEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@Transactional
public class UserServiceImpl implements UserService{
private UserDao userDao;
@Autowired
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
@Override
public List<UserEntity> findAll() {
return userDao.findAll();
}
@Override
public void save(UserEntity userEntity){
userDao.save(userEntity);
}
}
7.测试serviceImpl
package com.cwj.controller;
import com.cwj.entity.UserEntity;
import com.cwj.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class UserController {
private UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@RequestMapping("/findAll")
public List<UserEntity> findAll(){
return userService.findAll();
}
@RequestMapping("/save")
public void save(UserEntity userEntity){
userService.save(userEntity);
}
}
十.本地测试
1.引入测试依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2.编写测试
十一.devtools热部署工具
十二.日志处理