SpringBoot基础入门+Mybatis+JPA+Redis

    科技2024-07-23  63

    概述

    1.特点2.快速入门3.SpringBoot的配置文件3.1配置文件类型和作用3.2使用注解@Value映射3.3使用注解@ConfigurationProperties映射 4.SpringBoot整合其他技术4.1整合Mybatis1.添加依赖2.添加MySQL连接驱动3.添加数据库连接信息4.创建数据库5.创建实体Bean6.编写Mapper7.配置Mapper映射文件8. 在application.properties中添加mybatis的信息9.编写测试Controller10.测试结果 4.2整合Junit(用于测试)1.添加Junit的起步依赖2.编写测试类3.控制台打印信息 4.3整合Spring Data JPA1.添加Spring Data JPA的起步依赖2.添加数据库驱动依赖3.在application.properties中配置数据库和jpa的相关属性4.创建实体配置实体5. 编写UserRepository6.编写测试类7.测试结果 4.4整合Redis(缓存)1.添加Redis的起步依赖2. 配置Redis的连接信息3. 注入RedisTemplate测试redis操作4.测试结果

    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的一次小总结,溜了溜了

    Processed: 0.010, SQL: 8