-- 数据库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;
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)