一、Spring-Boot
概念:Spring Boot并不是一个框架,从根本上将,它就是一些库的集合,继承starter,约定大于配置,它早已集成了需要配置的众多信息;
作用:简化spring配置,让spring配置、监控、部署变简单,spring-boot无需在意jar版本问题
下面是Spring Boot在 org.springframework.boot 组下提供的一些Starters:
二、spring-boot 特点
1)内置tomcat(无需部署)
官方文档:https://spring.io/projects/spring-boot#learn
选择一个版本进行使用,我使用的是1.5.17
快速开始一个Maven项目
Maven项目使用spring-boot相关依赖
4.0.0
com.example
myproject
0.0.1-SNAPSHOT
org.springframework.boot
spring-boot-starter-parent
1.5.17.RELEASE
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-maven-plugin
创建一个Maven父项目,一个子Maven项目
上面核心依赖包配置到父pom.xml,以后子项目都有了父类的依赖
子类springboot-hello的pom.xml依赖
springboot的启动测试
package com.yyg;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.web.bind.annotation.RestController;
//扫描有@RestController注解的类
@SpringBootApplication//(scanBasePackages="com.yyg") // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class RunApp{
public static void main(String[] args) {
SpringApplication.run(RunApp.class, args);
}
}
package com.yyg.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController //支持移动端的页面访问数据
public class HelloController {
//获取属性值:默认properties 默认没有取yml
@Value("${Integer.age}")
Integer age;
@RequestMapping("/")
String home() {
return "Hello Wodasdaddwarld662dawd!"+age;
}
}
2)热部署(无需重启tomcat)
父类pom.xml加入热部署依赖包
org.springframework.boot
spring-boot-devtools
true
修改代码时,控制台自动重启
3)自定义启动界面
在resource下配置banner.txt即可,内容自定义
4)spring-boot属性文件(替代了xml文件)
Application.yml 层级关系
environments:
dev:
url: http://dev.bar.com
name: Developer Setup
prod:
url: http://foo.bar.com
name: My Cool App
Application.properties
environments.dev.url=http://dev.bar.com
environments.dev.name=Developer Setupenvironments.prod.url=http://foo.bar.com
environments.prod.name=My Cool App
两个文件同时存在以application.properties为准,它没有,yml有的话就以yml为准
获取配置文件属性
Controller
@RestController //支持移动端的页面访问数据
public class HelloController {
//获取属性值:默认properties 默认没有取yml
@Value("${Integer.age}")
Integer age;
@RequestMapping("/")
String home() {
return "Hello Wodasdqaddwarld6wd62dawd!"+age;
}
}
5)spring-boot返回json
创建一个Maven项目
需要jsp依赖包才能编译
org.apache.tomcat.embed
tomcat-embed-jasper
provided
Controller
@Controller
public class IndexContrller {
//跳转index.jsp页面
@RequestMapping("/")
String home(HttpServletRequest request) {
request.setAttribute("age", 116);
return "index";
}
//返回json
@RequestMapping("/json")
@ResponseBody
Object getJson() {
Map map=new HashMap<>();
map.put("name","阳");
return map;
}
}
启动spring-boot
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
public class RunApp{
public static void main(String[] args) {
SpringApplication.run(RunApp.class, args);
}
}
三、Maven项目的打包
父类Maven项目的pom.xml植入打包依赖
org.springframework.boot
spring-boot-maven-plugin
点击需要打包的项目右键–>Run as
四Spring-boot持久化 (准备数据库和测试表)
1)持久化JDBC
创建jdbc的Maven项目
配置文件application.yml
spring:
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
datasource:
driverClassName: com.mysql.jdbc.Driver
url : jdbc:mysql://localhost:3306/spring-boot-demo?useUnicode=true&characterEncoding=utf-8
username : root
password : 000000
Jdbc的maven项目pom.xml
4.0.0
springboot-parent
springboot-parent
0.0.1-SNAPSHOT
springboot-jdbc
org.springframework.boot
spring-boot-starter-jdbc
在父类Maven spring-parent导入jdbc依赖
mysql
mysql-connector-java
org.springframework.boot
spring-boot-starter-test
启动spring-boot
@SpringBootApplication
public class RunApp{
public static void main(String[] args) {
SpringApplication.run(RunApp.class, args);
}
}
Dao层和实现层
public interface UserDao {
void insert(User user);
List selectAll();
}
@Service
public class UserDaoImpl implements UserDao{
@Autowired
JdbcTemplate jdbcTemplate;
//jdbc 新增实现
@Override
public void insert(User user) {
jdbcTemplate.update("insert into t_user(name,age) value(?,?)",user.getName(),user.getAge());
}
//jdbc 查询全部实现
@Override
public List selectAll() {
String sql = "select *from t_user";
RowMapper rowMapper = new BeanPropertyRowMapper(User.class);
return jdbcTemplate.query(sql, rowMapper);
}
}
测试
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes=RunApp.class)
public class JdbcTest {
//Springboot 测试
@Autowired
UserDao userDao;
//查询全部
@Test
public void testQuery() throws Exception {
List selectAll = userDao.selectAll();
System.out.println(selectAll.size());
}
//新增
@Test
public void testAdd() throws Exception {
try {
User user=new User();
user.setName("yyg");
user.setAge(18);
userDao.insert(user);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2)持久化SpringDATAJPA
创建jpa的Maven项目
在pom.xml植入连接依赖
4.0.0
springboot-parent
springboot-parent
0.0.1-SNAPSHOT
springboot-dataJpa
org.springframework.boot
spring-boot-starter-data-jpa
创建仓库类继承JpaRepository(底层封装了crud和分页排序功能)
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository{
}
服务层 调用
@Service
@Transactional
public class UserServiceImpl {
@Autowired
private UserRepository userRepository;
//根据id查询
public User get(Integer id){
return userRepository.getOne(id);
}
//查询全部
public List getAll(){
return userRepository.findAll();
}
//新增
public User save(User user){
return userRepository.save(user);
}
//修改
public User update(User user) {
return userRepository.save(user);
}
//删除
public void delete(Integer id){
userRepository.delete(id);
}
}
测试
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes=RunApp.class)
public class JPATest {
@Autowired
UserServiceImpl userServiceImpl;
//查询全部
@Test
public void testQuery() throws Exception {
List all = userServiceImpl.getAll();
System.out.println(all.size());
}
//删除
@Test
public void testDelete() throws Exception {
userServiceImpl.delete(1);
List all = userServiceImpl.getAll();
System.out.println(all.size());
}
}
启动spring-boot
package com.yyg;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.web.bind.annotation.RestController;
//扫描有@RestController注解的类
@SpringBootApplication //等于(scanBasePackages="com.yyg") same as @Configuration @EnableAutoConfiguration @ComponentScan
public class RunApp{
public static void main(String[] args) {
SpringApplication.run(RunApp.class, args);
}
}
3)持久化Mybatis
创建mybatis的Maven项目
在pom.xml植入mybatis的依赖包
4.0.0
springboot-parent
springboot-parent
0.0.1-SNAPSHOT
springboot-mybatis
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.0
com.github.pagehelper
pagehelper-spring-boot-starter
1.2.2
org.kd
mybatis-tool-box
1.0-M9
Domain层
public class User {
private Integer id;
private String name;
private Integer age;
//getter/setter略
}
//@Mapper
public interface UserMapper {
// 查询所有
//@Select("select * from t_user")
public List getAll();
public void save(User user);
@Select("select *from t_user where name like '%${name}%' ")
public void selectLike(User user);
}
UserMapper.xml
insert into t_user(name,age) value(#{name},#{age});
服务层IUserService
public interface IUserService {
public List getAll();
public void save(User user);
//分页
public PageInfo pageList(Integer pageRow,Integer pageSize);
}
实现UserServiceImpl
@Service
public class UserServiceImpl implements IUserService{
@Autowired
UserMapper userMapper;
@Override
public List getAll() {
// TODO Auto-generated method stub
return userMapper.getAll();
}
@Override
public void save(User user) {
userMapper.save(user);
}
@Override
public PageInfo pageList(Integer pageRow, Integer pageSize) {
// TODO Auto-generated method stub
PageHelper.startPage(pageRow, pageSize);
List all = userMapper.getAll();
return new PageInfo<>(all);
}
}
Application.yml配置扫描xml
spring:
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
datasource:
driverClassName: com.mysql.jdbc.Driver
url : jdbc:mysql://localhost:3306/spring-boot-demo?useUnicode=true&characterEncoding=utf-8
username : root
password : 000000
# Mybatis配置
mybatis:
typeAliasesPackage: com.yyg.domain
mapperLocations: classpath:com/yyg/mapper/mapper_xml/*.xml
#日志
logging:
level:
com:
yyg: DEBUG
测试
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes=RunApp.class)
public class MybatisTest {
@Autowired
IUserService iUserService;
@Autowired
UserMapper userMapper;
//查询全部
@Test
public void testQueryAll() throws Exception {
List all = iUserService.getAll();
System.out.println(all.size());
}
//新增测试
@Test
public void testAdd() throws Exception {
try {
User user=new User();
user.setAge(55);
user.setName("alibb");
iUserService.save(user);
List all = iUserService.getAll();
System.out.println(all.size());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//模糊查询
@Test
public void testSelectLike() throws Exception {
try {
User user=new User();
user.setName("yyg");
userMapper.selectLike(user);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//分页查询
@Test
public void pageTest() throws Exception {
PageInfo pageList = iUserService.pageList(1, 2);
for (User user : pageList.getList()) {
System.out.println(user.toString());
}
}
}
启动spring-boot
@SpringBootApplication //scanBasePackages=("com.yyg")
//这里和以往不一样的地方就是MapperScan的注解,这个是会扫描该包下的接口
@MapperScan("com.yyg.mapper")
public class RunApp{
public static void main(String[] args) {
SpringApplication.run(RunApp.class, args);
}
}
五、日志信息的配置
Application.yml
logging.level.*= # Log levels severity mapping. For instance `logging.level.org.springframework=DEBUG`
六、事务控制
在父Maven项目的pom.xml添加依赖
org.springframework.boot
spring-boot-starter-test
测试
//Spring测试环境
@RunWith(SpringJUnit4ClassRunner.class)
//SpringBoot测试,并指定启动类
@SpringBootTest(classes = App.class)
public class UserServiceTest {
@Autowired
private UserService userService;
@Test
public void testGet() throws Exception {
User user = userService.get(1L);
System.out.println(user.getName());
}
}
有疑问的欢迎联系2822256710,加v :yygtq0818126,欢迎点评