ORM介绍
- ORM(Object Relational Mapping,对象关系映射)是为了解决面向对象与关系数据库存在的互不匹配现象的一种技术。
- ORM通过使用描述对象和数据库之间映射的元数据将程序中的对象自动持久化到关系数据库中。
- ORM框架的本质是简化编程中操作数据库的编码。
MyBatis-Plus 介绍
- MyBatis是一款优秀的数据持久层ORM框架,被广泛地应用于应用系统。
- MyBatis能够非常灵活地实现动态SQL,可以使用XML或注解来配置和映射原生信息,能够轻松地将Java的POO (Plain Ordinary Java Object, 普通的Java对象)与数据库中的表和字段进行映射关联。
- MyBatis-Plus是一个 MyBatis 的增强工具,在MyBatis 的基础上做了增强,简化了开发。
MyBatis注解
使用MyBatis-Plus
- 添加依赖
<!-- MyBatisPlus依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> <!-- mysql驱动依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!-- 数据连接池 druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.20</version> </dependency>
- 全局配置
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=root mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl server.port=8088
- 在启动类下添加注解
//扫描器,告诉主类扫描哪个包
@MapperScan("com.example.mpdemo.mapper")
- 在主包下建一个
mapper
包,用来存放数据库相关的操作 - 在主包下建一个控制器包
controller
- 在主包下建一个
entity
包,用来放实体类 - 演示功能
- 在entity包下建一个
User
类public class User { private int id; private String username; private int password; public void setId(int id) { this.id = id; } public void setUsername(String username) { this.username = username; } public void setPassword(int password) { this.password = password; } public int getId() { return id; } public String getUsername() { return username; } public int getPassword() { return password; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password=" + password + '}'; } }
- 在controller包下建一个
UserController
类@RestController public class UserController { //使用UserMapper //注解,自动注入userMapper接口 @Autowired private UserMapper userMapper; //查询所有用户 //查询的用户是一个或多个,所以返回一个List @GetMapping("/user") public List query() { List<User> list = userMapper.find(); System.out.println(list); return list; } //添加用户 @PostMapping("/user") public String save(User user) { userMapper.insert(user); int i = userMapper.insert(user); System.out.println(user); if (i > 0) { return "插入成功"; } else { return "插入失败"; } } }
- 在mapper包下建一个
UserMapper
接口(声明mapper接口,一般命名:查询的表名+Mapper)
Spring Boot项目它会自动实例化这个UserMapper,它会帮我们去管理UserMapper的实例,其内部是通过动态代理的方式帮我们生成一个实现类并实现这个接口,再帮我们实现这个数据库的查询方法,所以只要写上@Mapper注解即可,其余功能Mybatis和Spring Boot来完成。使用就在控制器下注入UserMapper即可。//加注解,表示这是一个Mapper组件 @Mapper // 类名要和表名保持一致 public interface UserMapper { //查询所有用户 @Select("select * from user") public List<User> find(); //添加用户 @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); }
- 在entity包下建一个
使用MyBatisPlus
使用MybatisPlus的话就不用自己写查询语句
//继承了BaseMapper后这些方法都不用手写
//他会根据填入的类找到对应的表来进行增删改查,这里是User类
// 类名要和表名保持一致
public interface UserMapper extends BaseMapper<User> {
}
查询列表的方法由List<User> list = userMapper.find();
变成
List<User> list = userMapper.selectList(null);
selectList()里需要填写查询条件,没有则填写null。
别的方法基本上命名一样无需修改。
一些注解
@TableName
- 如果表名和类名不一样,可以加一个注解。
例如:表名是t_user@TableName("t_user") public class User { ... }
@TableId
- 通过TableId告诉其是一个主键,类型是自增的,这样添加数据的时候不用传id,它会自动帮你填入自增的id。
@TableId(type= IdType.AUTO)
@TableField
- 当表里的字段名和类里的属性名成不一致时,可以加一个注解。
例如字段名是nickname,属性名是name@TableField("nickname") private String name;
具体使用细节可以看官方文档:MyBatis-Plus注解
- ps: MyBatisPlus中,类如果用小驼峰命名,数据库对应的字段要用下划线的形式,例如:
studentId
——>student_id