1.1微服务的概念
一个项目可以由多个小型项目(微服务)构成。
Spring Boot可以快速开发微服务模块。
- 简化J2EE开发
- 整个Spring技术栈的整合(Spring MVC 、Spring等)
- 整个J2EE技术的整合(Mybatis、redies等等)
1.2 第一个SpringBoot应用
1.2.1 环境准备
- 安装JDK运行环境
- 安装Maven环境
- IDE中安装Maven
1.2.2 什么是SpringBoot
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,同时运行时可配置;AOP框架主要针对模块之间的交叉关注点进行模块化。Spring框架的AOP框架仅提供基本的AOP特性,虽无法与AspectJ框架相比,但通过与AspectJ的集成,也可以满足基本需求。Spring框架下的事务管理、远程访问等功能均可以通过使用SpringAOP技术实现。Spring的事务管理框架为Java平台带来了一种抽象机制,使本地和全局事务以及嵌套事务能够与保存点一起工作,并且几乎可以在Java平台的任何环境中工作。Spring集成多种事务模板,系统可以通过事务模板、XML或Java注解进行事务配置,并且事务框架集成了消息传递和缓存等功能。Spring的数据访问框架解决了开发人员在应用程序中使用数据库时遇到的常见困难。它不仅对Java:JDBC、iBATS/MyBATIs、Hibernate、Java数据对象(JDO)、ApacheOJB和ApacheCayne等所有流行的数据访问框架中提供支持,同时还可以与Spring的事务管理一起使用,为数据访问提供了灵活的抽象。Spring框架最初是没有打算构建一个自己的WebMVC框架,其开发人员在开发过程中认为现有的StrutsWeb框架的呈现层和请求处理层之间以及请求处理层和模型之间的分离不够,于是创建了SpringMVC。
SpringBoot所具备的特征有:
(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
(2)内嵌Tomcat或Jetty等Servlet容器;
(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
(4)尽可能自动配置Spring容器;
(5)提供准备好的特性,如指标、健康检查和外部化配置;
(6)绝对没有代码生成,不需要XML配置。
为什么会有SpringBoot
- 在我们使用SSM框架的时候,光是配置文件就要配置大概30min-1h之间,要配applicationContext.xml、web.xml、dispatcher-servlet.xml 、mybatis-config.xml、mybatis-mapper.xml文件等等。但是SpringBoot只要不到5分钟就能解决配置的问题。
- SSM框架里面不论是谁写的配置文件,除了包名类名不一样,但是绝大部分的内容几乎就是样板化的。
1.2.3 创建第一个SpringBoot项目
通过Spring官网初始化一个项目
点击前往创建:Spring官网
如下图:
选好上面之后,再选择项目的类型:
创建并下载导入Eclipse中即可,导入(过程可能比较慢,看你网速好不好
)成功后,会有以下文件:
src/main/java : 存放一些Java文件,比如pojo controller service
src/main/resources/static :存放一些静态资源文件,比如css js png jpg等等
src/main/resources/templates: 存放一些模板文件,比如freemarker (默认不支持jsp)
application.properties : spring boot的一些配置
通过创建Maven项目创建
略
使用IDEA创建一个SpringBoot项目
创建完成之后,你会看见:
这个结构,我们引入依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.njpji</groupId>
<artifactId>demo02</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<dependencies>
<!-- spring boot的相关启动 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
<!-- log4j -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- 使用Jasper引擎解析JSP -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!--jsp支持 -->
<!-- servlet 依赖. -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 没有该配置,devtools 不生效 -->
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
</project>
我们再编写启动类:
package cn.njpji.start;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class StartApplication {
public static void main(String[] args) {
SpringApplication.run(StartApplication.class);
}
}
启动之后,如果控制台显示这种大大的Spring就是配置成功了:
然后在这个基础之上,我们再创建一个Controller层:
package cn.njpji.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;
@Controller
public class HelloWorldController {
@RequestMapping("/return")
@ResponseBody
public Map<String,Object> returnmap(){
Map<String,Object> map = new HashMap<String, Object>();
map.put("name","tom");
map.put("sex","男");
map.put("age",13);
return map;
}
}
然后我们重新启动应用,使用postman测试工具测试:
总结:用springboot一时爽,一直用一直爽!
1.3 Spring boot的配置文件
还是就上面的项目,我们在项目中添加配置文件application.properties
:(配置文件名称固定,不可随意更改)
# 更改应用的默认端口
server.port=8081
我们再来启动我们的项目,再重新使用测试工具测试:
可见访问端口变成了port=8081。
1.4 SpringBoot整合Mybatis
1.4.1 整合XML形式的Mybatis
更新我们的依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.njpji</groupId>
<artifactId>demo02</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<dependencies>
<!-- spring boot的相关启动 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
<!-- log4j -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- 使用Jasper引擎解析JSP -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!--jsp支持 -->
<!-- servlet 依赖. -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- mysql数据库的依赖:https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- springboot支持整合依赖: https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<!-- mybatis整合spring依赖: https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/p6spy/p6spy -->
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 没有该配置,devtools 不生效 -->
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
</project>
然后编写配置文件application.properties
:
# 更改应用的默认端口
server.port=8081
# 将工程名改为虚拟路径(默认为: /)
server.context-path=/heebechoi
# 配置数据库的连接信息
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=mysql
spring.datasource.password=mysql
spring.datasource.url=jdbc:mysql://localhost:3306/test
# 配置mybatis的信息
mybatis.config-location=classpath:mapper/*.xml
再然后编写我们的学生类:
package cn.njpji.pojo;
import lombok.Data;
@Data
public class Student {
private int id;
private String name;
}
然后编写dao层(Mapper层):
package cn.njpji.mapper;
import cn.njpji.pojo.Student;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface StudentMapper {
/**
* 查询所有学生信息
* @return
*/
public List<Student> queryStudent();
}
编写service层:
package cn.njpji.service.impl;
import cn.njpji.mapper.StudentMapper;
import cn.njpji.pojo.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class StudentServiceImpl implements cn.njpji.service.StudentService {
@Autowired
private StudentMapper studentMapper;
/**
* 查询学生信息
* @return
*/
@Override
public List<Student> queryStudent() {
return studentMapper.queryStudent();
}
}
再将Service类抽成接口:
package cn.njpji.service;
import cn.njpji.pojo.Student;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface StudentService {
List<Student> queryStudent();
}
编写controller层:
package cn.njpji.controller;
import cn.njpji.pojo.Student;
import cn.njpji.service.StudentService;
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;
import java.util.List;
@Controller
public class StudentController {
@Autowired
private StudentService studentService;
@RequestMapping("/queryStduent")
public @ResponseBody List<Student> queryStudent(){
return studentService.queryStudent();
}
}
编写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="cn.njpji.mapper.StudentMapper">
<!--查询所有学生的信息-->
<select id="queryStudent" resultType="cn.njpji.pojo.Student">
select * from student
</select>
</mapper>
最后我们的项目结构:
启动应用:
package cn.njpji;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan(basePackages = "cn.njpji.mapper")
public class StartApplication {
public static void main(String[] args) {
SpringApplication.run(StartApplication.class);
}
}
最后我们再来看看我们的执行过程:
其实就是:
1.4.2 整合注解形式的Mybatis
就是在方法上添加注解实现,不需要写mapper文件:
package cn.njpji.mapper;
import cn.njpji.pojo.Student;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface StudentMapper {
/**
* 查询所有学生信息
* @return
*/
@Select("select * from student")
public List<Student> queryStudent();
}
- 不适合动态SQL的实现
- 建议和mapper.xml结合使用
转载:https://blog.csdn.net/Mr_C_python/article/details/106695193