SpringBoot基础学习

1.简介

1.1spring优缺点

    DI   IOC    AOP 

    配置文件比较繁琐

1.2SpringBoot特点

    约定优于配置

    起步依赖、自动配置

2.springBoot快速入门

2.1环境搭建

    2.1.1创建一个普通的Maven模块(不需要使用骨架)

SpringBoot要求,项目要继承SpringBoot的起步依赖spring-boot-starter-parent


org.springframework.boot
spring-boot-starter-parent
2.0.1.RELEASE

SpringBoot要集成SpringMVC进行Controller的开发,所以项目要导入web的启动依赖



org.springframework.boot
spring-boot-starter-web

编写测试类

SpringBoot基础学习_第1张图片

    Controller编写和测试

SpringBoot基础学习_第2张图片

2.2 入门解析

所有的SpringBoot工程都要必须继承spring-boot-starter-parent

SpringBoot基础学习_第3张图片

2.3工程的热部署

SpringBoot基础学习_第4张图片

IDEA需要做一些相关配置

SpringBoot基础学习_第5张图片

SpringBoot基础学习_第6张图片

2.4IDEA快速创建一个SpringBoot项目

SpringBoot基础学习_第7张图片

SpringBoot基础学习_第8张图片

SpringBoot基础学习_第9张图片

3.springBoot原理分析

3.1起步依赖

帮助开发者导入依赖、控制依赖版本(不再出现版本冲突问题)

3.2自动配置

@SpringBootApplication  等价与下边三个注解

@SpringBootConfiguration   

@EnableAutoConfiguration   @import   selectImports    getcandidateconfigurations

 @ComponentScan

当需要自定义配置时,可以在资源包resources下创建一个application.properties

例如 :server.port=8081

           server.servlet.context-path=/demo

4.SpringBoot的配置文件

4.1通过配置文件里的属性赋值

@value("${name}")

private String name;      通过配置文件里的属性给name赋值

@value("${person.addr}")

private String addr;      通过配置文件里的属性给addr赋值

精确匹配,但是配置太多会很繁琐

----------------------------------------------------------

private String name;  提供get/set方法

private String addr;   提供get/set方法

在类上加一个注解:@ConfigurationProperties( prefix = "person" )

5.SpringBoot整合其他技术

5.1 mybatis起步依赖



org.mybatis.spring.boot
mybatis-spring-boot-starter
1.1.1

5.1.2 添加数据库驱动坐标



mysql
mysql-connector-java

5.1.3 添加数据库连接信息

在application.properties中添加数据量的连接信息

#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=1234

5.14 建表,实体类,

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '张三');
INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');
public class User {
    // 主键
    private Long id;
    // 用户名
    private String username;
    // 密码
    private String password;
    // 姓名
    private String name;
@Mapper
public interface UserMapper {
    public List queryUserList();
}

在src\main\resources\mapper路径下加入UserMapper.xml配置文件"




    

在application.properties中添加mybatis的信息

#spring集成Mybatis环境
#pojo别名扫描包
mybatis.type-aliases-package=com.itheima.domain
#加载Mybatis映射文件
mybatis.mapper-locations=classpath:mapper/*Mapper.xml

5.2 SpringBoot整合Junit

5.2.1 添加Junit的起步依赖



org.springframework.boot
spring-boot-starter-test
test

编写测试类

package com.yunque;

import com.yunque.entity.User;
import com.yunque.mapper.UserMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest(classes=Ceshi2019Application.class)
public class MybatisTest {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void test(){
        List userList = userMapper.queryUserList();
        System.out.println(userList);
    }
}

5.3 SpringBoot整合Spring Data JPA

5.3.1 添加Spring Data JPA的起步依赖



org.springframework.boot
spring-boot-starter-data-jpa

5.3.2 添加数据库驱动依赖



mysql
mysql-connector-java

5.3.3 在application.properties中配置数据库和jpa的相关属性

#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?
useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root

#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.ImprovedNamingStrategy

c.创建实体类

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Role {
    // 主键
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    // 用户名
    private String username;
    // 密码
    private String password;
    // 姓名
    private String name;
package com.yunque.mapper;

import com.yunque.entity.Role;
import com.yunque.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;

public interface UserRepository extends JpaRepository {
    public List findAll();
}

自己写RoleMaper.xml

测试

@RunWith(SpringRunner.class)
@SpringBootTest(classes=Ceshi2019Application.class)
public class MybatisTest {

    @Autowired
    private RoleRepository roleRepository;

    @Test
    public void test02(){
        List roleList = roleRepository.findAll();
        System.out.println(roleList);
    }

注意:如果是jdk9,执行报错如下:

原因:jdk缺少相应的jar 解决方案:手动导入对应的maven坐标,如下:



javax.xml.bind
jaxb-api
2.3.0

5.4 SpringBoot整合Redis
5.4.1 添加redis的起步依赖



org.springframework.boot
spring-boot-starter-data-redis

5.4.2 配置redis的连接信息.

#Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379

5.4.3 注入RedisTemplate测试redis操作

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootJpaApplication.class)
public class RedisTest {
@Autowired
private UserRepository userRepository;
@Autowired
private RedisTemplate redisTemplate;
@Test
public void test() throws JsonProcessingException {
//从redis缓存中获得指定的数据
String userListData = redisTemplate.boundValueOps("user.findAll").get();
//如果redis中没有数据的话
if(null==userListData){
//查询数据库获得数据
List all = userRepository.findAll();
//转换成json格式字符串
ObjectMapper om = new ObjectMapper();
userListData = om.writeValueAsString(all);
//将数据存储到redis中,下次在查询直接从redis中获得数据,不用在查询数据库
redisTemplate.boundValueOps("user.findAll").set(userListData);
System.out.println("===============从数据库获得数据===============");
}else{
System.out.println("===============从redis缓存中获得数据===============");
}
System.out.println(userListData);

 

你可能感兴趣的:(SpringBoot)