SpringBoot基础入门+Mybatis+JPA+Redis

1.特点

1.为基于Spring的开发提供更快的入门体验

2.开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求

3.提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等

4.SpringBoot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式

2.核心功能

2.1起步依赖
起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

2.2自动配置
Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。

2.快速入门

创建Maven工程链接: link.

相关代码:

SpringBoot的起步依赖:
在pom.xml文件里添加

	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
    </parent>

编写SpringBoot的引导类:
要通过SpringBoot提供的引导类起步SpringBoot才可以进行访问

package com.itheima;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MySpringBootApplication {
    public static void main(String[] args) {
    	//要通过SpringBoot提供的引导类起步SpringBoot才可以进行访问
        SpringApplication.run(MySpringBootApplication.class);
    }
}

编写Controller:
在引导类MySpringBootApplication同级包或者子级包中创建QuickStartController

在这里插入图片描述

package com.itheima.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class QuickController {
	//访问的虚拟地址设置为quick
    @RequestMapping("/quick")
    @ResponseBody
    public String quick(){
        return "springboot 访问成功!!!!!!!!!!!!!!!!!!!";
    }
}

测试结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述工程热部署配置链接: link.

3.SpringBoot的配置文件

3.1配置文件类型和作用

SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用
application.properties或者application.yml(application.yaml)进行配置。SpringBoot默认会从Resources目录下加载application.properties或application.yml(application.yaml)文件。其中,application.properties文件是键值对类型的文件,之前一直在使用,所以此处不在对properties文件的格式
进行阐述。除了properties文件外,SpringBoot还可以使用yml文件进行配置,下面对yml文件进行讲解。

注意配置不要重复!
以下代码有重复的地方

#yml文件语法
#注意空格

#普通数据配置
name: dengjianglong
#对象的配置
person:
  name: dengjianglong
  age: 23
  addr: hunan
  sex: man
  #修改端口号和虚拟工程名
  server:
  	port: 8081
  	servlet:
  		context-path: /demo
  

#行内对象配置
person1: {name: dengjianglong,age: 23,addr: hunan}

#配置数据,集合(普通字符串)
city:
  - hunan
  - beijin

city1: [hunan,beijin]

#配置数据,集合(对象数据)
student:
  - name: dengjianglong
   age: 23
   addr: hunan
  - name: zousiwen
    age: 21
    addr: hunan

#map配置
map:
  key1: one
  key2: two

2.配置文件与配置类的属性映射方式

3.2使用注解@Value映射

优点:匹配精确
缺点:繁琐

application.yml配置如下:

person:
  name: dengjianglong
  age: 23
  addr: hunan

放到spring管理的Bean的字段上

package com.itheima.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class Quick2Controller {

        @Value("${person.name}")
        private String name;
        @Value("${person.addr}")
        private String addr;
        @RequestMapping("/quick2")
        @ResponseBody
       public String quick2(){

                return "name="+name+",address="+addr;
        }

}

访问结果如下

在这里插入图片描述

3.3使用注解@ConfigurationProperties映射

使用@ConfigurationProperties方式可以进行配置文件与实体字段的自动映射,但需要字段必须提供set方法才可以,而使用@Value注解修饰的字段不需要提供set方法

application.yml配置如下:

person:
  name: dengjianglong
  age: 23
  addr: hunan
  sex: man

放到spring管理的Bean的字段上:

package com.itheima.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ConfigurationProperties(prefix = "person")
public class Quick3Controller {

        private String name;
        private String addr;
        private String sex;

        @RequestMapping("/quick3")
        @ResponseBody
       public String quick3(){

                return "name="+name+",address="+addr+",sex="+sex;
        }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

@ConfiguaritionProperties执行器的配置

加在pom.xml里
可配可不配,配了更方便,可在配置信息时给予提示

<!--@ConfiguaritionProperties执行器的配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

执行结果如下

在这里插入图片描述

4.SpringBoot整合其他技术

4.1整合Mybatis

项目层次大致如下:
在这里插入图片描述

1.添加依赖

<!--mybatis起步依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>

2.添加MySQL连接驱动

<!-- MySQL连接驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

3.添加数据库连接信息

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

#数据库连接信息
spring.datasource.driverClassName=com.mysql.jdbc.Driver
#连接本地数据库
spring.datasource.url=jdbc:mysql://localhost:3306/shops?useUnicode=true&characterEncoding=utf8
#账号密码跟本地数据库一致
spring.datasource.username=root
spring.datasource.password=123456

4.创建数据库

在这里插入图片描述

5.创建实体Bean

package com.itheima.domain;

public class User {
    private Integer id;
    private String username;
    private String name;
    private String sex;

    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 getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}

6.编写Mapper

package com.itheima.mapper;

import com.itheima.domain.User;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

//@Mapper标记该类是一个mybatis的mapper接口,可以被spring boot自动扫描到spring上下文中
@Mapper
public interface UserMapper {

