spring boot
spring boot是由Pivotal团队提供的框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程
该框架使用了特定的方式(继承starter,约定优先于配置)来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域成为领导者
Spring Boot并不是一个框架,从根本上将,它就是一些库的集合
使用springboot的原因:
Spring Boot是为简化Spring项目配置而生,使用它使得jar依赖管理以及应用编译和部署更为简单。Spring Boot提供自动化配置,使用Spring Boot,你只需编写必要的代码和配置必须的属性。
使用Spring Boot,只需20行左右的代码即可生成一个基本的Spring Web应用,并且内置了tomcat,构建的fat Jar包通过Java -jar就可以直接运行
Spring Boot使编码更简单,使配置更简单,使部署更简单,使监控更简单
spring boot的使用
创建一个父项目maven
在pom.xml创建子项目
导包
在父项目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>
<groupId>springboot-parent</groupId>
<artifactId>springboot-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- Spring Boot 父文件 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<!-- Spring Boot web -->
<dependencies>
<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>
</dependency>
<!--必须有才能编译jsp -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<!-- 可执行的jar -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<modules>
<module>springboot-hello</module>
</modules>
</project>
创建一个controller
@RestController
public class HelloController {
//获取属性配置的值:默认值
@Value("${spring.name:yy}")
String name;
@RequestMapping("/home")
String home() {
return "Hello World1111212121212!11"+name;
}
}
创建一个启动类
@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class RunApp {
public static void main(String[] args) {
SpringApplication.run(RunApp.class, args);
}
}
@Configuration的注解类标识这个类可以使用Spring IoC容器作为bean定义的来源。@Bean注解告诉Spring,一个带有@Bean的注解方法将返回一个对象,该对象应该被注册为在Spring应用程序上下文中的bean。
@EnableAutoConfiguration:能够自动配置spring的上下文,试图猜测和配置你想要的bean类,通常会自动根据你的类路径和你的bean定义自动配置。
@ComponentScan:会自动扫描指定包下的全部标有@Component的类,并注册成bean,当然包括@Component下的子注解@Service,@Repository,@Controller。
注意:想热部署就在父类的pom.xml配置
<!-- 热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
注意:要有这个包,不然不能编译成jsp
<!--必须有才能编译jsp -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
想打成jar包
在pom.xml配置
<!-- 可执行的jar -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
在子项目的resource中创建banner.txt
里面随便写,这是在启动项目中就会加载banner.txt中的东西
控制台:
application.properties
可以配置很多的参数
比如端口
页面默认前缀目录
响应页面默认后缀
自定义属性,可以在Controller中读取
配置自定义属性,可以在controller获取
@Value({“spring.你定义的属性名:默认值“})
String name
默认值是你在properties的值没有就会有默认值。
Yaml 方式
server:
port: 8080
name: kd
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 : 123456
最后启动测试一下。
springboot-Mybatis
创建好项目,在导包
刚刚已经创建好了一个父项目,在这下面创建一个子项目
在pom.xml配置连接数据库
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
同时在自己的pom.xml配置分页,mybatis依赖
<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>
</dependencies>
在application.yml配置
开启打印sql日志
连接数据库
注册别名
扫描xml
server:
port: 8080
name: kd
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 : 123456
mybatis:
typeAliasesPackage: cn.itsource.model
mapperLocations: classpath:cn/itsource/dao/Mapper/*.xml
logging:
level:
cn:
itsource: DEBUG
把之前上面用的RunApp.java 代码复制到这个项目中。
@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
@MapperScan("cn.itsource.dao")
public class RunApp {
public static void main(String[] args) {
SpringApplication.run(RunApp.class, args);
}
}
注意:一定要在类上面打注解@MapperScan(“cn.itsource.dao”)
这是在指定范围扫描dao层,不然在启动之后,controller会报错
在新建controller。
@Controller
public class IndexController {
@RequestMapping("/")
public String index(){
return "index";
}
@RequestMapping("/json")
@ResponseBody
public Object json(){
Map<String, Object> map=new HashMap<>();
map.put("name", "hhh");
map.put("age", "123");
return map;
}
}
dao层,建一个接口类,编写crud方法
@Mapper
public interface IUserDao {
@Select("select * from t_user")
public List<User> getAll();
@Select("select * from t_user where id=#{id}")
public User getById(Long id);
public void save(User user);
public void del(Long id);
public void edit(User user);
public User queryAll(User user);
}
注意可以使用注解和xmlde 方式。
在新建对应的mapper.xml,接口上面打注解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.itsource.dao.IUserDao">
<insert id="save">
insert into t_user (username,password) values(#{username},#{password})
</insert>
<select id="queryAll" resultType="user">
select * from t_user
<where>
<if test="username!=null and username!=''">
and username=#{username}
</if>
<if test="passowrd!=null and passowrd!=''">
and passowrd=#{passowrd}
</if>
</where>
</select>
<delete id="del">
delete from t_user where id=#{id}
</delete>
<update id="edit" parameterType="user">
update t_user set username=#{username},password=#{password} where id=#{id}
</update>
</mapper>
新建model
package cn.itsource.model;
public class User {
private Long id;
private String username;
private String password;
public Long getId() {
return id;
}
public void setId(Long 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 + "]";
}
}
新建service层
先接口类
public interface IUserService {
//查询所有
public List<User> getAll();
//分页
public PageInfo<User> queryPage(Integer pageNum,Integer pageSize);
//保存
public void save(User user);
//删除
public void del(Long id);
//编辑
public void edit(User user);
}
实现类:
@Service
public class UserServiceImpl implements IUserService{
@Autowired
IUserDao dao;
@Override
public List<User> getAll() {
return dao.getAll();
}
@Override
public PageInfo<User> queryPage(Integer pageNum, Integer pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<User> list = dao.getAll();
return new PageInfo<>(list);
}
@Override
@Transactional
public void save(User user) {
dao.save(user);
//int i=1/0;
}
@Override
@Transactional
public void del(Long id) {
dao.del(id);
}
@Override
@Transactional
public void edit(User user) {
dao.edit(user);
}
}
注意:在实现类上面要打注解service ,不然会报错
在增删改的时候,每个方法上面要打注解事务
测试类;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes=RunApp.class)
public class SpringMybatisTest {
@Autowired
IUserService userService;
@Autowired
IUserDao dao;
@Test
public void testName() throws Exception {
List<User> all = userService.getAll();
for (User user : all) {
System.out.println(user);
}
}
@Test
public void testName1() throws Exception {
User user = dao.getById(1L);
System.out.println(user);
}
@Test
public void testName2() throws Exception {
User user = new User();
user.setUsername("hah21");
user.setPassword("ssasa");
dao.save(user);
}
@Test
public void testName3() throws Exception {
PageInfo<User> page = userService.queryPage(1, 2);
for (User user : page.getList()) {
System.out.println(user);
}
}
@Test
public void testName4() throws Exception {
User user = new User();
user.setUsername("hah21111");
user.setPassword("ssasa");
userService.save(user);
}
@Test
public void testName5() throws Exception {
User user = new User();
user.setId(2L);
user.setUsername("嘻嘻");
user.setPassword("ssasa111");
userService.edit(user);
}
@Test
public void testName6() throws Exception {
userService.del(5L);
}
}
组织的技术打印sql
在maven仓库网站搜索 org.kd
找到mybatis Tool box
地址:https://mvnrepository.com/artifact/org.kd/mybatis-tool-box/1.0-M9
到包
<dependency>
<groupId>org.kd</groupId>
<artifactId>mybatis-tool-box</artifactId>
<version>1.0-M9</version>
</dependency>
在resource新建mybatisConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" >
<configuration>
<typeAliases>
<package name="cn.itsource.model" />
</typeAliases>
<plugins>
<!-- 打印完整sql语句 mysad -->
<plugin interceptor="org.kd.intercepts.MybatisAutoSql" />
</plugins>
</configuration
在application.yml配置
server:
port: 8080
name: kd
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 : 123456
mybatis:
typeAliasesPackage: cn.itsource.model
mapperLocations: classpath:cn/itsource/dao/Mapper/*.xml
configLocation: classpath:mybatisConfig.xml
logging:
level:
cn:
itsource: DEBUG