栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mybatis-plus Mapper CRUD

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mybatis-plus Mapper CRUD

目录

1.插入

主键生成策略

1.雪花策略

2.主键自增策略:使用数据库自增策略,先设置数据库id字段自增不然报错

3.其他策略

2.删除

1.根据id

2.根据列名

3.根据实体条件

4.根据id批量删除

3.更新

1.根据id

2.条件更新

4.查询

1.通过id

2.通过id列表查询

3.通过列条件

4.根据多条件查询一个

5.查询符合条件的数量

6.根据实体条件

7.根据条件查询,返回一个集合列表

8.条件分页查询(mybatis-plus自带分页插件)


1.插入
    @Autowired(required = false)
    User_plusDAO user_plusDAO;

    @Test
    public void insert(){
        User_plus user_plus= new User_plus();
        user_plus.setName("刘备");
        user_plus.setAge(18);
        user_plus.setEmail("jckslafkas@163.com");
        int i=user_plusDAO.insert(user_plus);
        //
        System.out.println(i+"id:"+user_plus.getId());
    }

主键生成策略

因为在最开始建表的sql语句中就指明了,id是数据库的主键,主键不能唯一,

常见的数据库中主键自动设置方法有(uuid、自增id、雪花算法、redis生成、zookeeper生成)

1.雪花策略

这里生成的id默认采用的是雪花算法:

    snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。具体实现的代码可以参看https://github.com/twitter/snowflake。雪花算法支持的TPS可以达到419万左右(2^22*1000),几乎保证全球唯一。

//生成getter和setter方法
@Data
//无参构造方法
@NoArgsConstructor
//全参构造方法
@AllArgsConstructor
//重写打印方法
@ToString
//将实体类与数据库表形成映射,如果类名和表名一致则可以不加
@TableName("user")
public class User_plus {
    //枚举注解,雪花算法使用ID_WORKER策略,全局唯一ID,数据库设置自增也没用
    @TableId(type = IdType.ASSIGN_ID,value = "id")
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

 注解可以自定义配置

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})  //枚举注解
public @interface TableId {
    //可以设置以下两个参数
    String value() default "";
    IdType type() default IdType.NONE; //ID策略
}

2.主键自增策略:使用数据库自增策略,先设置数据库id字段自增不然报错
//生成getter和setter方法
@Data
//无参构造方法
@NoArgsConstructor
//全参构造方法
@AllArgsConstructor
//重写打印方法
@ToString
//将实体类与数据库表形成映射,如果类名和表名一致则可以不加
@TableName("user")
public class User_plus {
    //要是自增策略,在id上加入下列代码
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

3.其他策略
public enum IdType {
    
    AUTO(0),
    
    NONE(1),
    
    INPUT(2),

    
    
    ASSIGN_ID(3),
    
    ASSIGN_UUID(4);

    private final int key;

    IdType(int key) {
        this.key = key;
    }
}

2.删除

1.根据id
    @Autowired(required = false)
    User_plusDAO user_plusDAO;

    @Test
    public void deleteById(){
        int i = user_plusDAO.deleteById(6);
        System.out.println(i);
    }

2.根据列名
    @Autowired(required = false)
    User_plusDAO user_plusDAO;

    @Test
    public void deleteByMap(){
        //先创建Map
        Map map=new HashMap<>();
        map.put("name","刘备");
        map.put("age",18);
        int i = user_plusDAO.deleteByMap(map);
        System.out.println(i);
    }

3.根据实体条件
    @Autowired(required = false)
    User_plusDAO user_plusDAO;

    @Test
    public void deleteByEntity(){
        QueryWrapper wrapper=new QueryWrapper<>();
        wrapper.eq("name","刘备");
        int i = user_plusDAO.delete(wrapper);
        System.out.println(i);
    }

4.根据id批量删除
    @Autowired(required = false)
    User_plusDAO user_plusDAO;

    @Test
    public void deletByBatchIds(){
        Collection list=new ArrayList<>();
        list.add(9);
        list.add(10);
        int i=user_plusDAO.deleteBatchIds(list);
        System.out.println(i);
    }

3.更新 1.根据id
    @Autowired(required = false)
    User_plusDAO user_plusDAO;