    public List<User> queryUserList();

}

7.配置Mapper映射文件

在src\main\resources\mapper路径下创建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.itheima.mapper.UserMapper">
    <select id="queryUserList" resultType="user">
        <!--表名根据自己的数据库进行改变-->
        select * from users
    </select>
</mapper>

8. 在application.properties中添加mybatis的信息

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

9.编写测试Controller

package com.itheima.controller;

import com.itheima.domain.User;
import com.itheima.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class MybatisController {

    @Autowired
    private UserMapper userMapper;

    @RequestMapping("/query")
    @ResponseBody
    public List<User> queryUserList(){
        List<User> users = userMapper.queryUserList();
        System.out.println(users);
        return users;
    }
}

10.测试结果

在这里插入图片描述

4.2整合Junit(用于测试)

1.添加Junit的起步依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2.编写测试类

package com.itheima;

import com.itheima.domain.User;
import com.itheima.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;
//SpringRunner继承自SpringJUnit4ClassRunner,使用哪一个Spring提供的测试测试引擎都可以
@RunWith(SpringRunner.class)
//@SpringBootTest的属性指定的是引导类的字节码对象
@SpringBootTest(classes = SpringbootMybatisApplication.class)
public class MybatisTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void test(){
        List<User> users = userMapper.queryUserList();
        System.out.println(users);
    }

}

3.控制台打印信息

在这里插入图片描述

4.3整合Spring Data JPA

1.添加Spring Data JPA的起步依赖

<!-- springBoot JPA的起步依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

2.添加数据库驱动依赖

<!-- MySQL连接驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

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

#数据库连接信息
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/shops?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456

#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

4.创建实体配置实体

package com.itheima.domain;

import javax.persistence.*;

//注解@Entity用来标记该类是一个JPA实体类
@Entity
//指定表名
@Table(name = "users")
public class User {

    //注解@Id用来定义记录的唯一标识
    @Id
    //结合注解@GeneratedValue将其设置为自动生成
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String username;
    private String name;
    private String sex;

    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 getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}

5. 编写UserRepository

package com.itheima.repository;

import com.itheima.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface UserRepository extends JpaRepository<User,Integer> {
    public List<User> findAll();

}

6.编写测试类

package com.itheima;

import com.itheima.domain.User;
import com.itheima.repository.UserRepository;
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 = SpringbootJpaApplication.class)
public class JpaTest {
    @Autowired
    private UserRepository userRepository;
    @Test
    public  void test(){
        List<User> all = userRepository.findAll();
        System.out.println(all);
    }

}

7.测试结果

在这里插入图片描述

4.4整合Redis(缓存)

1.添加Redis的起步依赖

<!-- 配置使用redis启动器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2. 配置Redis的连接信息

运行Redis

在这里插入图片描述在这里插入图片描述
在application.properties中配置

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

3. 注入RedisTemplate测试redis操作

package com.itheima;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.itheima.domain.User;
import com.itheima.repository.UserRepository;
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.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootJpaApplication.class)
public class RedisTest {
    @Autowired
    private RedisTemplate<String,String> redisTemplate;
    @Autowired
    private UserRepository userRepository;
    @Test
    public void test() throws JsonProcessingException {
        //1.从redis中获得数据,数据的形式是json数据串
        String userListJson = redisTemplate.boundValueOps("user.findAll").get();
        //2.判断redis是否存在数据
        if(null==userListJson){
            //3.不存在则从数据库查询
            List<User> all=userRepository.findAll();
            //4.将查询出的数据存储到redis缓存中
            //将list集合转换成json格式的字符串 使用jackson进行转换
            ObjectMapper objectMapper=new ObjectMapper();
            userListJson = objectMapper.writeValueAsString(all);
            redisTemplate.boundValueOps("user.findAll").set(userListJson);

            System.out.println("========从数据库中获得数据========");
        }
        else
        {
            System.out.println("========从redis缓存中获得数据======");
        }

        //5.将数据在控制台打印
        System.out.println(userListJson);

    }
}

4.测试结果

第一次运行:
在这里插入图片描述第二次运行:
在这里插入图片描述

以上就是本小白刚接触springboot的一次小总结,溜了溜了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值