Mybatis是一个很火的轻量级的持久层框架。通常需要写xml文件,编写SQL就可方便的去操作数据库。对于操作数据库的工具来说很是灵活,这里不过多赘述了。
Mybatis-Plus(简称MP)是Mybatis的增强工具,对Mybatis只做增强不做修改。有更高的效率。
内部有封装常用的CURD操作,可达到调用方法操作数据库,而无需写SQL语句。
下面就是实战去体验Plus的对于单表CRUD的高效。
创建一个名为user的数据库:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`age` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`own_email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'JoJo', '23', '[email protected]');
INSERT INTO `user` VALUES (2, 'kit', '22', '[email protected]');
INSERT INTO `user` VALUES (23, 'bii', '22', '[email protected]');
SET FOREIGN_KEY_CHECKS = 1;
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.1.0version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<scope>runtimescope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-jdbcartifactId>
dependency>
# 配置数据源
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
name: root
password: 12345
url: jdbc:mysql:///test
@Data
@TableName("user") // 表名的映射
public class UserPO {
// 指定id,id的类型
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
// 指定字段名的映射
@TableField("name")
private String name;
// 指定字段名的映射
@TableField("age")
private String age;
// 指定字段名的映射
@TableField("own_email")
private String Email;
}
实体类使用了lombok简化书写
/**
* @author Hacah
* @date 2021/5/19 10:00
*/
public interface UserMapper extends BaseMapper<UserPO> {
}
继承Mybatis-Plus的BaseMapper
5-编写测试代码
@Autowired
private UserMapper userMapper;
@Test
void contextLoads() {
List<UserPO> userPOS = userMapper.selectList(null);
System.out.println(userPOS);
}
结果:
[UserPO(id=1, name=JoJo, age=23, [email protected]), UserPO(id=2, name=kit, age=22, [email protected])]
通过id查询一条数据。
// 1.查询一个
UserPO userPO = userMapper.selectById(1);
System.out.println(userPO);
结果:
UserPO(id=1, name=JoJo, age=23, Email=1215135@jojo.com)
通过条件查询一条数据,若查询条数多于1条会报错。
// 2.使用条件查询一个
QueryWrapper<UserPO> userPOQueryWrapper = new QueryWrapper<>();
userPOQueryWrapper.eq("age", "22"); // SQL上增加age = 22条件
System.out.println(userMapper.selectOne(userPOQueryWrapper));
// SELECT id,name,age,own_email AS Email FROM user WHERE age = 22;
QueryWrapper类能够构造查询的条件
QueryWrapper
这是拼接条件的类,传入该类可以构造sql的操作的条件
比如or、and、= 、between… in…等等
通过Map查询多条数据。
// 3.使用map查询多条数据
HashMap stringObjectHashMap = new HashMap<>();
stringObjectHashMap.put("age", 22);
System.out.println(userMapper.selectByMap(stringObjectHashMap));
结果:
[UserPO(id=2, name=kit, age=22, Email=63362@kit.com),
UserPO(id=3, name=bii, age=22, Email=354643@bii.com)]
通过id进行批量查询
// 4.使用个id查询更多数据
ArrayList<Integer> userPOS = new ArrayList<>();
userPOS.add(1);
userPOS.add(2);
System.out.println(userMapper.selectBatchIds(userPOS));
结果:
[UserPO(id=1, name=JoJo, age=23, Email=1215135@jojo.com),
UserPO(id=2, name=kit, age=22, Email=63362@kit.com)]
传入一个实体类新增一条数据
// 5. 新增数据
UserPO userPO = new UserPO();
userPO.setAge("12");
userPO.setName("fibs");
userPO.setEmail("[email protected]");
userMapper.insert(userPO);
结果:
1.updateById
通过id更新,传入一个实体类
// 6.修改数据
UserPO userPO = new UserPO();
userPO.setId(1);
userPO.setAge("31");
userMapper.updateById(userPO);
结果:
2.update
传入一个 实体类 和 条件类,更新数据
// 6.通过条件修改数据
UserPO userPO = new UserPO();
userPO.setAge("31");
QueryWrapper<UserPO> userPOQueryWrapper = new QueryWrapper<>();
userPOQueryWrapper.isNotNull("age"); // 构造条件where age != null
userMapper.update(userPO,userPOQueryWrapper);
结果:
age不为null的全部修改成31
删除和select类似,有一下方法:
deleteById 通过id删除
deleteByMap 使用map删除
delete 通过条件删除
deleteBatchIds 通过id批量删除
这里只演示delete,使用条件删除数据
删除id小于等于1的数据
userMapper.delete(new QueryWrapper<UserPO>().le("id",1));
结果:
本博客是一个入门的描述。先大概了解MybatisPlus的增强之处,并通过实践去体会,去认证它的运行结果。让我们对此生映像,以便后续的使用,解决我们后续遇到的问题就是我们一直学习的目的。
通过条件删除
这里只演示delete,使用条件删除数据
删除id小于等于1的数据
userMapper.delete(new QueryWrapper<UserPO>().le("id",1));
结果:
[外链图片转存中…(img-TITefKFc-1621405974289)]
本博客是一个入门的描述。先大概了解MybatisPlus的增强之处,并通过实践去体会,去认证它的运行结果。让我们对此生映像,以便后续的使用,解决我们后续遇到的问题就是我们一直学习的目的。