SpringBoot与其他框架集成

一、SpringBoot简介 

  Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置,约定大于配置

  Spring Boot 简化了基于Spring的应用开发,只需要“run”就能创建一个独立的、生产级别的Spring应用。Spring Boot为Spring平台及第三方库提供开箱即用的设置(提供默认设置),这样我们就可以简单的开始。多数Spring Boot应用只需要很少(额外)的Spring配置。我们可以使用SpringBoot创建java应用,并使用java –jar 启动它,或者采用传统的war部署方式。

  简单理解来说,Spring Boot 其实不是什么新的框架,它默认配置(或集成)了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。SpringBoot不是对Spring功能的增强,而是提供一种快速使用Spring的开发方式(全新的开发方式)。

  

 

二、SpringBoot与其他框架集成

  (1)集成mybatis

    1、建库建表,例如查询所有用户列表

-- ----------------------------
-- Table structure for `user`
-- ----------------------------
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,
`address` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '北京');
INSERT INTO `user` VALUES ('2', 'lisi', '123', '上海');

    2、创建maven<springboot-demo-mybatis>工程,并且添加相关依赖。

<!--添加起步依赖-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.4.RELEASE</version>
</parent>

<dependencies>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.0.1</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

    3、在src的com.study包下创建MybatisApplication启动类

@SpringBootApplication
public class MybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisApplication.class, args);
    }
}

    4、在resources目录下添加application.properties文件或者application.yml文件

#连接数据库
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost/springboot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
#mybatis别名
mybatis.type-aliases-package=com.study.pojo
#加载映射文件
mybatis.mapper-locations=classpath:mapper/*.xml
#设置日志,com.study:只查看该包下程序的日志
logging.level.com.study=debug

    5、在工程的src目录下的<com.study.pojo包下>创建User对象

public class User {
    private Integer id;
    private String username;
    private String password;
    private String address;
    // TODO getters、setters
}

    6、编写mapper接口:在src目录下<com.study.mapper包下>创建UserMapper

     在接口中添加@Mapper注解(标记该类是一个Mapper接口,可以被SpringBoot自动扫描)

@Mapper
public interface UserMapper{
    
    List<User> findUsers();
}

    7、编写映射文件:在工程的resources/mapper目录下创建UserMapper.xml

<mapper namespace="com.study.mapper.UserMapper">

    <select id="findUsers" resultType="user">
        SELECT * FROM user
    </select>

</mapper>

    8、在src的<com.study.service包下创建>service接口:

public interface UserService {
    List<User> findUsers();
}

    9、<com.study.service.impl包下创建>service实现类:

@Service
public class UserServiceImpl implements UserService{

    @Autowired(required = false)
    private UserMapper userMapper ;

    @Override
    public List<User> findUsers() {
        return userMapper .findUsers();
    }
}

    10、<com.study.controller包下创建>下创建UserController:

 

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/findUsers")
    public List<User> findUsers(){
        List<User> users = userService.findUsers();
        return users;
    }
}

    11、发布程序并访问

      http://localhost:8080/user/findUsers

 

 

 

  (2)集成Spring Data Redis

    1、在(1)maven<springboot-demo-mybatis>工程中 添加Redis启动器

<!--redis-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--json解析-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.51</version>
</dependency>

    2、在application.properties文件中配置连接Redis的信息:

#redis,本地可以不配置,默认配置
spring.redis.host=localhost
spring.redis.port=6379

    3、更新UserServiceImpl类中的findAll方法。在该类中注入RedisTemplate对象。

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Override
    public List<User> findUsers() {
        // 首先判断缓存中是否有数据
        String text = stringRedisTemplate.boundValueOps("study:springboot:user:id:1").get();
        List<User> list = JSON.parseArray(text, User.class);
        if(list == null){
            // 从数据库中查询
            list = userMapper.findAll();
            // 放入缓存
        	stringRedisTemplate.boundValueOps("study:springboot:user:id:1")
            	.set(JSON.toJSONString(list));
        }
        return list;
    }
}

//PS:key = 产线名:服务名:表名:数据类型:key

   

   PS:RedisTemplate 和 StringRedisTemplate的区别:


1、RedisTemplate 的序列化采用的是 JdkSerializationRedisSerializer ,在存储到 Redis 的时候会将 对象 序列化为 字节数组
2、StringRedisTemplate 的序列化采用的是 StringRedisSerializer ,适用于存储的 value 为 String 的情况


结论:


Redis 中存储对象使用 RedisTemplate ,存储字符串使用 StringRedisTemplate

JdkSerializationRedisSerializer 和 StringRedisSerializer
1、JdkSerializationRedisSerializer底层还是通过调用JDK的IO操作ObjectInputStream和ObjectOutputStream类实现POJO的序列化和反序列化,优点是反序列化时不需要提供类型信息(class),但缺点是需要实现Serializable接口,还有序列化后的结果非常庞大,是JSON格式的5倍左右,这样就会消耗redis服务器的大量内存。

2、使用Jackson库将对象序列化为JSON字符串。优点是速度快,序列化后的字符串短小精悍,不需要实现Serializable接口。但缺点也非常致命,那就是此类的构造函数中有一个类型参数,必须提供要序列化对象的类型信息(.class对象)

 

 

  (3)集成定时器

    1、在SpringBoot启动类中添加开启定时任务注解:@EnableScheduling

    2、<com.study.task包下>编写定时任务程序

 

@Component
public class TimeProgarm {

    @Scheduled(cron = "30 45 15 08 07 *")    // cron表达式
    public void myTask(){
        System.out.println("程序执行了");
    }
}

 

  

  (4)集成单元测试

      编写单元测试类。ps:单元测试类需要在启动类包或者子包下。

@RunWith(SpringRunner.class)
@SpringBootTest
public class MybatisTest {

	@Autowired
    private UserService userService;

    @Test
    public void contextLoad(){
        List<User> users = userService.findUsers();
        for (User user : users) {
            System.out.println(user);
        }
    }
}

  

 

posted @ 2020-11-02 20:57  ZFAblog  阅读(481)  评论(0)    收藏  举报