SpringBoot与其他框架集成( 集成mybatis、集成Spring Data Redis)

本文介绍了如何在SpringBoot项目中集成Mybatis和Spring Data Redis,包括配置数据库连接、Mapper接口与XML映射文件、Service与Controller的编写。同时,详细讲述了Spring Data JPA的集成步骤,强调了配置中的关键点,如mapper-locations的正确设置。通过这些集成,实现了数据库操作和Redis缓存的便捷使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过spring initializr创建maven工程springboot-mysql-redis,并且勾选相关依赖(web、数据库驱动、mybatis)

springboot-mysql-redis工程,做了上面的勾选,对应的pom.xml依赖如下↓

<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
        
        <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
        
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.0.1</version>
		</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>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

准备Bean对象类对应数据库信息:

(2)编写mapper接口以及映射文件

MyBatis的Dao:Dao接口、Dao接口对应的映射文件(xml)

编写UserMapper接口并添加@Mapper注解(标记该类是一个Mapper接口,可以被SpringBoot自动扫描)
#上面这个可以不做:在启动类上添加@MapperScan(basePackages = {"com.qf.dao"})Dao接口的包扫描批量操作也行

在配置文件中增加Mapper.xml文件扫描的地址:特别要注意的是配置里面的不是config-location(核心配置文件),而是mapper-locations

(3)编写service接口以及实现类

(4) 编写controller

(5)配置application.properties

#连接数据库
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.sen.domain
#加载映射文件
mybatis.mapper-locations=classpath:mapper/*.xml
#设置日志,com.qf.mapper:只查看该包下程序的日志
logging.level.com.qf.mapper=debug

使用下application.yml文件配置如下↓(主要是基本的四大连接参数,还有扩展的映射文件位置,类型别名包扫描,驼峰转换,日志级别包扫扫描)

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
mybatis:
  mapper-locations: mapper/*.xml
  type-aliases-package: com.sen.bean
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    com.sen.dao: debug

推荐使用上面的application.yml文件配置↑,另外上面写mapper-locations: com/sen/dao/*.xml更通用!

特别要注意的是配置里面的不是config-location(核心配置文件),而是mapper-locations,这个有点坑!!!

否则报错Could not open ServletContext resource [/com/sen/dao/UserDao.xml]

2 集成Spring Data Redis,增加redis缓存,改进mybatis服务

导入依赖:

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

(2)配置application,其实这一步可以不配置,因为现在redis服务器就在我的电脑即默认本机,默认端口

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

#redis,端口可以不填,默认就是6379
spring.redis.host=192.168.200.129
spring.redis.port=6379

(3)更新程序

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

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 查询所有
     * @return
     */
    @Override
    public List<User> findAll() {
        String key = "UserList";
        //先看缓存中是否有数据
        List<User> users = (List<User>) redisTemplate.boundValueOps(key).get();

        //如果有,直接取缓存数据
        if(users!=null){
            return users;
        }

        //如果没有,则查询数据
        users = userMapper.findAll();

        //再将数据存入到缓存
        redisTemplate.boundValueOps(key).set(users);
        return  users;
    }
}

集成Spring Data JPA(jpa,java持久化访问

什么是SpringData? Spring Data是一个用于简化数据访问,并支持云服务的开源框架,其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务,Spring Data可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作,除了CRUD外,还包括如分页,排序等一些常用的功能 Spring Data的官网:Redirecting…

SpringData提供了对数据库的操作对象,使我们对数据库的操作变得更加的简单和方便,而且在操作数据库的时候,无需编写SQL语句

集成步骤

 1.创建工程
 2.引入依赖
 3.创建Pojo
 4.配置Pojo注解-[*]
 5.编写Dao,Dao需要继承JpaRepository<T,ID>-[*]
 6.编写Service,并调用Dao实现增删改查
 7.编写Controller,调用Service实现增删改查
 8.测试

导入依赖:

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

(2)编写pojo

在工程的src目录下创建com.sen.bean.User对象,会自动创建表

@Entity
@Table(name = "user")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;
    
    @Column(name = "username")
    private String username;
    //@Column:指定表的列名,如果表字段跟实体类成员变量名字相同可以不写这个注解!
    private String password;
    private String address;
    //getters/setters
}

注解说明↓

 @Entity:表明为一个实体对象
 @Table:指定映射的表
 ​
 @Id:指定为主键
 @GeneratedValue:指定主键的生成策略
     TABLE:使用一个特定的数据库表格来保存主键。 
     SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。 
     IDENTITY:主键由数据库自动生成(主要是自动增长型) 
     AUTO:主键由程序控制
     
 @Column:指定表的列名,如果表字段跟实体类成员变量名字相同可以不写这个注解!

(3)编写dao接口

在工程src目录下创建dao接口,需要继承JpaRepository对象(该对象完成对数据库的CRUD过程,并且支持分页查询、排序等功能)。

在src下创建com.sen.dao.UserDao接口,代码如下:

 package com.sen.dao;
 ​
 import com.qf.bean.User;
 import org.springframework.data.jpa.repository.JpaRepository;
 ​
 public interface UserDao extends JpaRepository<User,Integer> {//<要操作的实体类,和主键id的类型>
 }

(4)编写service接口以及实现类

1、编写service接口:

 package com.sen.service;
 ​
 import com.sen.bean.User;
 ​
 import java.util.List;
 ​
 public interface UserService {
     List<User> findUsers();
 ​
     User findUserById(Integer id);
 ​
     void saveUser(User user);
 ​
     void updateUser(User user);
 ​
     void deleteUserById(Integer id);
 }

2、编写service实现类:注意查询一个用userDao.findById(id).get();↓

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;

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

    //注意查询一个用userDao.findById(id).get();↑
    @Override
    public User findUserById(Integer id) {
        Optional<User> optional = userDao.findById(id);
        return optional.get();
    }

    @Override
    public void saveUser(User user) {
        userDao.save(user);
    }

    @Override
    public void updateUser(User user) {//?没有给id只给username就是增加跟上面一样!
        //并没有update方法如果id存在,则执行更新操作,没有id就是增加方法!
        userDao.save(user);
    }

    @Override
    public void deleteUserById(Integer id) {
        userDao.deleteById(id);
    }
}

(5)编写controller

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

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

    @RequestMapping("/findUserById/{id}")
    public User findUserById(@PathVariable Integer id){
        return userService.findUserById(id);
    }

    @RequestMapping("/saveUser")
    public void saveUser(User user){//?
        userService.saveUser(user);
    }

    @RequestMapping("/updateUser")
    public void updateUser(User user){//?没有给id只给username就是增加跟上面一样!
        userService.updateUser(user);
    }

    @RequestMapping("/deleteUserById/{id}")
    public void deleteUserById(@PathVariable Integer id){
        userService.deleteUserById(id);
    }
}

配置application

在application.properties中配置相关JPA内容↓

#数据源,连接数据库
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.1.129:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root

#jpa可选相关配置↓
spring.jpa.database=mysql
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.generate-ddl=true
#hibernate.ddl-auto,建表策略:
#update:每次运行程序,没有表会新建表,表内有数据不会清空,只会更新(为了效果明显,可以先删除原来的user表)
#create:每次运行程序,没有表会新建表,表内有数据会清空

#create-drop:每次程序结束的时候会清空表
#validate:运行程序会校验数据与数据库的字段类型是否相同,不同会报错

注:

集成SpringDataJPA

  • Dao需要继承JpaRepository<T,ID>

  • JpaRepository<T,ID>中已经实现了增删改查,可以拿着直接使用

  • 继承过来的save方法,没有id就是增加,有id才是更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值