记录了使用springboot 创建一个demo工程,整合mybatisplus实现mysql的增删改查(CRUD)功能,最后通过swagger展示接口及测试,傻瓜式流程,工程测试通过。
废话不多说,Let’s do it!
使用spring initializr创建工程。
这里用默认的有时候连接会异常导致新建工程失败,可以手动改为使用阿里云的地址:https://start.aliyun.com。
Artfact必须小写,否则会点击下一步会报字符导致的异常。
勾选springweb和MyBatis
填写项目名称:
删除工程里面多余的东西:
pom文件添加依赖:
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>2.2.0version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.49version>
dependency>
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.4.3.1version>
dependency>
<dependency>
<groupId>io.springfoxgroupId>
<artifactId>springfox-swagger2artifactId>
<version>2.8.0version>
dependency>
<dependency>
<groupId>io.springfoxgroupId>
<artifactId>springfox-swagger-uiartifactId>
<version>2.8.0version>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
dependency>
resources目录下面新建配置文件application.yaml,并写上数据库和mybatis配置:
# 数据库配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/mytest?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
#配置mybatis规则
#指定mybatis全局映射文件和sql映射文件
mybatis:
# config-location: classpath:mybatis/mybatis-config.xml #全局配置文件位置,一般不适用,直接配置在yaml里面即可
# 这里要注意,用了config.xml就不能
# mapper-locations: classpath:mybatis/mapper/*.xml #sql映射文件位置
configuration:
# 开启驼峰命名规则,也就是数据库的user_id可以对应java的userId,默认是不开启的。
map-underscore-to-camel-case: true
## 标题
在mysql数据库新建数据表user:
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(30) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
)
创建User实体
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@TableName("user") //mybatis默认会从数据库里面寻找user表,如果需要指定表明,使用@TableName("user")指定即可
public class User {
@TableId(type= IdType.AUTO) //解决新增数据自增id很大的问题
private Long id;
private String name;
private Integer age;
private String email;
}
新建Result类,统一返回格式
/**
* 响应体,主要用来做接口统一返回格式
*/
@Data
public class Result {
// 定义jackson对象
private static final ObjectMapper MAPPER = new ObjectMapper();
// 响应业务状态
private Integer status;
// 响应消息
private String msg;
// 响应中的数据
private Object data;
public Result() {
}
public Result(Integer status, String msg, Object data) {
this.status = status;
this.msg = msg;
this.data = data;
}
public Result(Object data) {
this.status = 0;
this.msg = "OK";
this.data = data;
}
public static Result ok() {
return new Result(null);
}
public static Result ok(Object data) {
return new Result(data);
}
public static Result build(Integer status, String msg) {
return new Result(status, msg, null);
}
public static Result build(Integer status, String msg, Object data) {
return new Result(status, msg, data);
}
}
新建MyBatisConfig类
/**
* 使用这个配置类体添加mybatisplus的分页插件
*/
@Configuration
public class MyBatisConfig {
// 最新版
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
return interceptor;
}
}
新建SpringfoxDocConfig类,指定控制器路径
/**
* swagger配置类
*/
@Configuration
@EnableSwagger2
public class SpringfoxDocConfig {
boolean test = true;
@Bean
public Docket customDocket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors
.basePackage("com.yunjia.controller"))
.paths(PathSelectors.any()).build()
.useDefaultResponseMessages(false).enable(test);
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title("springboot整合数据库接口文档").build();
}
}
新建UserController类,里面包含了crud方法。报红先不管,是缺少引用导致,工程建立完毕之后再回来添加引用即可。
@RestController
@Slf4j
@RequestMapping("/user")
@Api(value = "/user",tags = "用户操作") //分类标题
public class UserController {
@Autowired
UserService userService;
/**
* 查询所有记录
* @return
*/
@GetMapping("/getAllUser")
public Page<User> getAllUser() {
List<User> list = userService.list();
for (User user : list) {
log.info(user.toString());
}
//构建分页对象
Page<User> userPage = new Page<>(2,2);
//第一个参数为分页对象,第二个为查询条件(可以不写)
Page<User> page = userService.page(userPage, null);
log.info("总页码:" + page.getPages());
log.info("总记录数:" + page.getTotal());
return page;
}
/**
* 根据id获取数据
* @param
* @return
*/
@RequestMapping(value = "/getUserById",method = RequestMethod.POST)
@ApiOperation(value = "根据id获取用户信息",notes = "实际参数是一个user对象,取对象里面的id查数据库")
public Result getUserById(@RequestBody User user){
log.info("收到了请求:" + user.getId());
User userSelect = userService.getById(user.getId());
log.info("查到了对象:" + userSelect);
return Result.ok(userSelect);
}
/**
* 根据id更新数据
* @param user
* @return
*/
@PostMapping("/update")
@ApiOperation(value = "根据id更新数据",notes = "")
public Result updateById(@RequestBody User user){
boolean ret = userService.updateById(user);
if (!ret){
return Result.build(-1,"更新失败");
}
return Result.ok();
}
/**
* 新增用户
* @param user
* @return
*/
@PostMapping("/save")
@ApiOperation("新增用户")
public Result saveUser(@RequestBody User user){
try {
boolean ret = userService.save(user);
if (!ret){
return Result.build(-1,"新增失败");
}
return Result.ok();
} catch (Exception e) {
return Result.build(-1,e.getMessage());
}
}
/**
* 删除用户
* @param user
* @return
*/
@PostMapping("/delete")
@ApiOperation("删除用户")
public Result deleteUser(@RequestBody User user){
try {
boolean ret = userService.removeById(user.getId());
if (!ret){
return Result.build(-1,"删除失败");
}
return Result.ok();
} catch (Exception e) {
return Result.build(-1,e.getMessage());
}
}
}
新建UserMapper接口
public interface UserMapper extends BaseMapper<User> {
}
新建UserService接口
/**
* ServiceImpl 第一个参数是需要操作的表对应的Mapper,第二个参数表示返回的类型
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
启动类上面添加注解@MapperScan(“com.yunjia.mapper”)
@SpringBootApplication
@MapperScan("com.yunjia.mapper") //这个包下面所有类都标注为mapper。但是还是建议给每个类上面标注mapper。
public class MybatisdemoApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisdemoApplication.class, args);
}
}
启动工程,打开swagger http://localhost:8080/swagger-ui.html可以查看接口文档。测试接口使用postman。
打开mybatis官网:https://github.com/mybatis
进入spring-boot-starter:
选择发布版最新版本,这里可以回去修改pom里面的mybatis文件版本为最新的:
1、新建工程
2、pom里面引入依赖,配置application.yaml
3、新建数据表
4、编写业务代码
5、@MapperScan注解指定扫描路径
简单业务使用注解方式实现,复杂业务还需要进行mapper.xml绑定映射,这里就不展开了。
点击下载源码