SpringBoot+Mybatis-plus的整合,多数据源增删改查

SpringBoot+Mybatis-plus的整合,多数据源增删改查,第1张

1: 创建数据库表
-- 数据库demo1创建student库表
CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '姓名',
  `age` int(2) DEFAULT NULL COMMENT '年龄',
  `address` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='学生信息表'
-- 数据库demo2创建student_score库表
CREATE TABLE `student_score` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `student_id` int(11) DEFAULT NULL COMMENT '学生id',
  `course` varchar(100) DEFAULT NULL COMMENT '课程',
  `score` int(10) DEFAULT NULL COMMENT '成绩',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='学生课程成绩表'
2: 创建springboot项目(省略),引入相应依赖


    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.6.3
        
    
    com.abc
    springboot-mybatisPlus
    0.0.1-SNAPSHOT
    springboot-mybatisPlus
    Demo project for Spring Boot
    
        1.8
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.projectlombok
            lombok
            true
        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.5.1
        

        
        
            com.baomidou
            dynamic-datasource-spring-boot-starter
            3.4.0
        
        
            mysql
            mysql-connector-java
            runtime
        
        
            com.alibaba
            druid
            1.2.6
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            com.alibaba
            fastjson
            1.2.47
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

3: 编写application.yml配置文件
server:
  port: 9001

# 打印SQL语句到控制台
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

spring:
  datasource:
    dynamic:
      primary: one #设置默认的数据源或者数据源组,默认值即为one
      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      datasource:
        one:  # 数据源1标志
          url: jdbc:mysql://127.0.0.1:3306/demo1
          username: root
          password: 12345
          driver-class-name: com.mysql.cj.jdbc.Driver
          type: com.alibaba.druid.pool.DruidDataSource
          # 下面为连接池的补充设置,应用到上面所有数据源中
          initialSize: 1  # 初始化大小
          minIdle: 3      # 最小
          maxActive: 10   # 最大
          # 配置获取连接等待超时的时间
          maxWait: 60000
          # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
          timeBetweenEvictionRunsMillis: 60000
          # 配置一个连接在池中最小生存的时间,单位是毫秒
          minEvictableIdleTimeMillis: 30000
          validationQuery: select 'x'
          testWhileIdle: true
          testOnBorrow: false
          testOnReturn: false
          # 打开PSCache,并且指定每个连接上PSCache的大小
          poolPreparedStatements: true
          maxPoolPreparedStatementPerConnectionSize: 20
        two:  # 数据源2标志
          url: jdbc:mysql://127.0.0.1:3306/demo2
          username: root
          password: 12345
          driver-class-name: com.mysql.cj.jdbc.Driver
          type: com.alibaba.druid.pool.DruidDataSource
          # 下面为连接池的补充设置,应用到上面所有数据源中
          initialSize: 1  # 初始化大小
          minIdle: 3      # 最小
          maxActive: 10   # 最大
          # 配置获取连接等待超时的时间
          maxWait: 60000
          # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
          timeBetweenEvictionRunsMillis: 60000
          # 配置一个连接在池中最小生存的时间,单位是毫秒
          minEvictableIdleTimeMillis: 30000
          validationQuery: select 'x'
          testWhileIdle: true
          testOnBorrow: false
          testOnReturn: false
          # 打开PSCache,并且指定每个连接上PSCache的大小
          poolPreparedStatements: true
          maxPoolPreparedStatementPerConnectionSize: 20
4: 创建实体类
/**
 * 学生实体类
 * 实体类字段和数据库库表字段保持一致
 */
@Data
@AllArgsConstructor
public class Student {
  	//主键自增
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String name;
    private Integer age;
    private String address;
}
/**
 * 学生成绩实体类
 * 实体类字段和数据库库表字段保持一致
 */
@Data
@AllArgsConstructor
public class Student_score {
  	//主键自增
    @TableId(type = IdType.AUTO)
    private Integer id;
    private Integer student_id;
    private String course;
    private Integer score;
}
5: 编写Mapper数据库交互层
/**
 * 学生类数据交互层
 * 使用数据源1
 */
@Mapper
@DS("one")  //和application.yml中的数据源1标志保持一致
public interface StudentMapper extends BaseMapper {
}

/**
 * 学生成绩类数据交互层
 * 使用数据源2
 */
