springboot中使用第三方技术的启动器的命名方式
本次案例的环境
数据库的SQL脚本:
CREATE TABLE `t_ssm_emp` (
`emp_id` int NOT NULL AUTO_INCREMENT,
`emp_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`age` int NULL DEFAULT NULL,
`sex` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`emp_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_ssm_emp
-- ----------------------------
INSERT INTO `t_ssm_emp` VALUES (1, '刘备', 22, '男', '[email protected]');
INSERT INTO `t_ssm_emp` VALUES (2, '关羽', 23, '女', '[email protected]');
INSERT INTO `t_ssm_emp` VALUES (3, '张飞', 24, '男', '[email protected]');
执行脚本:
创建数据库
新建查询
执行脚本
引入依赖
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>2.2.0version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.33version>
dependency>
配置文件(application.yaml)
1.原始的spring框架要使用第三方的技术——————将第三方技术注册为Bean 并且要给IOC管理
2.给IOC管理?通过使用spring的xml配置文件中配置 bean标签的方式
3.springboot的启动了就是一个配置类 所有也可以在这里使用注解的方式来进行原生注册Bean(Spring纯注解开发)
4.也可以通过springboot的配置文件进行注册(yml文件)—推荐(springboot和该技术在进行了整合后才能使用)
# 修改Tomcat端口
server:
port: 80
# Mysql的连接信息
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver # 驱动包版本 cj的是8系列的数据库
username: root # mysql的登录用户名
password: 111111 # mysql的登录密码
url: jdbc:mysql://localhost:3306/springboot2_5 # 请求的数据库服务路径
创建Emp员工实体
package top.yxqz.number2.entity;
/**
* @author: 余小小
* @date: 2023/9/13
* @description:员工实体类---和数据库中的表格列名保持一致 需要满足下划线和小驼峰的规范
* 数据库----Java对照类型参考
* int---int-- Integer
* varchar--string-String
* char---char--String
* 因为在做前后端分离的时候 我们大多数 后端都是返回 的数据(json对象、集合)
* 集合里面都是装的对象 对象可能会需要使用属性进行赋值 或者修改操作 是引用类型就比较方便
* ORM框架会根据Java中的数据类型来自动ORM映射 如果是引用数据类型 映射的默认是null 可以避免部分报错
*/
public class Emp {
// 员工id---主键
private Integer empId;
// 员工姓名
private String empName;
// 员工年龄
private Integer age;
// 员工性别
private String sex;
// 员工邮箱
private String email;
public Emp() {
}
public Emp(Integer empId, String empName, Integer age, String sex, String email) {
this.empId = empId;
this.empName = empName;
this.age = age;
this.sex = sex;
this.email = email;
}
/**
* 获取
* @return empId
*/
public Integer getEmpId() {
return empId;
}
/**
* 设置
* @param empId
*/
public void setEmpId(Integer empId) {
this.empId = empId;
}
/**
* 获取
* @return empName
*/
public String getEmpName() {
return empName;
}
/**
* 设置
* @param empName
*/
public void setEmpName(String empName) {
this.empName = empName;
}
/**
* 获取
* @return age
*/
public Integer getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(Integer age) {
this.age = age;
}
/**
* 获取
* @return sex
*/
public String getSex() {
return sex;
}
/**
* 设置
* @param sex
*/
public void setSex(String sex) {
this.sex = sex;
}
/**
* 获取
* @return email
*/
public String getEmail() {
return email;
}
/**
* 设置
* @param email
*/
public void setEmail(String email) {
this.email = email;
}
public String toString() {
return "Emp{empId = " + empId + ", empName = " + empName + ", age = " + age + ", sex = " + sex + ", email = " + email + "}";
}
}
部分数据类型的设计不一致?
控制层
package top.yxqz.number2.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import top.yxqz.number2.service.EmpService;
/**
* @author: 余小小
* @date: 2023/9/13
* @description: 员工的控制层
* 返回的都是数据@RestController
*/
@RestController
public class EmpController {
@Autowired
private EmpService empService;
}
服务层接口
package top.yxqz.number2.service;
/**
* @author: 余小小
* @date: 2023/9/13
* @description:员工服务层接口
*/
public interface EmpService {
}
服务层接口的实现类
package top.yxqz.number2.service.imp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import top.yxqz.number2.dao.EmpDao;
import top.yxqz.number2.service.EmpService;
/**
* @author: 余小小
* @date: 2023/9/13
* @description:服务层接口的实现类
*/
@Service
public class EmpServiceImp implements EmpService {
// 此处注入的是ORM框架自动生成的代理实现Mapper类 不在是自己实现的数据层
@Autowired
private EmpDao empDao;
}
数据层
package top.yxqz.number2.dao;
import org.apache.ibatis.annotations.Mapper;
/**
* @author: 余小小
* @date: 2023/9/13
* @description:数据层
* 以前是自己来实现数据操作--自己JDBC操作数据库
* 整合了Mybatis框架后 可以使用ORM框架进行操作
* 1.使用xml方式来创建该接口的代理--手动(不推荐了)
* 2.使用注解的方式 让ORM框架自动创建一个mapper的代理对象(mybaits的注解开发)
*/
@Mapper
public interface EmpDao {
}
控制层—EmpController
package top.yxqz.number2.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import top.yxqz.number2.entity.Emp;
import top.yxqz.number2.service.EmpService;
import java.util.List;
/**
* @author: 余小小
* @date: 2023/9/13
* @description: 员工的控制层
* 返回的都是数据@RestController
*/
@RestController
public class EmpController {
@Autowired
private EmpService empService;
/**
* 需求:获取所有员工信息(用集合来接收)(list)
* 对一对应对象
* 对多对应集合
*
* return empService.getAllEmps();
* 代表了当前调用 是服务层的getAllEmps方法 并且该方法的返回值是List
*/
public List<Emp> getAllEmps() {
return empService.getAllEmps();
}
}
服务层接口
package top.yxqz.number2.service;
import top.yxqz.number2.entity.Emp;
import java.util.List;
/**
* @author: 余小小
* @date: 2023/9/13
* @description:员工服务层接口
*/
public interface EmpService {
List<Emp> getAllEmps();
}
服务层实现类
package top.yxqz.number2.service.imp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import top.yxqz.number2.dao.EmpDao;
import top.yxqz.number2.entity.Emp;
import top.yxqz.number2.service.EmpService;
import java.util.List;
/**
* @author: 余小小
* @date: 2023/9/13
* @description:服务层接口的实现类
*/
@Service
public class EmpServiceImp implements EmpService {
// 此处注入的是ORM框架自动生成的代理实现Mapper类 不在是自己实现的数据层
@Autowired
private EmpDao empDao;
@Override
public List<Emp> getAllEmps() {
return empDao.getAllEmps();
}
}
数据层
package top.yxqz.number2.dao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import top.yxqz.number2.entity.Emp;
import java.util.List;
/**
* @author: 余小小
* @date: 2023/9/13
* @description:数据层
* 以前是自己来实现数据操作--自己JDBC操作数据库
* 整合了Mybatis框架后 可以使用ORM框架进行操作
* 1.使用xml方式来创建该接口的代理--手动(不推荐了)
* 2.使用注解的方式 让ORM框架自动创建一个mapper的代理对象(mybaits的注解开发)
*/
@Mapper
public interface EmpDao {
@Select("select * from t_ssm_emp;")
List<Emp> getAllEmps();
}
测试代码
package top.yxqz.number2;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import top.yxqz.number2.controller.EmpController;
import top.yxqz.number2.entity.Emp;
import java.util.List;
/**
* @author: 余小小
* @date: 2023/9/13
* @description:
*/
@SpringBootTest
public class TestEmp {
// 注入控制层---调用服务层--数据层
@Autowired
private EmpController empController;
/*
建议方法名 和要测试的“接口”名保持一致
*/
@Test
public void getAllEmps() {
List<Emp> allEmps = empController.getAllEmps();
System.out.println(allEmps);
}
}
测试结果:没有报错 但是数据不对 有数据是null
因为 Mysql数据库中用了下划线 但是我们实体类是使用的小驼峰
以前SMM阶段 可以使用Mybaits的Setting配置来控制插件和开启相关的功能 但是Springboot呢?
Springboot的所有配置都在 application.yml中 所以关于Mybatis的配置也在application.yml中
在application.yml中 开启Mybaits自动转换 ,去Mybaits的官网去找先关整合Springboot的配置mybatis – MyBatis 3 | 简介
#配置Mybatis
mybatis:
configuration:
map-underscore-to-camel-case: true # 开启自动下划线转驼峰