Spring Boot【全解】5

五、SpringBoot与整合其他技术

 

1.1   SpringBoot整合Mybatis

1.1.1    创建工程

选择springboot项目

 

 

 

项目名称:springboot_mybatis

 

 

 

选择web、mybatis

 

 

 

点击完成

 

 

 

1.1.1    添加Mybatis的起步依赖

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

 

1.1.1   添加数据库驱动坐标

<!--mysql数据库驱动-->
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
</dependency>

 

1.1.2   添加数据库连接信息

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

#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url
=jdbc:mysql:///itcastspringboot
spring.datasource.username
=root
spring.datasource.password
=root

 

1.1.3   创建user表

在itcastspringboot数据库中创建user表

-- ----------------------------
-- 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,
  `name` VARCHAR(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '张三');
INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');

1.1.4   创建实体Bean

创建包com.itheima.domain,创建类User.java

public class User {

    private Integer id;
    private String username;
    private String password;
    private String name;

    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 getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

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

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

 

1.1.5   编写UserDao.java

创建com.itheima.dao,创建类UserDao.java

@Mapper
public interface UserDao {
    public List<User> findAll();
}

注意:@Mapper标记该类是一个mybatis的mapper接口,可以被spring boot自动扫描到spring上下文中

1.1.6   配置Dao映射文件

在src\main\resources\com\itheima\dao路径下加入UserDao.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.dao.UserDao">
    <select id="findAll" resultType="user">
        select * from user
    </select>
</mapper>
或者
使用注解:
@Mapper 
public interface UserDao {
    // 查询所有
   
@Select(value = "select * from user")
    public List<User> findAll();
}
 

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

查找:mybatis的启动依赖

mybatis-spring-boot-autoconfigure-1.1.1.jar

 

 

 

application.properties文件的配置:

#spring集成Mybatis环境,取代applicationContext.xml
#pojo别名扫描包(用于配置文件方式)
mybatis.type-aliases-package=com.itheima.domain
#加载Mybatis映射文件(用于配置文件方式)
mybatis.mapper-locations=classpath:com/itheima/dao/*Dao.xml

1.1.1   编写测试Controller

创建com.itheima.controller,创建类UserController.java

@Controller
public class UserController {

    @Autowired
    private UserDao userDao;

    @RequestMapping("/queryUser")
    @ResponseBody
    public List<User> queryUser(){
        List<User> users = userDao.findAll();
        return users;
    }
}
也可以使用@RestController,可去掉@ResponseBody。
@RestController
public class UserController {

    @Autowired
    private UserDao userDao;

    @RequestMapping("/queryUser")
   
public List<User> queryUser(){
        List<User> users = userDao.findAll();
        return users;
    }
}
 

1.1.2   测试

启动SpringbootMybatisApplication.java

@SpringBootApplication
public class SpringbootMybatisApplication {

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

访问:http://localhost:8080/queryUser

 

 

 

 

注意:如果出现错误:

 

 

 

表示使用高版本的mysql驱动:

 

 

 

如果使用mysql5的版本,不会出现问题。

解决方案:

使用root账号登录sqllyog工具,执行:

SHOW VARIABLES LIKE '%time_zone%';

SET GLOBAL time_zone='+8:00';

或者:

修改mysql安装目录中的D:\Program Files\MySQL\MySQL Server 5.5\my.ini文件

添加:default-time-zone='+08:00'

 

 

 

 

1.1        SpringBoot整合Junit

1.1.1   添加Junit的起步依赖

<!--junit测试的起步依赖-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
</dependency>
 

1.1.2   编写测试类

创建包com.itheima.test,创建类UserTest.java

package com.itheima.test;

import com.itheima.SpringbootMybatisApplication;
import com.itheima.dao.UserDao;
import com.itheima.domain.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.List;


@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootMybatisApplication.class)
public class UserTest {

    @Autowired
    private UserDao userDao;

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

其中,

SpringRunner继承自SpringJUnit4ClassRunner,我们使用哪一个Spring提供的测试引擎都可以

public final class SpringRunner extends SpringJUnit4ClassRunner {
    public SpringRunner(Class<?> clazz) throws InitializationError {
        super(clazz);
    }
}

@SpringBootTest的属性指定的是引导类的字节码对象

@SpringBootTest(classes = SpringbootMybatisApplication.class)

1.1.3   控制台打印信息

运行测试

 

 

 

1.1         SpringBoot整合Spring Data JPA

1.1.1   创建工程

创建工程springboot_jpa

 

 

 

选择web、jpa、redis

 

 

 

1.1.1   添加Spring Data JPA的起步依赖

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

1.1.2   添加数据库驱动依赖

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

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

查找spring-boot-autoconfigure-2.0.1.RELEASE.jar

 

 

 

可以找到spring.jpa的相关属性配置。

application.properties

#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url
=jdbc:mysql:///itcastspringboot
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
 

1.1.1   创建实体配置实体

创建com.itheima.domain,创建类User.java

@Entity
@Table(name = "user")
public class User {
    // 主键
    
@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @Column
    private String username;
    @Column
    private String password;
    @Column
    private String name;

    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 getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

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

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

1.1.2   编写UserRepository

创建包com.itheima.repository,创建接口UserRepository.java

public interface UserRepository extends JpaRepository<User,Integer> {
   // jpa底层提供查询所有的方法
}

 

1.1.3   编写测试类

创建包com.itheima.test,创建类UserTest.java

package com.itheima.test;

import com.itheima.SpringbootJpaApplication;
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 UserTest {

    @Autowired
    private UserRepository userRepository;

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

1.1.4   控制台打印信息

 

 

 

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

原因:jdk缺少相应的jar

解决方案:手动导入对应的maven坐标,如下:

<!--jdk9需要导入如下坐标-->
<dependency>
  
<groupId>javax.xml.bind</groupId>
  
<artifactId>jaxb-api</artifactId>
  
<version>2.3.0</version>
</dependency>

 

  

1.1        SpringBoot整合Redis

使用springboot_jpa项目操作redis,之前我们要操作数据库,现在我们操作索引库。

1.1.1   添加redis的起步依赖

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

 

1.1.2   配置redis的连接信息

查看:spring-boot-autoconfigure-2.0.1.RELEASE.jar

 

 

 

 

 

 spring.redis的配置。

application.xml文件的配置:

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

1.1.1   注入RedisTemplate测试redis操作

创建包com.itheima.test,创建类RedisTest.java

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootJpaApplication.class)
public class RedisTest {
   
@Autowired
   
private UserRepository userRepository;

   
@Autowired
   
private RedisTemplate<String, String> redisTemplate;

   
@Test
   
public void test() throws JsonProcessingException {
       
//redis缓存中获得指定的数据
        
String userListData = redisTemplate.boundValueOps("user.findAll").get();
       
//如果redis中没有数据的话
       
if(userListData==null){
           
//查询数据库获得数据
           
List<User> list = userRepository.findAll();
           
//转换成json格式字符串
           
ObjectMapper om = new ObjectMapper();
            userListData = om.writeValueAsString(list);
           
//将数据存储到redis中,下次在查询直接从redis中获得数据,不用在查询数据库
            
redisTemplate.boundValueOps("user.findAll").set(userListData);
            System.out.println("===============从数据库获得数据,存放到redis===============");
        }
       
else{
            System.
out.println("===============redis缓存中获得数据===============");
        }
        System.
out.println("获取的数据是:"+userListData);
    }
}

 

测试

第一次从数据库中获取数据

 

 第二次从redis非关系型数据库中获取数据

 

 

查看redis数据库

 

posted @ 2022-03-08 17:20  小年的西瓜  阅读(18)  评论(0编辑  收藏  举报