SpringBoot-18-Mybatis基础操作
什么是Mybatis?
mybatis是apache的一个开源项目ibatis
,2010年正式改名为mybatis
。他是一个Java的持久层框架,ibatis
提供的持久层框架包含 SqL Maps和Data Access Objects(Daos)
Mybatis特点:
Mybatis简单易学:可以通过官方文档,快的掌握和实现开发
支持动态sql编写
降低sql和代码的高耦合性,将业务层和数据访问层分开
为什么我们要介绍Mybatis呢?这是因为在国内很多公司都在使用Mybtais,我们今天就简单介绍一下Mybatis的基础操作增删改查。
代码实现
创建项目以后在pom.xml
中添加mysql驱动和mybtis的相关依赖
<!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!--mybatis依赖--> <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency>
注:
mybatis-spring-boot-starter
版本和springboot
对应关系以及其他依赖关系,可以到mvn repository搜索查看
在application.yml中添加数据库配置
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
- 在这里我们使用默认的数据源(数据源配置之后会单独进行讲解)
创建表中对应表和实体类
我们还是用之前创建的student
表,具体sql可以查看Spring-Data-JPA多数据源配置章节,里面有具体实现Student的sql,现在我们只创见Student的实体类
@Data public class Student implements Serializable { /** * ID */ private Long id; /** * 学生姓名 */ private String name; /** * 性别默认男 */ private String sex; /** * 年龄 */ private Integer age; /** * 注册手机号 */ private String mobile; /** * 注册邮箱 */ private String email; private Date createDate; private Date updateDate; /** * 帐户是否可用(1 可用,0 删除用户) */ private Integer isEnabled; private static final long serialVersionUID = 1L; }
创建实体类对应的mapper
本次我们介绍的是直接在StudentMapper中实现sql,不适用其他xml实现mapper的方式(下一章节单独介绍)
public interface StudentMapper { @Select("SELECT * FROM STUDENT WHERE ID = #{id}") Student findById(@Param("id") Long id); @Update("UPDATE STUDENT SET NAME=#{name},SEX=#{sex},AGE=#{age},EMAIL=#{email},MOBILE=#{mobile} WHERE id=#{id}") void updateStudent(Student student); @Insert("INSERT INTO STUDENT(NAME, SEX,AGE,EMAIL,MOBILE) VALUES(#{name}, #{sex}, #{age}, #{email}, #{mobile})") int insert(@Param("name") String name, @Param("sex") String sex, @Param("age") Integer age, @Param("email") String email, @Param("mobile") String mobile ); @Insert("INSERT INTO STUDENT(NAME, SEX,AGE,EMAIL,MOBILE) VALUES(#{name}, #{sex}, #{age}, #{email}, #{mobile})") int insertByObject(Student student); }
注:
- 在传递数据进行数据的增和改的时候有几种常用的尝试
mybatis注解 | 说明 |
@Param | 格式例如mapper中的insert方法,很好理解 |
使用对应传递 | 格式 例如mappe中insertByObject方法的实现 |
创建Service接口
创建StudentService接口
public interface StudentService { int insert( String name, String sex, Integer age, String email, String mobile ); Student updateStudent(Student student); int insertByObject(Student student); Student findById( Long id); }
实现Service接口的实现
创建StudentServiceImpl去实现StudentService
@AllArgsConstructor @Service public class StudentServiceImpl implements StudentService { private StudentMapper studentMapper; @Override public int insert(String name, String sex, Integer age, String email, String mobile) { int insert = studentMapper.insert(name, sex, age, email, mobile); return insert; } @Override public int insertByObject(Student student){ return studentMapper.insertByObject(student); } @Override public Student updateStudent(Student student){ studentMapper.updateStudent(student); return student; } @Override public Student findById( Long id) { return studentMapper.findById(id); } }
控制层的实现
创建StudentController去实现控制层
@Slf4j @RequestMapping("/student") @RestController public class StudentController { @Autowired private StudentService studentService; @GetMapping("create") public int create(String name, String sex, Integer age, String email, String mobile) { int insert = studentService.insert(name, sex, age, email, mobile); return insert; } @PostMapping("insert") public int insertByObject(@RequestBody Student student){ return studentService.insertByObject(student); } @PostMapping("update") public Student updateStudent(@RequestBody Student student) { return studentService.updateStudent(student); } @GetMapping("/select/{id}") public Student findByName(@PathVariable("id") Long id) { return studentService.findById(id); } }
测试
使用postman测试一下分别测试一下接口:
http://localhost:8899/student/select/11 GET方法
http://localhost:8899/student/update POST方法
http://localhost:8899/student/create POST方法
测试结果如下:
如果您觉得本文不错,欢迎点击下方关注支持,您的关注是我坚持的动力!