一、Spring-Boot
概念:Spring Boot并不是一个框架,从根本上将,它就是一些库的集合,继承starter,约定大于配置,它早已集成了需要配置的众多信息;
作用:简化spring配置,让spring配置、监控、部署变简单,spring-boot无需在意jar版本问题
下面是Spring Boot在 org.springframework.boot 组下提供的一些Starters:

二、spring-boot 特点
1)内置tomcat(无需部署)
快速开发项目工具SpringBoot精华
官方文档:https://spring.io/projects/spring-boot#learn
选择一个版本进行使用,我使用的是1.5.17
快速开始一个Maven项目
快速开发项目工具SpringBoot精华
Maven项目使用spring-boot相关依赖

<?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>com.example</groupId>
    <artifactId>myproject</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <!-- Spring Boot 父文件包含大量默认配置 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.17.RELEASE</version>
    </parent>

    <!-- Spring Boot 应用 大量依赖jar包 -->    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <!-- springframework测试 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

创建一个Maven父项目,一个子Maven项目
上面核心依赖包配置到父pom.xml,以后子项目都有了父类的依赖
子类springboot-hello的pom.xml依赖
springboot的启动测试
快速开发项目工具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);
        }
    }

快速开发项目工具SpringBoot精华
使用spring-boot访问页面
Controller

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;
	    }
}

快速开发项目工具SpringBoot精华
2)热部署(无需重启tomcat)
快速开发项目工具SpringBoot精华
父类pom.xml加入热部署依赖包

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
	 </dependency>

快速开发项目工具SpringBoot精华
修改代码时,控制台自动重启
3)自定义启动界面
快速开发项目工具SpringBoot精华
在resource下配置banner.txt即可,内容自定义
快速开发项目工具SpringBoot精华快速开发项目工具SpringBoot精华
4)spring-boot属性文件(替代了xml文件)
快速开发项目工具SpringBoot精华
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为准
获取配置文件属性
快速开发项目工具SpringBoot精华
Controller
快速开发项目工具SpringBoot精华

@RestController //支持移动端的页面访问数据
public class HelloController {
	//获取属性值:默认properties 默认没有取yml
	@Value("${Integer.age}")
	Integer age;
	 @RequestMapping("/")
	    String home() {
	        return "Hello Wodasdqaddwarld6wd62dawd!"+age;
	    }
}

5)spring-boot返回json
创建一个Maven项目
需要jsp依赖包才能编译

<!--必须有才能编译jsp -->
	<dependency>
		<groupId>org.apache.tomcat.embed</groupId>
		<artifactId>tomcat-embed-jasper</artifactId>
		<scope>provided</scope>
	</dependency>

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<String, Object> 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植入打包依赖

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
	</plugins>
</build>

点击需要打包的项目右键–>Run as
快速开发项目工具SpringBoot精华
四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

<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>
	<parent>
		<groupId>springboot-parent</groupId>
		<artifactId>springboot-parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>springboot-jdbc</artifactId>
	<!-- jdbc的依赖 -->
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		
	</dependencies>
</project>

在父类Maven spring-parent导入jdbc依赖

<!-- 连接数据库的jar -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
	</dependency>
	<!-- 测试 -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
	</dependency>

启动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<User> selectAll() {
	String sql = "select *from t_user";
	RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(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<User> 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植入连接依赖

<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>
	<parent>
		<groupId>springboot-parent</groupId>
		<artifactId>springboot-parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>springboot-dataJpa</artifactId>
	<!-- springDataJPA的依赖 -->
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
	</dependencies>
</project>

创建仓库类继承JpaRepository(底层封装了crud和分页排序功能)

import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Integer>{
}

服务层 调用

@Service
@Transactional
public class UserServiceImpl {
	@Autowired
	private UserRepository userRepository;
	//根据id查询
	public User get(Integer id){
		return userRepository.getOne(id);
	}
	//查询全部
	public List<User> 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<User> all = userServiceImpl.getAll();
			System.out.println(all.size());
	}
	//删除
	@Test
	public void testDelete() throws Exception {
			userServiceImpl.delete(1);
			List<User> 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的依赖包

<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>
	<parent>
		<groupId>springboot-parent</groupId>
		<artifactId>springboot-parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>springboot-mybatis</artifactId>
	<dependencies>
		<!-- spring-boot mybatis依赖 -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.0</version>
		</dependency>

		<!-- spring boot mybatis 分页插件 -->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-starter</artifactId>
			<version>1.2.2</version>
		</dependency>
		<!-- 打印sql -->
		<!-- https://mvnrepository.com/artifact/org.kd/mybatis-tool-box -->
		<dependency>
			<groupId>org.kd</groupId>
			<artifactId>mybatis-tool-box</artifactId>
			<version>1.0-M9</version>
		</dependency>
	</dependencies>
</project>

Domain层

public class User {
	private Integer id;
	private String name;
	private Integer age;
//getter/setter略
}

接口映射层
快速开发项目工具SpringBoot精华
UserMapper.java

//@Mapper
public interface UserMapper {
	// 查询所有
	//@Select("select * from t_user")
	public List<User> getAll();
	public void save(User user);
	@Select("select *from t_user where name like '%${name}%' ")
	public void selectLike(User user);
}

UserMapper.xml

<?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.yyg.mapper.UserMapper">
  <select id="getAll" resultType="com.yyg.domain.User">
  	select *from t_user
  </select>
  <insert  id="save">
  	insert into t_user(name,age) value(#{name},#{age});
  </insert>
</mapper>

服务层IUserService

public interface IUserService {
	public List<User> getAll();
	public void save(User user);
	//分页
	public PageInfo<User> pageList(Integer pageRow,Integer pageSize);
}

实现UserServiceImpl

@Service
public class UserServiceImpl implements IUserService{
	@Autowired
	UserMapper userMapper;
	@Override
	public List<User> getAll() {
		// TODO Auto-generated method stub
		return userMapper.getAll();
	}
	@Override
	public void save(User user) {
		userMapper.save(user);
	}
	@Override
	public PageInfo<User> pageList(Integer pageRow, Integer pageSize) {
		
		// TODO Auto-generated method stub
		PageHelper.startPage(pageRow, pageSize);
		List<User> 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<User> 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<User> 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<User> 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添加依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
</dependency>

测试

//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());
	}
}

相关文章: