SpringBoot入门,这一篇就够了(四)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: SpringBoot入门,这一篇就够了

5.5. 整合mybatis


5.5.1. mybatis


1. SpringBoot官方并没有提供Mybatis的启动器,不过Mybatis官网自己实现了。在项目的 pom.xml 文件中加入如下依赖:


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


2. 配置 application.yml ,常用配置如下:


# mybatis配置
mybatis:
  # 实体类别名包路径
  type-aliases-package: com.itterence.pojo
  # 映射文件路径
  # mapper-locations: classpath:mappers/*.xml
  configuration:
    # 控制台输出执行sql
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl


3. 配置Mapper扫描

需要注意,这里没有配置mapper接口扫描包,因此我们需要给每一个Mapper接口添加 @Mapper 注解,才能被识别。


package com.itterence.mapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper {
}


或者,我们也可以不加注解,而是在启动类上添加扫描包注解(推荐):


@SpringBootApplication
@MapperScan("com.itterence.mapper")
public class Application {
public static void main(String[] args) {
        // 启动代码
        SpringApplication.run(Application.class, args);
    }
}


以下代码示例中,我们将采用@MapperScan扫描方式进行。


5.5.2. 通用mapper


1. 通用Mapper的作者也为自己的插件编写了启动器,我们直接引入即可。在项目的 pom.xml 文件中加入如下依赖:


<!-- 通用mapper -->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.1.5</version>
</dependency>


注意:一旦引入了通用Mapper的启动器,会覆盖Mybatis官方启动器的功能,因此需要移除对官方Mybatis启动器的依赖。


2. 编写UserMapper 无需任何配置就可以使用了。如果有特殊需要,可以到通用mapper官网看:


https://github.com/abel533/Mapper/wiki/3.config


编写 springboot_demo\src\main\java\com\itterence\mapper\UserMapper.java 如下:


package com.itterence.mapper;
import com.itterence.pojo.User;
import tk.mybatis.mapper.common.Mapper;
public interface UserMapper extends Mapper<User> {
}


3. 把启动类上的@MapperScan注解修改为通用mapper中自带的:


67.png


4. 在User实体类上加JPA注解

修改 springboot_demo\src\main\java\com\itterence\pojo\User.java 如下:


68.png


5. 对 UserService 的代码进行简单改造

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
    public User queryById(Long id){
        //根据id查询
        return userMapper.selectByPrimaryKey(id);
    }
    @Transactional
    public void saveUser(User user){
        System.out.println("新增用户...");
        userMapper.insertSelective(user);
    }
}


5.6. 启动测试


将 HelloController 进行简单改造


@Autowired
private UserService userService;
/**
 * 根据id获取用户
 * @param id 用户id
 * @return 用户
 */
@GetMapping("/user/{id}")
public User queryById(@PathVariable Long id){
    return userService.queryById(id);
}


我们启动项目,查看:


69.png


5.7. Junit测试


1. 在springboot项目中如果要使用Junit进行单元测试,则需要添加如下的依赖:


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>


2. 在测试包下编写测试类

在测试类上面必须要添加 @SpringBootTest 注解。

编写测试类 springboot_demo\src\test\java\com\itterence\service\UserServiceTest.java

70.png


package com.itterence.service;
import com.itterence.pojo.User;
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.Date;
import static org.junit.Assert.*;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTest {
    @Autowired
    private UserService userService;
    @Test
    public void queryById() {
        User user = userService.queryById(1L);
        System.out.println("user = " + user);
    }
    @Test
    public void saveUser() {
        User user = new User();
        user.setUserName("test");
        user.setName("test");
        user.setPassword("123456");
        user.setSex(1);
        user.setAge(20);
        user.setCreated(new Date());
        userService.saveUser(user);
    }
}


测试代码结构如:

71.png


5.8. 整合Redis


在 pom.xml 文件中添加如下依赖;

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>


配置 application.yml 文件;


spring:
  redis:
    host: 192.168.1.105
    port: 6379


73.png


编写 src\test\java\com\itterence\redis\RedisTest.java 测试代码;

package com.itterence.service;
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;
import java.util.Set;
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTest {
    @Autowired
    private RedisTemplate redisTemplate;
    @Test
    public void test() { //string字符串
        //redisTemplate.opsForValue().set("str", "heima");
        redisTemplate.boundValueOps("str").set("heima");
        System.out.println("str = " + redisTemplate.opsForValue().get("str")); 
        //hash散列
        redisTemplate.boundHashOps("h_key").put("name", "黑马");
        redisTemplate.boundHashOps("h_key").put("age", 13);
        //获取所有域对应的值
        Set set = redisTemplate.boundHashOps("h_key").keys();
        System.out.println("hash散列所有的域:" + set);
        List list = redisTemplate.boundHashOps("h_key").values();
        System.out.println("hash散列所有的域值:" + list);
        //list列表
        redisTemplate.boundListOps("l_key").leftPush("c");
        redisTemplate.boundListOps("l_key").leftPush("b");
        redisTemplate.boundListOps("l_key").leftPush("a");
        list = redisTemplate.boundListOps("l_key").range(0, -1);
        System.out.println("列表的值:" + list);
        //set集合
        redisTemplate.boundSetOps("set_key").add("a", "b", "c");
        set = redisTemplate.boundSetOps("set_key").members();
        System.out.println("集合的元素:" + set);
        //sorted set有序集合
        redisTemplate.boundZSetOps("z_key").add("a", 30);
        redisTemplate.boundZSetOps("z_key").add("b", 20);
        redisTemplate.boundZSetOps("z_key").add("c", 10);
        set = redisTemplate.boundZSetOps("z_key").range(0, -1);
        System.out.println("有序集合的元素:" + set);
    }
}


运行上述代码测试

72.png


6. Spring Boot项目部署


6.1. 项目打包


1. 添加项目的pom.xml插件;在pom.xml要显式的加入插件spring-boot-maven-plugin,否则无法产生 jar 清单文件,导致打出来的 jar 无法使用命令运行;


<build>
    <plugins>
        <!-- 打jar包时如果不配置该插件,打出来的jar包没有清单文件 -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.1.5.RELEASE</version>
        </plugin>
    </plugins>
</build>


2. 使用maven的命令package打包;

74.png


之后在项目下的 target 目录中将有如下jar包:


75.png

76.png


【注意】在查看打出的 jar 的时候,将发现 jar 包里面包含 jar 包;这样的包称为 fatJar(肥包)


6.2. 运行


运行打出来的包;使用命令: java –jar 包全名 或者写一个 bat 文件,里面包含 java –jar 包全名;这样就可以双击启动应用。

如执行上述打出来的jar的命令为:

java -jar springboot_demo-1.0-SNAPSHOT.jar


测试则可使用浏览器访问:http://localhost/user/8


77.png


7. 附录—插件安装


在应用spring boot工程的时候;一般情况下都需要创建启动引导类Application.java和application.yml配置文件,而且内容都是一样的;为了便捷可以安装一个IDEA的插件 JBLSpringBootAppGen 在项目上右击之后可以自动生成启动引导类Application.java和application.yml配置文件。


7.1. 安装插件

打开IDEA的设置界面(按 ctrl+alt+S )之后在插件选项中搜索SpringBoot,安装JBLSpringBootAppGen


78.png


7.2. 应用插件


在IDEA中任意一个maven项目或src目录上 右击,选择 JBLSpringBootAppGen 即可。

79.png


在如下的界面中输入 启动引导类的名称并根据需要勾选是否要生成application.yml配置文件。

80.png


点击 OK 之后,在项目中将发现如下内容:


81.png


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
XML Java 测试技术
SpringBoot入门篇 01、Springboot入门及配置(二)
SpringBoot入门篇 01、Springboot入门及配置(二)
|
Java 测试技术 Spring
Gradle从0入门到实战系列【八】SpringBoot集成Junit单元测试
JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。
1331 1
Gradle从0入门到实战系列【八】SpringBoot集成Junit单元测试
|
XML Java 应用服务中间件
SpringBoot 快速入门(保姆级详细教程)
SpringBoot快速入门,保姆级别超详细,解决IDEA创建SpringBoot项目一直转圈圈。
436 0
SpringBoot 快速入门(保姆级详细教程)
|
XML Java 应用服务中间件
SpringBoot 入门程序|学习笔记
快速学习 SpringBoot 入门程序
166 0
|
druid Java 关系型数据库
《SpringBoot篇》01.Springboot超详细入门(基础篇)(三)
《SpringBoot篇》01.Springboot超详细入门(基础篇)(三)
464 0
《SpringBoot篇》01.Springboot超详细入门(基础篇)(三)
|
JSON Java 应用服务中间件
《SpringBoot篇》01.Springboot超详细入门(基础篇)(二)
《SpringBoot篇》01.Springboot超详细入门(基础篇)(二)
153 0
《SpringBoot篇》01.Springboot超详细入门(基础篇)(二)
|
Java 应用服务中间件 Maven
《SpringBoot篇》01.Springboot超详细入门(基础篇)(一)
《SpringBoot篇》01.Springboot超详细入门(基础篇)(一)
210 0
《SpringBoot篇》01.Springboot超详细入门(基础篇)(一)
|
开发框架 负载均衡 前端开发
SpringBoot入门篇 01、Springboot入门及配置(一)
SpringBoot入门篇 01、Springboot入门及配置(一)
|
Java 应用服务中间件 数据库连接
springboot入门demo详解(解决跨域)
微服务自问世以来就一直很火。天天耳听Springboot,Springcloud,docker,这些名词,以前没学Springboot的时候刚学ssm的时候,,说实话头都炸了。单独一个个学习Spring,Springmvc,mybatis还能将就配置,记得当初把三个整合的时候可是费了好大的功夫,然后又将ssm转成idea的maven项目又转了一大圈,找了好久,n个bug才把ssm搭成功。
200 0
springboot入门demo详解(解决跨域)
|
XML JSON Java
第二篇:SpringBoot入门案例(IDEA联网版本)
第二篇:SpringBoot入门案例(IDEA联网版本)
223 0
第二篇:SpringBoot入门案例(IDEA联网版本)