0x05 MyBatis & MyBatis-Plus
0x05 MyBatis & MyBatis-Plus
ORM
ORM(Object Relational Mapping,对象关系映射)是为了解决面向对象
对象自动持久化或者数据库数据读取的一项技术
MyBatis
MyBatis是一款优秀的数据持久层ORM框架,被广泛地应用于应用系统。
MyBatis能够非常灵活地实现动态SQL,可以使用XML或注解来配置和映射原生信息,能够轻松地Java的POJO(Plain Ordinary Java Object,普通的Java对象)与数据库中的表和字段进行映射关联。
MyBatis-Plus是一个MyBatis的增强工具。
使用MyBatis注解实现一个简易的数据库查询接口
大致思路
要本地启一个sql服务,然后利用@Mapper来注解相应的映射接口,在接口中实现增删改查
然后利用@Autowired注解相应的控制器,在控制器中指定路由,并完成相应的路由处理
具体过程如下
- 首先需要在本地启一个sql的服务
此处我用phpstudy中的数据库服务,然后Navicat直接连接本地3306端口
- 导入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.20</version>
</dependency>
- properties配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false
spring.datasource.username=root
spring.datasource.password=icfhadmin
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
- 实现接口
在mapper目录下实现UserMapper
由于是接口,故只要给出声明就可以
真正起作用的在于注解
package com.example.icfh_springboot1.mapper;
import com.example.icfh_springboot1.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface UserMapper {
// 首先绑定sql语句和相应的方法
// 允许使用函数调用的方式来
// query all users
@Select("select * from user")
List<User> selectAll();
@Select("select * from user where id=#{id}")
User selectByID(int id);
@Insert("insert into user values (#{id},#{username},#{password},#{birthday})")
int insert(User user);
@Delete("delete from user where id=#{id}")
int delete(int id);
@Update("update user set username=#{username},password=#{password},birthday=#{birthday} where id=#{id}")
int update(User user);
}
- 在启动入口加上注解 MapperScan注解
路径为mapper目录
- 最后声明控制器,调用相应的接口
package com.example.icfh_springboot1.controller;
import com.example.icfh_springboot1.entity.User;
import com.example.icfh_springboot1.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
public class UserDBController {
/* 声明依赖注入 */
@Autowired
private UserMapper userMapper;
@GetMapping("/user")
public List query(){
List<User> userList = userMapper.selectAll();
System.out.println(userList);
return userList;
}
/* 路由映射 */
@GetMapping("/user/{id}")
public User queryByID(@RequestParam("id") int id) {
/* 路由 */
return userMapper.selectByID(id);
}
@PostMapping("/user")
public String insert(User user){
/* 插入数据的校验逻辑 */
/*
...
* */
int i = userMapper.insert(user);
if(i>0){
return "Insert Success!";
}else{
return "Insert Fail";
}
}
// 满足RESTFul风格
@DeleteMapping("/user/{id}")
public int delete(@RequestParam("id") int id){
return userMapper.delete(id);
}
@PutMapping("/user")
public int update(@RequestParam("user") User user){
return userMapper.update(user);
}
}
- web页面进行访问获得数据库的json格式数据
这是测试获取用户的结果
POST访问,提交用户记录增添新用户
添加了新用户icfh
使用MyBatis-Plus
MyBatis-Plus
一个很直观的印象就是进一步写好了数据库的增删改查工作,直接写路由调用就行了
直接给出项目代码吧
Mapper
接口直接继承BaseMapper<User>
@Mapper
public interface UserMapper extends BaseMapper<User> {
// 直接继承类完成上述的定义操作
// 可以ctrl左键进入到BaseMapper
}
控制器实现如下
@RestController
public class UserDBController {
@Autowired
private UserMapper userMapper;
@GetMapping("/user")
public List query(){
// 根据null条件进行查询
List<User> list = userMapper.selectList(null);
System.out.println(list);
return list;
}
@PostMapping("/user")
public String save(User user){
int i = userMapper.insert(user);
if(i > 0){
return "insert success!";
}else{
return "insert fail";
}
}
}
测试如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下