一. ORM基本介绍
1. ORM(Object Relational Mapping,对象关系映射)是为了解决面向对象与关系数据库存在的互不匹配现象的一种技术。ORM通过使用描述对象和数据库之间映射的元数据讲程序中的对象自动持久化到关系数据库中,即ORM能帮助我们完成对象到数据库表的映射,既完成存储,也完成读取。
2.Mybatis-Plus是一款优秀的数据持久层ORM框架,目前被广泛地使用于应用系统。Mybatis能够非常灵活地实现动态SQL,可以使用XML或注解来配置喝映射原生信息,能够轻松地讲Java的POJO(Plain Ordinary Java Object,普通的Java对象)与数据库中的表和字段进行映射关联。Mybatis—Plus是一个Mybatis增强工具,在Mybaits基础上做了增强,简化了开发。
二. MyBatis Plus简单上手
1.使用前配置
(1)添加依赖。使用前需要在maven中添加依赖,在pom.xml中添加如下依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.15</version>
</dependency>
(2)在application.properties中配置好数据库设置:
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
(3)在启动类中添加@MapperScan注解,使得程序可以直接识别到所有的Mapper,不用依次添加Mapper注解。
@SpringBootApplication
@MapperScan("com.adored.my_test_springboot_project.mapper")
public class MyTestSpringbootProjectApplication {
public static void main(String[] args) {
SpringApplication.run(MyTestSpringbootProjectApplication.class, args);
}
}
2.使用Mybatis编写数据库CRUD功能
1.数据库建表。对于想实现CRUD功能的数据库进行建表(这里以User表为例),建立好字段名id,username,password(id为主键)。
2.建立实体类。在项目的entity包中写好对应的实体类 ,方便后续映射。
@Data
public class User {
private int id;
private String username;
private String password;
}
3.编写mapper层。在项目的mapper包中编写用来映射实体类和数据库表的mapper接口,这里只需写出mapper接口就可以,后续的对应映射以及相关操作mybatis会帮助我们完成。
tip:我们在mapper层中写的interface的mapper类是不能被实例化的,但在程序运行过程中mybatis会利用动态代理机制自动帮我们完成接口的实例化,如果没有使用mybatis框架,仍需自己手动编写实现类来进行实例化。
@Mapper
public interface UserMapper {
//查询所有用户
@Select("select * from user")
public List<User> findAll();
@Insert("insert into user values (#{id},#{username},#{password})")
public int insert(User user);
@Delete("delete from user where id=#{id}")
public int delete(int id);
}
如上述代码,在UserMapper接口中编写了对于数据库表的查询,增添,删除等操作。
4.编写service层。在项目的service包中,编写对应功能的具体实现方法。
@GetMapping("user")
public List query(){
List<User> list = userMapper.findAll();
System.out.println(list);
return list;
}
@PostMapping("user/add")
public String save(User user){
int i= userMapper.insert(user);
if(i>0){
return "success";
}
else {
return "fail";
}
}
@PostMapping("user/delete")
public String delete(int id){
int i= userMapper.delete(id);
if(i>0){
return "success";
}
else {
return "fail";
}
}
}
上述代码只是为了方便,将具体实现的方法都一起写在controller层中了,实际开发时需分开编写。
5.编写controller层。在项目中的controller包中编写项目所需的前后端交互的post,get等请求。
@RestController
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("user")
public List query(){
List<User> list = userMapper.findAll();
System.out.println(list);
return list;
}
@PostMapping("user/add")
public String save(User user){
int i= userMapper.insert(user);
if(i>0){
return "success";
}
else {
return "fail";
}
}
@PostMapping("user/delete")
public String delete(int id){
int i= userMapper.delete(id);
if(i>0){
return "success";
}
else {
return "fail";
}
}
}
tip:这里的@Autowired注解是用来自动对UserMapper接口生成实现类的