一、概述
spring boot是spring家族的一员。官网介绍,spring boot的设计宗旨是使用户以最小化的spring配置尽快地搭建起基于spring的应用。特点是,1,秒秒内启动spring初始化;2,搭建几乎所有的应用需求,rest应用接口,网络套接,网络应用,流,任务等;3,简化的安全保障;4,高度支持sql和nosql;5,内嵌运行时支持,tomcat,jetty和undertow;5,开发使用的工具,比如自动重启;等等。
spring boot创建的应用可以使用jar启动,也可以打成war放到tomcat部署。
二、入门案例
环境要求。spring boot2.1.1需要java8到java11,spring framework5.1.2及以上,maven3.3以上。
- 创建一个maven工程springbootabc,打包方式为jar。
- 将官网提供的父工程依赖复制到项目的pom.xml。
<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.BUILD-SNAPSHOT</version>
</parent>
<!-- Add typical dependencies for a web application -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- Package as an executable jar -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- Add Spring repositories -->
<!-- (you don't need this if you are using a .RELEASE version) -->
<repositories>
<repository>
<id>spring-snapshots</id>
<url>https://repo.spring.io/snapshot</url>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<url>https://repo.spring.io/snapshot</url>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<url>https://repo.spring.io/milestone</url>
</pluginRepository>
</pluginRepositories>
1. 创建一个Application类作为springboot的启动类。
/**
* springboot启动类
*
* @author Administrator
*
*/
@RestController
@EnableAutoConfiguration
public class Application {
@RequestMapping("/")
public String home() {
return "欢迎使用springboot";
}
public static void main(String[] args) {
System.out.println("sprngboot启动中...");
SpringApplication.run(Application.class, args);
}
}
运行main方法测试,控制台会输出一个spring的图案和其他配置信息。访问localhost:8080页面显示欢迎使用springboot。
2. 将项目打成可执行的jar包。
在eclipse中,在项目中执行run as>maven install或者maven build>-X package。将项目打成jar包。
在命令行,执行java –jar xx/xx/ springbootabc-0.0.1-SNAPSHOT.jar。就启动了这个springboot项目。浏览器访问测试。
三、整合spring-data-jpa
jpa,java persistence api,java持久层api,描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。spring-data-jpa是对jpa的封装。
步骤
1. 创建数据库环境
创建一个数据库,创建一个user表。
create table user(
id int not null auto_increment,
username varchar(16),
password varchar(32),
primary key(id)
)charset=utf8;
添加一些测试用的数据。
insert into user values (null,’张三’,’1234’),
(null,’张四’,’1234’),
(null,’张二式’,’1234’),
(null,’李三’,’1234’),
(null,’李四’,’1234’),
(null,’六三’,’1234’),
(null,’六三四’,’1234’);
1. 创建maven项目
pom文件中,除了需要上述案例中的基本配置外,还需要引入对于spring-boot-starter-data-jp a的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
这两个库,不需要指定版本号,springboot会自动匹配。
2. 编写数据库连接的配置
配置文件的名字是固定的,必须是application.properties。而且要放在resources的根路径下。
#db configuration
spring.datasource.url=jdbc:mysql://localhost/springboot20181109?serverTimezone=GMT
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#jpa configuration
spring.jpa.database=mysql
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovingNamingStrategy
3. 编写实体类,做映射
/**
* user实体类
*
* @author Administrator
*
*/
@Entity
@Table(name = "user")
public class User {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
}
}
4. 编写service层接口和实现
接口
/**
* user服务接口
*
* @author Administrator
*
*/
public interface IUserService {
/**
* 查询所有用户
*
* @return
*/
public List<User> findAll();
}
实现
/**
* 用户服务层实现类
*
* @author Administrator
*
*/
@Service(value = "userService")
public class UserServiceImpl implements IUserService {
@Resource
private IUserDao userDao;
@Override
public List<User> findAll() {
// TODO Auto-generated method stub
return userDao.findAll();
}
}
5. 编写持久层
持久层接口继承JpaRepository<实体类, id的java类型>,不需要实现,这个父类已经实现常用的sql操作。
/**
* 用户dao层接口
*
* @author Administrator
*
*/
@Repository(value = "userDao")
public interface IUserDao extends JpaRepository<User, Integer> {
/**
* 查询所有用户
*
* @return
*/
// List<User> findAll();
}
6. 编写控制层
/**
* 用户控制类
*
* @author Administrator
*
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private IUserService userService;
@RequestMapping("/findAll")
public List<User> findAll() {
return userService.findAll();
}
}
7. 编写springboot的引导类
注意,引导类所在的包的路径要包含其他所有文件的路径,这样才可以扫描到其他文件。注解才能生效。
/**
* springboot引导类
*
* @author Administrator
*
*/
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
8. 编写访问的html文件
由于是可执行的jar包,所有没有webapp或者WEB-INF的目录。springboot的解决方案是在resources目录下创建static目录,只能使用static这个名字。
将静态页面放入static目录下。
使用easyui,复制easyui的支持文件到这个目录下,然后,编写user.html和user.js。
user.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试springboot</title>
<link rel="stylesheet" type="text/css"
href="easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="easyui/themes/icon.css">
<script type="text/javascript" src="easyui/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="easyui/jquery.easyui.min.js"></script>
<script src="user.js"></script>
</head>
<body>
<div>
<table id="dataTable"></table>
</div>
</body>
</html>
user.js
$(function(){
init.data();
});
var init = {
data : function(){
var columns = [ [ {
field : 'id',
title : '编号',
width : 50,
}, {
field : 'username',
title : '用户名',
width : 150,
}, {
field : 'password',
title : '密码',
width : 150,
} ] ];
$("#dataTable").datagrid({
title:'用户表',
url: "user/findAll",
iconCls:'icon-save',
nowrap: false,
striped: true,
collapsible:true,
columns: columns,
});
},
}
9. 启动springboot,在浏览器测试
四、整合mybatis
步骤
1. 创建maven项目springbootmybatis
2. 引入对于mybatis的依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
3. 实体类和数据库配置文件使用jpa项目中的。
4. 编写mapper接口
/**
* 用户mapper接口
*
* @author Administrator
*
*/
@Mapper
public interface IUserMapper {
@Select("select * from user where username like '%${value}%'")
public List<User> findUserByUsername(String username);
}
5. 编写service层
略
6. 编写controller层
使用restful风格
/**
* 用户控制类
*
* @author Administrator
*
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private IUserService userService;
@RequestMapping("/findAll/{username}")
public List<User> findAll(@PathVariable(value = "username") String username) {
return userService.findUserByUsername(username);
}
}
7. 编写启动类
同jpa案例
8. 编写ui
将datagrid的url,设置为url: "user/findAll/张",
9. 启动,测试
五、整合redis
使用上面的两个数据库项目中的任一个
引入redis的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>
需要修改两个地方
一个,在启动类中,开始springboot对于缓存的支持。
/**
* springboot引导类
*
* @author Administrator
*
*/
@SpringBootApplication
@EnableCaching // 开启对缓存的支持
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
在service层使用redis缓存,一般是在service层编写缓存业务。
/**
* 用户服务层实现类
*
* @author Administrator
*
*/
@Service(value = "userService")
public class UserServiceImpl implements IUserService {
@Resource
private IUserDao userDao;
@Override
@Cacheable(value = "findAllCache", key = "'user.findAll'")
// 其中,value表示redis数据库中缓存的数据的key
// key表示指定的方法返回的值的key,是spring的属性,不写会使用默认值
public List<User> findAll() {
// TODO Auto-generated method stub
System.out.println("查询mysql数据库");
return userDao.findAll();
}
}
启动,测试
六、整合junit
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
编写测试类
/**
* 测试junit
*
* @author Administrator
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
public class SpringBootJunitTest {
@Autowired
private IUserService userService;
@Test
public void test() {
List<User> list = userService.findAll();
System.out.println(list);
}
}
测试
七、获取配置文件值
在上面的测试类中,测试
/**
* 测试junit
*
* @author Administrator
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
public class SpringBootJunitTest {
@Resource
private Environment environment;
@Test
public void testGetConfiguration() {
System.out.println(environment.getProperty("spring.datasource.url"));
}
}