    @Test
    public void updateById(){
        User_plus user=new User_plus();
        user.setId(1L);
        user.setAge(20);
        int i = user_plusDAO.updateById(user);
        System.out.println(i);
    }

2.条件更新
    @Autowired(required = false)
    User_plusDAO user_plusDAO;

    @Test
    public void update(){
        User_plus user=new User_plus();
        UpdateWrapper updateWrapper=new UpdateWrapper<>();
        //设置更新字段
        updateWrapper.set("name","张飞");
        //设置更新条件
        updateWrapper.eq("id",1);
        int i = user_plusDAO.update(user,updateWrapper);
        System.out.println(i);
    }

4.查询

1.通过id
    @Autowired(required = false)
    User_plusDAO user_plusDAO;

    @Test
    public void selectById(){
        User_plus user = user_plusDAO.selectById(1);
        System.out.println(user);
    }

2.通过id列表查询
    @Autowired(required = false)
    User_plusDAO user_plusDAO;

    @Test
    public void selectByBatchId(){

        List userlist = user_plusDAO.selectBatchIds(Arrays.asList(1,2,3));
        userlist.forEach(System.out::println);
    }

3.通过列条件
    @Autowired(required = false)
    User_plusDAO user_plusDAO;

    @Test
    public void selectByMap(){
        //先创建Map
        Map map=new HashMap<>();
        map.put("age","20");
        List userlist = user_plusDAO.selectByMap(map);
        userlist.forEach(System.out::println);
    }

4.根据多条件查询一个
    @Autowired(required = false)
    User_plusDAO user_plusDAO;

    @Test
    public void selectOne(){
        QueryWrapper wrapper=new QueryWrapper<>();
        wrapper.eq("name","张飞");
        wrapper.eq("age",20);
        User_plus user = user_plusDAO.selectOne(wrapper);
        System.out.println(user);
    }

5.查询符合条件的数量
    @Autowired(required = false)
    User_plusDAO user_plusDAO;

    @Test
    public void selectCount(){
        QueryWrapper wrapper=new QueryWrapper<>();
        wrapper.eq("age",20);
        Long i = user_plusDAO.selectCount(wrapper);
        System.out.println(i);
    }

6.根据实体条件
    @Autowired(required = false)
    User_plusDAO user_plusDAO;

    @Test
    public void selectList(){
        QueryWrapper wrapper=new QueryWrapper<>();
        wrapper.eq("age",20);
        List userlist = user_plusDAO.selectList(wrapper);
        userlist.forEach(System.out::println);
    }

7.根据条件查询,返回一个集合列表
    @Autowired(required = false)
    User_plusDAO user_plusDAO;

    @Test
    public void selectMaps(){
        QueryWrapper wrapper=new QueryWrapper<>();
        wrapper.eq("age",20);
        List> userlist = user_plusDAO.selectMaps(wrapper);
        userlist.forEach(System.out::println);
    }

8.条件分页查询(mybatis-plus自带分页插件)

配置分页类:

在java文件夹下创建config文件夹,在里面创建mybatisplusconfig类

@Configuration
@EnableTransactionManagement
public class MybatisPlusConfig {
    
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 向MyBatis-Plus的过滤器链中添加分页拦截器,需要设置数据库类型(主要用于分页方言)
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

}

在application类添加config扫描

@SpringBootApplication
@MapperScan("mapper")//引导类扫描定义的接口
@ComponentScan("config")//添加config扫描
public class MybatisplusSpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisplusSpringbootApplication.class, args);
    }
    
}

测试:

    @Autowired(required = false)
    User_plusDAO user_plusDAO;

    @Test
    public void selectPage(){
        //分页设置
        IPage ipage=new Page<>();
        //当前页
        ipage.setCurrent(1);
        //每页数量
        ipage.setSize(2);

        //条件
        QueryWrapper wrapper=new QueryWrapper<>();
        wrapper.eq("age",20);
        IPage page = user_plusDAO.selectPage(ipage,wrapper);
        System.out.println("当前页:"+page.getCurrent());
        System.out.println("总页数:"+page.getPages());
        System.out.println("总条数:"+page.getTotal());
        System.out.println("查询到的集合:"+page.getRecords());

    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879696.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号