1. Spring Boot入门;(了解)
2. Spring Boot简介;(了解)
3. Spring Boot简介web;(掌握)
4. Spring Boot测试;(掌握)
5. Spring Boot三层架构;(掌握)
6. Spring Boot 持久化;(掌握)
7. Spring boot模块化开发;(掌握)
2.1、什么是Spring Boot
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。
该框架使用了特定的方式(继承starter,约定优先于配置)来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
Spring Boot并不是一个框架,从根本上将,它就是一些maven库的集合,maven或者gradle项目导入相应依赖即可使用Spring Boot,而且无需自行管理这些库的版本。。
Spring Boot就是一些开发好了maven模块,只需导入对应模块就能做对应事情.只需要springboot提供了哪些模块,每个模块是干嘛的.最终使用时判断要做那个功能,选择对应模块就ok. 该做什么事情了,需要导入哪个模块。
2.2、 为什么要使用Spring Boot
Spring Boot是为简化Spring项目配置而生,使用它使得jar依赖管理以及应用编译和部署更为简单。Spring Boot提供自动化配置,使用Spring Boot,你只需编写必要的代码和配置必须的属性。
使用Spring Boot,只需20行左右的代码即可生成一个基本的Spring Web应用,并且内置了tomcat,构建的fat Jar包通过Java -jar就可以直接运行。
如下特性使得Spring Boot非常契合微服务的概念,可以结合Spring Boot与Spring Cloud(dubbo)和Docker技术来构建微服务并部署到云端:
Springboot是为了简化Spring向的开发. 简单而言,即Spring Boot使编码更简单,使配置更简单,使部署更简单,使监控更简单,使生活变得更美好。!
2.3、Spring Boot提供哪些功能
Spring boot通过spring boot starter项目管理其提供的所有依赖的版本,当升级spring boot时,这些依赖的版本也会随之升级。个人无需指定版本号。但是也可以自定义版本号覆盖springboot的默认值。每个版本的boot都有对应的base spring version,不建议明确地指定spring版本。例如,使用maven时,只需简单的在pom中包含spring-boot-starter-web即引入了Spring MVC和Tomcat的依赖。
下面是Spring Boot在 org.springframework.boot 组下提供的一些Starters:
Spring Boot就是一些开发好了maven模块,只需导入对应模块就能做对应事情.
springmvc
spring jdbc
data jpa
spring-boot-start-mybatis mybatis mybatis
spring-security
事务管理 service
spring-boot-start-test 测试
等等
Springboot没有引入新技术,就是把原来spring相关技术,进行maven模块封装,让我们使用起来更加简单。
3.1、环境要求
3.2、创建Maven项目
org.springframework.boot
spring-boot-starter-parent
1.4.1.RELEASE
添加spring-boot-starter-web依赖
org.springframework.boot
spring-boot-starter-web
(1)新建一个Controller类
(2)新建启动类(App – Main方法)
运行:App
浏览器:http://localhost:8080/hello
即使修改了输出内容也要重启APP,非常麻烦!可以使用spring-boot-devtools来实现!spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动还要更快,更快指的不是节省出来的手工操作的时间。其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为 restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间(5秒以内)变手动为自动,而自己启动由于只加载可变的那一部分代码,效率要得多。使用,添加依赖包:
org.springframework.boot
spring-boot-devtools
true
true
添加spring-boot-maven-plugin:
org.springframework.boot
spring-boot-maven-plugin
true
4.1 引入
前面我们使用Spring Boot能往浏览器中输出一个字符串!实际上我们需要的是跳转到一个页面或者获取一个Json数据。那怎么实现呢?
步骤:
(1)创建Maven Web Project
使用Eclipse新建一个Maven Web Project ,项目取名为:spring-boot-jsp
(2)导入Maven依赖
org.springframework.boot
spring-boot-starter-parent
1.4.1.RELEASE
1.8
org.springframework.boot
spring-boot-starter-web
javax.servlet
javax.servlet-api
provided
javax.servlet
jstl
org.springframework.boot
spring-boot-starter-tomcat
provided
org.apache.tomcat.embed
tomcat-embed-jasper
provided
(3)搭建一个springboot应用
app main
(4)跳转页面
配置application.properties对jsp支持,添加src/main/resources/application.properties:
# 页面默认前缀目录
spring.mvc.view.prefix=/WEB-INF/jsp/
# 响应页面默认后缀
spring.mvc.view.suffix=.jsp
# 自定义属性,可以在Controller中读取
application.hello=Hello Angel From application
编写测试Controller
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@RequestMapping("/hello")
public String helloJsp(Model model){
System.out.println("HelloController.helloJsp().hello=hello");
model.addAttribute("hello", "你好");
return "hello";
}
}
在 src/main 下面创建 webapp/WEB-INF/jsp 目录用来存放我们的jsp页面:helloJsp.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
Insert title here
helloJsp
${hello}
(5)返回Json
要把Java对象转换为Json框架,使用的是JackSon,maven依赖的jar也有
@RequestMapping("/json")
@ResponseBody
public Person json(){
return new Person(1L,"倪先华");
}
(5)启动App并测试
Spring集中管理
搭建三层结构-不要考虑持久化层,打印即可,无法测试事务
模拟实现:dao+service+junit+controller
真实实现:持久化实现
5.1 导入spring-boot-starter-test
在原有基础上面导入spring-boot-starter-test
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
5.2 创建一个SpringBoot应用,并在下面创建一个Bean
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
5.3 写SpringBoot测试从Springboot中获取bean就ok
@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class) //这事一个Spring测试,要告诉它在哪儿加载Spring配置文件,其实告诉它应用类型就ok
public class SpringbootTest {
@Autowired
private TestService testService;
@Test
public void test() throws Exception {
System.out.println(testService);
testService.test();
}
}
5.4、Spring boot 持久化
Spring Boot就数据库持久化支持,支持原生Jdbc,也支持Mybatis和data JPA。Spring boot JdbcTemplate,引入spring-boot-starter-jdbc,那么只需要在需要使用的类中加入:
@Resource
private JdbcTemplate jdbcTemplate;
前台:表
引入Maven依赖-mysql,jdbc
mysql
mysql-connector-java
org.springframework.boot
spring-boot-starter-jdbc
数据库信息配置,在application.properties文件中配置mysql连接配置文件
########################################################
###datasource
########################################################
spring.datasource.url = jdbc:mysql://localhost:3306/test
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
编写代码测试
domain/表-导入jar-数据库配置-写dao(JdbcTemplate)-junit测试
事务支持
1)声明式(xml)
|
2)注解式
①配置事务管理器
②开发注解式事务支持-能够识别并处理我们打注解
③在Service上面加@Transactional
springboot采用的是注解式,并且①和②已经默认配置,我们只需在对应的类上面打注解即可。
Spring boot-spring data Jpa
Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得数据库的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。此外,它还支持基于关系型数据库的数据服务,如Oracle RAC等。对于拥有海量数据的项目,可以用Spring Data来简化项目的开发,就如Spring Framework对JDBC、ORM的支持一样,Spring Data会让数据的访问变得更加方便。
Jpa
“规范”: 所谓的规范意指明文规定或约定俗成的标准。如:道德规范、技术规范,公司管理规范。那么“持久化规范”就是Sun针对持久化这一层操作指定的规范,如果没有指定JPA规范,那么新起的框架就随意按照自己的标准来了,那我们开发人员就没法把我们的经历全部集中在我们的业务层上,而是在想如何进行兼容,这种情况有点像Android开发,Android本身有官方的SDK,但是由于SDK过于开源了,结果导致很多厂商基于SDK二次开发,但是兼容性就不是很好,最好的例子就是Android的头像上传,就是一件很烦人的事情。好了,JPA就介绍到这里。
Hibernate
JPA是一种规范,而Hibernate是它的一种实现。除了Hibernate,还有EclipseLink(曾经的 toplink),OpenJPA等可供选择,所以使用Jpa的一个好处是,可以更换实现而不必改动太多代码。
Spring data Jpa
Spring Data JPA能干什么
可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了CRUD外,还包括如分页、排序等一些常用的功能。
首先我们需要清楚的是Spring Data是一个开源框架,在这个框架中Spring Data JPA只是这个框架中的一个模块,所以名称才叫Spring Data JPA。如果单独使用JPA开发,你会发现这个代码量和使用JDBC开发一样有点烦人,所以Spring Data JPA的出现就是为了简化JPA的写法,让你只需要编写一个接口继承一个类就能实现CRUD操作了
5)Spirng data jpa常用接口或类
Spring Data 的一个核心接口为我们提供了常用的接口
Repository 接口是 Spring Data 的一个核心接口,它不提供任何方法,开发者需要在自己定义的接口中声明需要的方法 :
public interface Repository
1. Repository是一个空接口,即是一个标记接口;
2. 若我们定义的接口继承了Repository,则该接口会被IOC容器识别为一个Repository Bean纳入到IOC容器中,进而可以在该接口中定义满足一定规范的方法。
3. 实际上也可以通过@RepositoryDefinition,注解来替代继承Repository接口。
4. 查询方法以find | read | get开头;
5. 涉及查询条件时,条件的属性用条件关键字连接,要注意的是条件属性以首字母大写。
6.使用@Query注解可以自定义JPQL语句实现更灵活的查询。
CrudRepository 接口提供了最基本的对实体类的添删改查操作
--T save(T entity);//保存单个实体
--Iterable
--T findOne(ID id);//根据id查找实体
--boolean exists(ID id);//根据id判断实体是否存在
--Iterable
--long count();//查询实体数量
--void delete(ID id);//根据Id删除实体
--void delete(T entity);//删除一个实体
--void delete(Iterable extends T> entities);//删除一个实体的集合
--void deleteAll();//删除所有实体,不用或慎用!
PagingAndSortingRepository接口
该接口提供了分页与排序功能
--Iterable
--Page
JpaRepository:查找所有实体,排序、查找所有实体,执行缓存与数据库同步
JpaSpecificationExecutor:不属于Repository体系,实现一组 JPA Criteria 查询相关的方法,封装 JPA Criteria 查询条件。通常使用匿名内部类的方式来创建该接口的对象。
自定义 Repository:可以自己定义一个MyRepository接口。
==============================
jpa:Java Persistence API java数据库持久化规范。仅仅是规范,没有实现。
hibernate:jpa一种实现(注解版),当然它不仅实现了jpa,还有自己xml实现。
传统经典架构:ssh-struts2+spring+hibernate(xml版)
现在流行两种结构:
ssj-springmvc + spring + jpa(hibernate注解版)
ssm-springmvc + spring +mybatis(ibatis)
spirng data:spring提供对数据访问,对于不同数据存储方式有可以分为以下组成:
spring data jpa:对数据库访问
spring data redis:对redis的访问
spring data mogodb:对mogodb的访问
....
spring data jpa:spring data对数据库持久化的支持。
简化了Jpa生操作,crud都已经封装好了。
springboot spring data jpa
再次对spring data jpa进行配置简化
https://www.ibm.com/developerworks/cn/opensource/os-cn-spring-jpa/index.html、
引入Maven依赖-mysql,springdatajpa
配置jdbc spring data jpa
在application.properties文件中配置mysql连接配置文件
########################################################
###datasource
########################################################
spring.datasource.url = jdbc:mysql://localhost:3306/test
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
########################################################
### Java Persistence Api
########################################################
# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
#[org.hibernate.cfg.ImprovedNamingStrategy #org.hibernate.cfg.DefaultNamingStrategy]
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager)
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
编写代码测试
(1) 创建实体类并完成关系映射。
(2) 创建继承与JpaRepository的接口
(3) 创建service类。
使用Repository的接口注入本地代理对象
测试;
扩展jpa Repository
Spring boot-mybtis
集成Mybatis
新建maven project;
新建一个maven project,取名为:spring-boot-mybatis
在pom.xml文件中引入相关依赖;
(1)基本依赖,jdk版本号;
(2)mysql驱动,mybatis依赖包,mysql分页PageHelper:
mysql
mysql-connector-java
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.1.1
在application.properties添加配置文件;
########################################################
###datasource
########################################################
spring.datasource.url = jdbc:mysql://localhost:3306/test
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
########################################################
### Java Persistence Api
########################################################
# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
#[org.hibernate.cfg.ImprovedNamingStrategy #org.hibernate.cfg.DefaultNamingStrategy]
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager)
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
创建启动类App.java
@SpringBootApplication
@MapperScan("cn.itsource.springboot.mybatis.mapper")//别名:mybatis.type-aliases-package=cn.itsource.springboot.ssm.domain
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
//这里和以往不一样的地方就是MapperScan的注解,这个是会扫描该包下的接口
注解版
编写Demo测试类;
public class Demo {
private long id;
private String name;
//省略getter and setter….
}
编写DemoMapper;
注解:
public interface DemoMappper {
@Select("select *from Demo where name = #{name}")
public List likeName(String name);
@Select("select *from Demo where id = #{id}")
public Demo getById(long id);
@Select("select name from Demo where id = #{id}")
public String getNameById(long id);
}
XML
编写DemoService
@Service
public class DemoService {
@Autowired
private DemoMappper demoMappper;
public List likeName(String name){
return demoMappper.likeName(name);
}
}
编写DemoController;
@RestController
public class DemoController {
@Autowired
private DemoService demoService;
@RequestMapping("/likeName")
public List likeName(String name){
return demoService.likeName(name);
}
}
//运行访问:http://127.0.0.1:8080/likeName?name=张三 就可以看到返回的数据了
一:加上Mapper扫描路径
@MapperScan("cn.itsource.springboot.mapper")
二 映射
注解版本:
打注解
xml版本
配置Mapper的xml文件
导入映射文件地址
别名:mybatis.type-aliases-package=
cn.itsource.springboot.ssm.domain
映射文件路径:
① 默认在接口同包同名映射配置文件
使用PageHelper分页
@Configuration
public class MyBatisConfiguration {
@Bean
public PageHelper pageHelper() {
System.out.println("MyBatisConfiguration.pageHelper()");
PageHelper pageHelper = new PageHelper();
Properties p = new Properties();
p.setProperty("offsetAsPageNum", "true");
p.setProperty("rowBoundsWithCount", "true");
p.setProperty("reasonable", "true");
pageHelper.setProperties(p);
return pageHelper;
}
}
@RequestMapping("/likeName")
public List
PageHelper.startPage(1,1);
return demoService.likeName(name);
}
获取自增Id
xml:
useGeneratedKeys="true" keyProperty="id" keyColumn="id" > insert into t_user(name) values(#{name})
注解:
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
@Insert("insert into Demo(name,password) values(#{name},#{password})")
public long save(Demo name);//对象上面也有
模块化开发
总结
课程总结
重点
Spring Boot入门
Spring Boot Web
Spring Boot 持久化
Spring Boot SSM
难点
Spring Boot Web
Spring Boot 持久化
Spring Boot SSM
如何掌握?
勤加练习...
学会看说明手册
排错技巧(技巧)
...
...
课后练习
今天代码
面试题
为什么使用Spring Boot
扩展知识或课外阅读推荐(可选)
扩展知识
课外阅读
Spring Boot集成Jedis,定时任务