mybatis-plus Mapper CRUD

mybatis-plus Mapper CRUD,第1张

目录

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("[email protected]");
        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 {
    /**
     * 数据库ID自增
     * 

该类型请确保数据库设置了 ID自增 否则无效

*/ AUTO(0), /** * 该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT) */ NONE(1), /** * 用户输入ID *

该类型可以通过自己注册自动填充插件进行填充

*/ INPUT(2), /* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */ /** * 分配ID (主键类型为number或string), * 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花算法) * * @since 3.3.0 */ ASSIGN_ID(3), /** * 分配UUID (主键类型为 string) * 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace("-","")) */ 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 {
    /**
     * 分页插件配置
     *从MyBatis-Plus 3.4.0开始,不再使用旧版本的PaginationInterceptor ,而是使用MybatisPlusInterceptor。
     *旧版本分页插件
     * @Bean
     * public PaginationInterceptor paginationInterceptor() {
     * 	return new PaginationInterceptor();
     * }
     */
    @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());

    }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/919783.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存