@Mapper
@DS("two")  //和application.yml中的数据源2标志保持一致
public interface Student_scoreMapper extends BaseMapper {
}
6: 编写Service层接口

/**
 * 学生Service层接口
 */
public interface StudentService {

    //新增学生信息
    int addStudent(Student student);

    //新增学生成绩信息
    int addStudentScore(Student_score student_score);

    //修改学生信息
    int updateStudent(Student student);

    //修改学生成绩信息
    int updateStudentScore(Student_score student_score);

    //根据学生ID删除学生信息
    int deleteStudent(Integer id) ;

    //根据学生ID删除学生成绩信息
    int deleteStudentScore(Integer student_id) ;

    //根据id查询学生信息
    Student queryStudentById(Integer id);

    //查询全部学生信息
    List queryAllStudent();

    //根据学生ID查询学生成绩信息
    List queryStudentScoreById(Integer student_id);
}
7: 编写Service层接口实现类
/**
 * 学生Service层接口实现类
 */
@Service
public class StudentServiceImpl implements StudentService {

    @Autowired
    private StudentMapper studentMapper;

    @Autowired
    private Student_scoreMapper student_scoreMapper;

    /**
     * 新增学生信息
     * @param student  学生信息
     */
    @Override
    public int addStudent(Student student) {
        return studentMapper.insert(student);
    }
    /**
     * 新增学生成绩信息
     * @param student_score 学生成绩信息
     */
    @Override
    public int addStudentScore(Student_score student_score) {
        return student_scoreMapper.insert(student_score);
    }

    /**
     * 修改学生信息
     * @param student 学生信息
     */
    @Override
    public int updateStudent(Student student) {
        //更新条件, 根据id更新
        UpdateWrapper updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("id", student.getId())
                .set("name", student.getName())
                .set("age", student.getAge())
                .set("address", student.getAddress());
        return studentMapper.update(null, updateWrapper);
    }
    /**
     * 修改学生成绩信息
     *
     * @param student_score 学生成绩信息
     */
    @Override
    public int updateStudentScore(Student_score student_score) {
        //根据学生成绩id, 学生ID,课程名称,更新学生成绩信息
        UpdateWrapper updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("id", student_score.getId())
                .eq("student_id", student_score.getStudent_id())
                .eq("course", student_score.getCourse())
                .set("score", student_score.getScore());
        return student_scoreMapper.update(null, updateWrapper);
    }

    /**
     * 根据学生ID删除学生信息
     * @param id 学生ID
     */
    @Override
    public int deleteStudent(Integer id) {
        return studentMapper.deleteById(id);
    }

    /**
     * 根据学生ID删除学生成绩信息
     *
     * @param student_id 学生ID
     */
    @Override
    public int deleteStudentScore(Integer student_id) {
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("student_id", student_id);
        return student_scoreMapper.delete(queryWrapper);
    }
    /**
     * 根据id查询学生信息
     *
     * @param id 学生ID
     */
    @Override
    public Student queryStudentById(Integer id) {
        return studentMapper.selectById(id);
    }

    /**
     * 查询全部学生信息
     */
    @Override
    public List queryAllStudent() {
        return studentMapper.selectList(null);
    }

    /**
     * 根据学生ID查询学生成绩信息
     *
     * @param student_id 学生ID
     */
    @Override
    public List queryStudentScoreById(Integer student_id) {
        //每个学生有可能存在多个成绩
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("student_id", student_id);
        return student_scoreMapper.selectList(queryWrapper);
    }
}
8: 编写Controller层

/**
 * 学生控制器层
 */
@RestController
@RequestMapping("/student")
public class StudentController {

    @Autowired
    private StudentService studentService;

