一、MyBatis回顾
(1)什么是MyBatis:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。MyBatis-Plus其实就是对MyBatis的加强。
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (`id` bigint(20) NOT NULL COMMENT '主键ID',`name` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '姓名',`age` int(11) NULL DEFAULT NULL COMMENT '年龄',`email` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '邮箱',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '张三', 18, 'zhangsan@qq.com');
INSERT INTO `user` VALUES (2, '李四', 18, 'lisi@qq.com');
INSERT INTO `user` VALUES (3, '王五', 18, 'wangwu@qq.com');
INSERT INTO `user` VALUES (4, '赵六', 18, 'zhaoliu@qq.com');
INSERT INTO `user` VALUES (5, '二狗', 18, 'ergou@qq.com');
INSERT INTO `user` VALUES (6, '飞云', 18, 'feiyun@qq.com');SET FOREIGN_KEY_CHECKS = 1;
二、什么是MyBatis-Plus
(1)MyBatis-Plus是MyBatis的增强,在MyBatis的基础上,只做增强而不做改变,是为了简化开发、提高效率而生。
(2)MyBatis-Plus所需要的依赖:
它是第三方提供的的,需要我们手工来加:
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2/version></dependency>
三、创建SpringBoot项目:
1、初始化SpringBoot项目:
2、手工加入mybatisPlus依赖:
3、 在application.yml文件中配置数据源(数据库连接信息):
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driver #其实不需要写,默认就是#其实你连接本地数据库,并且端口号为3306的话,只需要这样写 jdbc:mysql:///mpdb,这是localhost的简写url: jdbc:mysql://localhost:3306/mpdb?serverTimezone=UTCusername: rootpassword: 3333#获取打印日志,填写主包,我项目里面所有的类都写在这个主包下
logging:level:com.lifang.bootMybatispuls: debug
4、创建数据库表对应的实体类User:
创建实体类我们要习惯性的去序列化一下
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {private Integer id;private String name;private Integer age;private String email;
}
5、创建持久层DAO接口:
UserMapper 继承了BaseMapper<User>接口就自然而然就具备了增删改查的能力,对谁的增删改查呢?就是对这个泛型里面限定的这个实体类对应的表的增删改查的能力。
这个UserMapper 接口已经具备了对User这个实体类对应的表的增删改查的能力
public interface UserMapper extends BaseMapper<User> {
}
@MapperScan:扫描持久层DAO接口所在的包名,创建DAO接口对应的代理对象
@MapperScan("com.lifang.bootMybatispuls.mapper")
@SpringBootApplication
public class Boot307MybatisPulsApplication {public static void main(String[] args) {SpringApplication.run(Boot307MybatisPulsApplication.class, args);}}
四、测试通用的Mapper接口:
现在这个mapper接口已经具备了对User这个实体类对应的表的增删改查的能力,现在我们来测试一下:
4.1、selectList:
@SpringBootTest
public class UserMapperTest {@Resourceprivate UserMapper userMapper;@Testpublic void testSelectAll(){List<User> users = userMapper.selectList(null);users.forEach(user-> System.out.println(user));}
}
我们没有写查询语句,这个sql语句就是mybatisplus通过扫描这个实体,它产生的查询语句:
4.2、insert:
@Testpublic void testInsert(){User user = new User(null,"花花",3,"huahau@qq.com");int num = userMapper.insert(user);System.out.println(num);}
这个i d我给的是个null,但却插入了一个很长的值,这个实际上是因为它默认有一个雪花算法的策略,帮我们产生了一个id:-2090029054
如果说你想继续沿用id自增的话,你得把表结构改成自增的字段,然后去设修改一下策略:
4.3、delete:
@Testpublic void testDelete(){int num = userMapper.deleteById(-2090029054);System.out.println(num);}
@Testpublic void testDelete2(){User user = new User(-2090029054,"花花1",5,"huahau@qq.com");int num = userMapper.deleteById(user);//其实还是根据id删除,即使你其他信息写错了System.out.println(num);}
4.4、update:
@Testpublic void testDelete(){int num = userMapper.updateById(new User(666,"花花11",5,"huahau@qq.com"));System.out.println(num);}