MybatisPlus,无XML分分钟实现CRUD

    技术2023-10-26  78

    MybatisPlus,无XML分分钟实现CRUD

    不讲太多理论知识,官网都有,直接上手。 1.测试表

    DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(20) UNSIGNED NOT NULL, `name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用户名', `password` varchar(18) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '密码', `age` int(4) DEFAULT NULL COMMENT '年龄', `create_time` datetime(0) DEFAULT NULL COMMENT '创建时间', `update_time` datetime(0) DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

    引入依赖

    <!--mybatis-plus核心包--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.5</version> </dependency> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>

    配置文件,这里我用的是boot项目

    spring: datasource: username: cjx password: cjx19950616 url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: mapper-locations: classpath:/mapper/*.xml #configuration: #map-underscore-to-camel-case: true

    其实简单的crud甚至不需要mybatis-plus的配置,我这里没删除,本文也并没有用到配置文件。 实体类

    public class User{ private Long id; private String name; private String password; private int age; private Date createTime; private Date updateTime; ... getter && setter ... toString() }

    分页插件

    @Configuration public class MyBtaisPlusConfig { /** * 分页插件 * @return */ @Bean public PaginationInterceptor paginationInterceptor() { System.out.println("加载分页插件"); return new PaginationInterceptor(); } }

    编写一个我们的接口

    @Component public interface UserDao extends BaseMapper<User> { Integer deleteById(Long id); }

    接下来就可以愉快的测试了,在我们的测试类里先注入dao

    @Autowired private UserDao userMapper;

    新增测试

    /** * 新增 */ @Test void save(){ User u = new User(); u.setAge(100); u.setName("测试数据3"); u.setPassword("cjx1111"); u.setAge(25); int row = userMapper.insert(u); System.out.println(row); }

    是不是很简单?只需要这样就可以完成新增了,既然有单个插入,那少不了也有批量插入

    批量新增测试

    /** * 批量插入 */ @Test void save(){ List<User> us = new LinkedList<User>(); for (int i = 0;i < 50;i++){ User u = new User(); u.setName("测试数据"+i); u.setAge((int)(Math.random()*90+10)); u.setPassword("mima"+i); us.add(u); } userService.saveBatch(us); }

    其中用到了userService,我这里贴一下代码,需要我们接口继承Iservice,实现类继承ServiceImple<M,T>,这样就可以直接调用mybatis-plus为我们提供的现成方法了。

    public interface IUserService extends IService<User> { }

    实现类

    @Service public class UserServiceImpl extends ServiceImpl<UserDao, User>implements IUserService { }

    修改

    /** * 修改 */ @Test void updateById(){ User u = new User(); //修改name u.setId(1L); u.setName("修改下数据--"); u.setPassword("123"); u.setAge(99); int row = userMapper.updateById(u); System.out.println(row); } /** * 通过id查询 */ @Test void selectById(){ //1.通过id来查询 User u = userMapper.selectById(1l); System.out.println(u); }

    mybatis-plus有个特别好用的就是它的条件构造器,可以帮助我们构造常用的sql,具体用法我会贴在文章最后面。

    /** * 通过条件构造器查询 */ @Test void selectByWrapper(){ //3.通过条件构造器wrapper QueryWrapper qw = new QueryWrapper(); qw.like("name","测试"); qw.lt("age",50);//小于 qw.gt("age",15);//大于 List<User> us = userMapper.selectList(qw); us.stream().forEach(System.out::println); }

    既然有查询,自然少不了我们最关心的分页

    /** * 通过条件构造器和page分页查询 */ @Test void selectByWrapperAndPage(){ //4.通过条件构造器wrapper和Page分页查询 QueryWrapper qw = new QueryWrapper(); qw.like("name","测试"); qw.lt("age",50);//小于 qw.gt("age",15);//大于 qw.orderByDesc("age"); IPage<User> result = userMapper.selectPage(new Page<>(2,10),qw); /** * 查询总记录数 */ @Test void selectCount(){ //5.通过条件查询总条数 QueryWrapper qw = new QueryWrapper(); qw.like("name","测试"); qw.lt("age",50);//小于 qw.gt("age",15);//大于 qw.orderByDesc("age"); int count = userMapper.selectCount(qw); System.out.println(count); }

    删除

    /** * 通过id删除 */ @Test void delete(){ int row = userMapper.deleteById(27l); System.out.println(row); } /** * 通过id批量删除 */ @Test void deleteBatch(){ int row = userMapper.deleteBatchIds(Arrays.asList(67l,44l,37l,220l)); System.out.println(row); } /** * 通过条件删除 */ @Test void deleteByWrapper(){ QueryWrapper<User> qw = new QueryWrapper<>(); qw.gt("age",70); //先来看看有多少数据 int row = userMapper.selectCount(qw); System.out.println(row); //删除 int deleteRow = userMapper.delete(qw); System.out.println(deleteRow); }

    今天就到这,后续会给大家分享下mybatis-plus提供的sql性能执行分析插件、乐观锁插件以及字段的自动填充。

    Processed: 0.010, SQL: 9