    /**
     * 新增学生信息
     */
    @PostMapping(value = "/saveOne")
    public Map saveOne(@RequestBody Student student) {
        //记录入库信息
        Map resultMap = new HashMap<>();
        try {
            int num = studentService.addStudent(student);
            if (num > 0) {
                resultMap.put("code", 200);
                resultMap.put("msg", "新增学生成功, 入库条数:" + num + "条");
            } else {
                resultMap.put("code", 500);
                resultMap.put("msg", "新增学生失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            resultMap.put("code", 400);
            resultMap.put("msg", "新增学生信息异常");
        }
        return resultMap;
    }


    /**
     * 新增学生成绩信息
     */
    @PostMapping(value = "/saveTwo")
    public Map saveTwo(@RequestBody Student_score student_score) {
        //记录入库信息
        Map resultMap = new HashMap<>();
        try {
            int num = studentService.addStudentScore(student_score);
            if (num > 0) {
                resultMap.put("code", 200);
                resultMap.put("msg", "新增学生成绩成功, 入库条数:" + num + "条");
            } else {
                resultMap.put("code", 500);
                resultMap.put("msg", "新增学生成绩失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            resultMap.put("code", 400);
            resultMap.put("msg", "新增学生成绩信息异常");
        }
        return resultMap;
    }
    /**
     * 修改学生信息
     */
    @PutMapping(value = "/saveThree")
    public Map saveThree(@RequestBody Student student) {
        //记录入库信息
        Map resultMap = new HashMap<>();
        try {
            int num = studentService.updateStudent(student);
            if (num > 0) {
                resultMap.put("code", 200);
                resultMap.put("msg", "修改学生信息成功");
            } else {
                resultMap.put("code", 500);
                resultMap.put("msg", "修改学生信息失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            resultMap.put("code", 400);
            resultMap.put("msg", "修改学生信息异常");
        }
        return resultMap;
    }
    /**
     * 修改学生成绩信息
     */
    @PutMapping(value = "/saveFour")
    public Map saveFour(@RequestBody Student_score student_score) {
        //记录入库信息
        Map resultMap = new HashMap<>();
        try {
            int num = studentService.updateStudentScore(student_score);
            if (num > 0) {
                resultMap.put("code", 200);
                resultMap.put("msg", "修改学生成绩信息成功");
            } else {
                resultMap.put("code", 500);
                resultMap.put("msg", "修改学生成绩信息失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            resultMap.put("code", 400);
            resultMap.put("msg", "修改学生成绩信息异常");
        }
        return resultMap;
    }
    /**
     * 根据学生ID删除学生信息,并且删除对应学生的成绩信息
     */
    @DeleteMapping(value = "/saveFive")
    public Map saveFive(@RequestBody JSONObject jsonObject) {
        //记录入库信息
        Map resultMap = new HashMap<>();
        try {
            //获取请求学生id
            Integer id = jsonObject.getInteger("id");
            //删除学生信息
            int num = studentService.deleteStudent(id);
            //删除学生成绩信息
            int i = studentService.deleteStudentScore(id);
            if (num > 0) {
                resultMap.put("code", 200);
                resultMap.put("msg", "删除学生信息成功");
            } else {
                resultMap.put("code", 500);
                resultMap.put("msg", "删除学生信息失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            resultMap.put("code", 400);
            resultMap.put("msg", "删除学生信息异常");
        }
        return resultMap;
    }



    /**
     * 根据id查询学生信息
     */
    @GetMapping(value = "/saveSix")
    public Map saveSix(@RequestParam("id") Integer id) {
        //记录入库信息
        Map resultMap = new HashMap<>();
        try {
            //存放查询结果
            Map map = new HashMap<>();
            //根据id查询学生信息
            Student student = studentService.queryStudentById(id);
            map.put("student", student);
            //查询学生成绩信息
            List student_scores = studentService.queryStudentScoreById(id);
            map.put("student_scores", student_scores);
            if (student != null) {
                resultMap.put("code", 200);
                resultMap.put("msg", "查询成功");
                resultMap.put("data", map);
            } else {
                resultMap.put("code", 200);
                resultMap.put("msg", "学生信息不存在");
            }
        } catch (Exception e) {
            e.printStackTrace();
            resultMap.put("code", 400);
            resultMap.put("msg", "查询学生信息异常");
        }
        return resultMap;
    }


    /**
     * 查询全部学生信息
     */
    @GetMapping(value = "/saveSeven")
    public Map saveSeven() {
        //记录入库信息
        Map resultMap = new HashMap<>();
        try {
            //查询全部学生信息
            List studentList = studentService.queryAllStudent();
            resultMap.put("code", 200);
            resultMap.put("msg", "查询成功");
            resultMap.put("data", studentList);
        } catch (Exception e) {
            e.printStackTrace();
            resultMap.put("code", 400);
            resultMap.put("msg", "查询学生信息异常");
        }
        return resultMap;
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/728190.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存