使用到的技术:
Spring Boot:用于简化Spring应用的开发。
Dynamic DataSource:实现动态多数据源的访问和切换
Oracle JDBC Driver:与Oracle数据库进行连接和交互。
Mybatis-Plus:简化SQL映射和数据库访问。其中BaseMapper接口提供了对数据表进行基本操作的功能。
Lombok:用于简化Java类的开发,自动生成常用的代码,比如getter、setter、构造函数等。
Spring MVC:用于处理http请求和相应,提供了控制层的功能。
实现步骤如下:
1. 创建项目,添加所需依赖
- 创建Spring Boot项目:使用 Spring Initializr 创建一个 Spring Boot 项目。
- 添加依赖:pom.xml配置文件中添加Maven依赖
<!-- mybatis-plus Mybatis是开源的java数据库框架-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!--动态多数据库连接,用于管理多个数据源-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<!-- Oracle JDBC Driver -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.8.0.0</version>
</dependency>
2. 配置数据库连接
在application.properties中配置Oracle数据库连接信息
#oracle
spring.datasource.dynamic.primary=anita #给这个数据源命名
spring.datasource.dynamic.datasource.anita.url=your database url
spring.datasource.dynamic.datasource.anita.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.dynamic.datasource.anita.username=username
spring.datasource.dynamic.datasource.anita.password=password
3. 定义数据模型
创建一个与要操作的数据表对应的java实体类
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data //使用Lombok自动生成getter setter方法,以及toString、equals和hashCode方法
@TableName(value = "base_person") //指定该类为对应数据库的base_person表
@NoArgsConstructor //生成无参构造函数
@AllArgsConstructor //生成全参构造函数
public class BasePerson implements Serializable { //Serializable 使BasePerson类支持序列化
private String id;
private String name;
}
4. 创建Mapper
创建一个mapper接口
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.model.BasePerson;
import org.apache.ibatis.annotations.Mapper;
@Mapper// 标识这是一个MyBatis Mapper 接口,用于执行数据库操作
@DS("anita") //使用指定名为anita的数据源
public interface BasePersonMapper extends BaseMapper<BasePerson> { //继承了 MyBatis Plus 提供的基本 CRUD 操作方法。
}
5. 编写服务层
5.1 使用QueryWrapper查询
package com.example.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.model.BasePerson;
import com.example.repository.BasePersonMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class DbService {
@Autowired
private BasePersonMapper personMapper;
//根据id查询name
public String getNameById(String id)
{
return personMapper.selectById(id).getName();
}
//通过自定义sql查询
public List<BasePerson> getPersonInfo(String id)
{
// TODO 这里使用自定义的查询sql封装
QueryWrapper<BasePerson> queryWrapper = new QueryWrapper<>();
queryWrapper.select("id", "name")
.eq("id", id);
List<BasePerson> result=personMapper.selectList(queryWrapper);
return result;
}
}
5.2 自定义sql查询
Oracle中的某些查询方法(比如递归查询),QueryWrapper是无法实现的(QueryWrapper不支持Start With和Connect By语法)。这种情况可以通过自定义Mapper的方式来实现。
5.2.1 Mapper
@Mapper
@DS("anita")
public interface BaseMenuMapper extends BaseMapper<BaseMenu> {
@Select("select * from base_menu start with parent_id is null connect by prior id=parent_id order siblings by sort")
List<BaseMenu> getMenuTree();
}
5.2.2 Service
@Service
public class BaseMenuService {
@Autowired
private BaseMenuMapper baseMenuMapper;
//查询
public List<BaseMenu> getMenuTree()
{
return baseMenuMapper.getMenuTree();
}
}
6. 创建控制器
编写API进行数据访问
import com.example.service.DbService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/test")
public class TestController {
@Autowired
private DbService dbService;
@GetMapping(value = "/getPersonName")
public List<BasePerson> GetPersonName(String id){
return dbService.getPersonInfo(id);
}
}
版权归原作者 赵 XiaoQin 所有, 如有侵权,请联系我们删除。