SpringBoot-Mybatis代码生成
作者 | springboot葵花宝典
来源 | 今日头条
什么是Mybatis?
mybatis是apache的一个开源项目ibatis,2010年正式改名为mybatis。他是一个Java的持久层框架,ibatis提供的持久层框架包含 SqL Maps和Data Access Objects(Daos)
Mybatis特点:
- Mybatis简单易学:可以通过官方文档,快速掌握和实现开发
- 支持动态sql编写
- 降低sql和代码的高耦合性,将业务层和数据访问层分开
但是在操作Mybatis的时候会有很多重复性操作,为了使得我们减少设置mybatis中的配置文件以及表交互的麻烦,出现了一些mybatis代码生成方案:
- Mybatis Generator
- Mybtis Plus
我们这次介绍Mybatis Generator对Mybatis进行增强和Mybatis的数据操作。
Mybatis Generator实现
Mybatis Generator有多种实现方式xml配置实现方式,代码配置方式以及通过插件方式实现,今天我们就介绍一个最简单的Idea插件方式实现Mybatis Generator,better-mybatis-generator是一个可以根据表进行自动生成mybatis相关的代码,(包括:dao、example、domain、xml)相关插件better-mybatis-generator**官方网址,安装步骤如下:
使用better-mybatis-generator生成Mybatis代码过程
在Idea的DataBase中配置相对于的mysql链接步骤如下:
选择相对应的表进行代码生成,具体步骤如下图:
添加Mybatis的相关依赖
创建项目以后我们要在pom.xml中添加mybatis和mysql驱动,初学者可以查看SpringBoot项目创建学校如何创建项目。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
添加Mybatis相关配置
我们需要在application.yml配置数据库链接,以及Mybatis中xml文件存放位置。
server:
port: 8899
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*.xml
logging:
level:
com.learn.springboot: debug
配置Mybatis中mapper的包扫描位置
配置包扫描路径有两种方式(两者配置方法选一个):
- 在Main入口配置
@MapperScan(basePackages = {"com.learn.springboot.mapper"})
@SpringBootApplication
public class SpringBootPart18Application {
public static void main(String[] args) {
SpringApplication.run(SpringBootPart18Application.class, args);
}
}
- 添加Config配置类(个人推荐使用,为以后配置mybatis分页,多数据源等作准备)
@Configuration
@MapperScan(basePackages = {"com.learn.springboot.mapper"})
public class MybatisConfig {
}
Service层的实现
- Service接口层的实现,代码如下:
public interface StudentService {
void saveStudent(Student student);
void deleteStudent(Long id);
void updateStudent(Student student);
Student getStudent(Long id);
List<Student> getAll();
}
- Service层接口的实现代码如下:
@Service
public class StudentServiceImpl implements StudentService {
/**
* mapper注入
*/
@Autowired
private StudentDaoMapper studentDaoMapper;
/**
* 添加学生
* @param student
*/
@Override
public void saveStudent(Student student) {
//代码自动生成
studentDaoMapper.insert(student);
}
/**
* 根据ID删除学生
* @param id
*/
@Override
public void deleteStudent(Long id) {
//代码自动生成
studentDaoMapper.deleteByPrimaryKey(id);
}
/**
* 更新学生
* @param student
*/
@Override
public void updateStudent(Student student) {
//代码自动生成
studentDaoMapper.updateByPrimaryKeySelective(student);
}
/**
* 根据ID查询学生
* @param id
* @return
*/
@Override
public Student getStudent(Long id) {
//代码自动生成
return studentDaoMapper.selectByPrimaryKey(id);
}
/**
* 获取所有数据
* @return
*/
@Override
public List<Student> getAll() {
//代码自动生成
return studentDaoMapper.selectByExample(null);
}
}
Controller层的实现
@Slf4j
@RestController
@RequestMapping("/student")
public class StudentController {
@Autowired
private StudentService studentService;
@PostMapping("create")
public void saveStudent(@RequestBody Student student) {
studentService.saveStudent(student);
}
@GetMapping("/delete/{id}")
public void deleteStudent(@PathVariable("id") Long id) {
studentService.deleteStudent(id);
}
@PostMapping("update")
public void updateStudent(@RequestBody Student student) {
studentService.updateStudent(student);
}
@GetMapping("/select/{id}")
public Student getStudent(@PathVariable("id") Long id) {
return studentService.getStudent(id);
}
@GetMapping("/selectall")
public List<Student> getAll() {
return studentService.getAll();
}
}
测试
使用postman测试一下分别测试一下接口:
- http://localhost:8899/student/selectall GET方法
- http://localhost:8899/student/select/11 GET方法
- http://localhost:8899/student/update POST方法
- http://localhost:8899/student/delete/11 GET方法
- http://localhost:8899/student/create POST方法
postman测试接口方法如下图: