前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MybatisPlus不好用?帅小伙一气之下写了个MybatisPlusPro

MybatisPlus不好用?帅小伙一气之下写了个MybatisPlusPro

作者头像
java思维导图
发布于 2023-12-13 05:29:09
发布于 2023-12-13 05:29:09
35500
代码可运行
举报
文章被收录于专栏:java思维导图java思维导图
运行总次数:0
代码可运行

来源:juejin.cn/post/7244408781575241765


即使在 CRUD,只要你肯思变,抽离出一套轮子,也是轻而易举的事。下面我们就一起来让 CRUD 自动化。

我们平时在用MybatisPlus作为开发的时候,虽然好用,但是大多数都在对 dao 层面的增删改查,所以打算自己抽取一套在 controller 层的功能出来。只要继承一个BaseController类,就可以拥有增删改查,查询列表,分页查询,排序,带参数查询,统计数量。话不多说,直接开始吧!

第一步,引入 MybatisPlus 的 jar 包。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.2</version>
</dependency>

第二步,编写util类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.util.ObjectUtils;
import org.springframework.util.ReflectionUtils;

import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Apprentice系统Util
 * @since JDK 1.8.0
 */
public class ApprenticeUtil {

    private static Pattern humpPattern = Pattern.compile("[A-Z]");
    private static Pattern linePattern = Pattern.compile("_(\\w)");

    /**
     * 驼峰转下划线
     *
     * @Param: [str]
     * @return: java.lang.String
     */
    public static String humpToLine(String str) {
        Matcher matcher = humpPattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

    /**
     * 下划线转驼峰
     *
     * @Param: [str]
     * @return: java.lang.String
     */
    public static String lineToHump(String str) {
        str = str.toLowerCase();
        Matcher matcher = linePattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

    /**
     * 获取QueryWrapper
     *
     * @Param: [entity]
     * @return: com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<E>
     */
    public static <E> QueryWrapper<E> getQueryWrapper(E entity) {
        Field[] fields = entity.getClass().getDeclaredFields();
        QueryWrapper<E> eQueryWrapper = new QueryWrapper<>();
        for (int i = 0; i < fields.length; i++) {
            Field field = fields[i];
            //忽略final字段
            if (Modifier.isFinal(field.getModifiers())) {
                continue;
            }
            field.setAccessible(true);
            try {
                Object obj = field.get(entity);
                if (!ObjectUtils.isEmpty(obj)) {
                    String name = ApprenticeUtil.humpToLine(field.getName());
                    eQueryWrapper.eq(name, obj);
                }
            } catch (IllegalAccessException e) {
                return null;
            }
        }
        return eQueryWrapper;

    }

    /** 反射获取字段值
     * @Param: [entity, value] value 值为 "id" "name" 等
     * @return: java.lang.Object
     */
    public static <E> Object getValueForClass(E entity,String value) {

        Field id = null;
        PropertyDescriptor pd = null;
        try {
            id = entity.getClass().getDeclaredField(value);
            pd = new PropertyDescriptor(id.getName(), entity.getClass());
        } catch (NoSuchFieldException | IntrospectionException e) {
            e.printStackTrace();
        }
        //获取get方法
        Method getMethod = Objects.requireNonNull(pd).getReadMethod();
        return ReflectionUtils.invokeMethod(getMethod, entity);
    }
}

反射获取字段值,这段Java代码演示了如何使用反射获得指定对象的属性值。方法的泛型表示,可以接受任意类型的参数entity。在此代码中,首先通过反射获取参数entity对象所对应类的属性,即value

接着通过 Java 内置的 Introspector 机制获取id属性的 JavaBean 规范访问器PropertyDescriptor,并从该对象提取出对应的 getter 方法。最后,利用 Spring 框架提供的工具类 ReflectionUtils 得到方法后来调用该 getter 方法,获取属性值并返回。需要注意,在反射机制下如果要访问私有成员变量或方法时,应先调用其 setAccessible(true) 方法以获得权限。

第三步,我们编写 BaseController 类。

下面是我们的 BaseController 类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wangfugui.apprentice.common.util.ApprenticeUtil;
import com.wangfugui.apprentice.common.util.ResponseUtils;
import com.wangfugui.apprentice.dao.dto.PageParamDto;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/** 核心公共controller类
 */
public class BaseController<S extends IService<E>, E> {

    @Autowired
    protected S baseService;

    @ApiOperation("增")
    @PostMapping("/insert")
    public ResponseUtils insert(@RequestBody E entity) {
        baseService.save(entity);
        return ResponseUtils.success("添加成功");
    }

    @ApiOperation("删")
    @PostMapping("/deleteById")
    public ResponseUtils delete(@RequestBody List<Integer> ids) {

        baseService.removeByIds(ids);
        return ResponseUtils.success("添加成功");
    }

    @ApiOperation("改")
    @PostMapping("/updateById")
    public ResponseUtils updateById(@RequestBody E entity) {
        baseService.updateById(entity);
        return ResponseUtils.success("添加成功");
    }

    @ApiOperation("查")
    @GetMapping("/getById")
    public ResponseUtils getById(@RequestParam Integer id) {

        return ResponseUtils.success(baseService.getById(id));
    }

    @ApiOperation("存")
    @PostMapping("/save")
    public ResponseUtils save(@RequestBody E entity) {
        baseService.saveOrUpdate(entity);
        return ResponseUtils.success("添加成功");
    }

    @ApiOperation("list查")
    @PostMapping("/list")
    public ResponseUtils list(@RequestBody E entity) {
        QueryWrapper<E> queryWrapper = ApprenticeUtil.getQueryWrapper(entity);
        List<E> list = baseService.list(queryWrapper);
        return ResponseUtils.success(list);
    }

    @ApiOperation("page查")
    @PostMapping("/page")
    public ResponseUtils page(@RequestBody PageParamDto<E> pageParamDto) {
        //限制条件
        if (pageParamDto.getPage() < 1) {
            pageParamDto.setPage(1);
        }

        if (pageParamDto.getSize() > 100) {
            pageParamDto.setSize(100);
        }
        Page<E> page = new Page<>(pageParamDto.getPage(), pageParamDto.getSize());
        QueryWrapper<E> queryWrapper = new QueryWrapper<>();
        //升序
        String asc = pageParamDto.getAsc();
        if (!StrUtil.isEmpty(asc) && !"null".equals(asc)) {
            String[] split = asc.split(",");
            queryWrapper.orderByAsc(split);
        }
        //降序
        String desc = pageParamDto.getDesc();
        if (!StrUtil.isEmpty(desc) && !"null".equals(desc)) {
            String[] split = desc.split(",");
            queryWrapper.orderByDesc(split);
        }
        Page<E> ePage = baseService.page(page, queryWrapper);
        return ResponseUtils.success(ePage);
    }

    @ApiOperation("获取数量")
    @PostMapping("/count")
    public ResponseUtils count(@RequestBody E entity) {
        QueryWrapper<E> queryWrapper = ApprenticeUtil.getQueryWrapper(entity);
        long count = baseService.count(queryWrapper);
        return ResponseUtils.success(count);
    }
}

这段 Java 代码展示了一个基本的基于 Spring Boot 框架开发的 RESTful API 接口实现。BaseController 是一个较为通用的 Controller 基类,通过泛型使其可以处理各种实体类型对应的请求(比如增、删、改、查等)。

具体来说,该类中包含了五个基本 HTTP 操作(POST, GET),通过不同参数和请求方式对实体对象进行 CRUD 操作,即添加(insert)、删除(delete)、修改(update)、查询(getById)、存储(save)、列表查询(list)、分页查询(page)、统计数量(count)。同时,通过Spring Boot自带的Web开发框架中的注解,将每个方法暴露为一个 Restful API。

需要注意的是,该控制器只是一个模板,实际使用时需要继承该控制器并传入相应的 Service 类作为泛型 S 的参数,并实现具体的 CRUD 方法。

第四步,由于 mybatisplus 默认是不支持分页的,我们需要配置一下使他支持

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {


    /** 设置分页插件
     * @Param: []
     * @return: com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
    
}

第五步,我们在自己的controller类中继承BaseController类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.wangfugui.apprentice.dao.domain.Dynamic;
import com.wangfugui.apprentice.service.IDynamicService;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 * 动态表 前端控制器
 */
@RestController
@RequestMapping("/apprentice/dynamic")
@Api("动态管理")
public class DynamicController extends BaseController<IDynamicService, Dynamic>{

}

这样就可以有默认的增删改查了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.wangfugui.apprentice.dao.domain.Blog;
import com.wangfugui.apprentice.service.IBlogService;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 博客表 前端控制器
 */
@RestController
@RequestMapping("/apprentice/blog")
@Api(tags = "博客管理")
public class BlogController extends BaseController<IBlogService, Blog>{

}

这样就能使用啦!

没有逻辑的CRUD

如果对你有用的话,记得关注一下我哦,爱你们

爱你们


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java思维导图 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
人在美国,刚下飞机,“IP属地”催生下的灰色产业
近日,想必不少网上冲浪选手已经发现,各大社交网络平台开始展现用户的IP属地,国内显示到省份/地区,国外显示到国家。一些“XX在美国”“XX在日本”的网红大V纷纷“现形”,IP属地竟在国内。
数据猿
2022/05/19
6140
人在美国,刚下飞机,“IP属地”催生下的灰色产业
《刑法修正案(九)》:对网络黑产伸出重拳
2015年8月29日下午,第十二届人大常务委员会通过了刑法修正案(九),全称《中华人民共和国刑法修正案(九)》,自11月1日起正式施行。 关于执行刑法确定罪名的补充规定近日发布,涉及网络犯罪的补充、修
FB客服
2018/02/06
1.1K0
《刑法修正案(九)》:对网络黑产伸出重拳
【k哥爬虫普法】非法入侵计算机信息系统,获取1500万余条个人信息!
2018年1月至7月期间,呙某兴通过SQL注入漏洞以及编写爬虫脚本的方式,侵入计算机信息系统,获取计算机系统内存储的大量数据,其中涉及到个人信息的数量约为1500万余条,该将其获取的个人信息通过QQ销售给“Versace”、“同花顺”、“FF”、“糖果”等人,从中获利约54万余元。
K哥爬虫
2023/01/12
7020
【k哥爬虫普法】非法入侵计算机信息系统,获取1500万余条个人信息!
【K哥爬虫普法】老铁需要车牌靓号吗?判刑的那种
2014年至今,被告人李文环使用“爬虫”软件,大量爬取全国各地及凉山州公安局交警支队车管所公告的车牌放号信息,之后使用软件采用多线程提交、批量刷单、验证码自动识别等方式,突破系统安全保护措施,将爬取的车牌号提交至“交通安全服务管理平台”车辆报废查询系统,进行对比,并根据反馈情况自动记录未注册车牌号,建立全国未注册车牌号数据库。李文环之后编写客户端查询软件,由李文环通过QQ、淘宝、微信等方式,以300-3000元每月的价格,分省市贩卖数据库查阅权限。其中将软件卖给李某2,非法选取凉山州车牌三个(WQQ777、WQJ777、WQX999);将软件卖给李某1,非法选取凉山州车牌1个(WQD777)。被告人吴杰明知李文环使用非法手段获取未注册车牌信息,而购买抢号软件、查库软件,非法选取四个成都市车牌号码(A5432F、A6543J、A4777、DAS456)。
K哥爬虫
2023/01/12
6290
【K哥爬虫普法】老铁需要车牌靓号吗?判刑的那种
看了这些,你觉得你的隐私还安全吗?用python来保护你的隐私
不得不说,我感觉自己越来越有营销号的潜力了。前段时间在telegram上看到一个社工机器人,大概是这样的(查询了下自己QQ):
SingYi
2022/07/14
5300
看了这些,你觉得你的隐私还安全吗?用python来保护你的隐私
倒卖中国联通、中国电信 IDC 外拉带宽,流量穿透、破坏探针系统:徐某被判五年六个月、经营的四家公司被罚 80 万
被告单位中通领航电信技术(北京)有限公司 被告单位北京中鑫恒业网络技术有限公司 被告单位北京首昌创业电信科技有限公司 被告单位辽宁盈通网络技术有限公司 被告人徐某某,男性,1969年出生,初中文化程度; 被告人黄某某,女性,1983年出生,大学文化程度; 被告人孙某某,男性,1990年出生,大专文化程度; 被告人彭某某,女性,1987年出生,大学文化程度。 2017年12月至2019年1月,中通领航公司、北京中鑫公司、北京首昌公司、辽宁盈通公司违规销售带宽期间,徐某某为使其实际经营的上述公司违规销售带宽的
云头条
2022/03/18
3K0
网络爬虫法律条文或出台:你的程序合法吗?
2018年10月20日,一篇《独家|估值175亿的旅游独角兽,是一座僵尸和水军构成的鬼城?》的文章一出世便走红网络。文中称百亿体量的马蜂窝,其中2100万条“真实点评”中有1800万条是通过机器人从大众点评和携程等竞争对手抄袭而来。通过语义分析、数据挖掘,发现了7454个抄袭账号,平均每个账号抄袭搬运了数千条点评,合计抄袭572万条餐饮点评和1221万条酒店点评,占官网声称点评数85%。
IT阅读排行榜
2019/07/09
8.2K0
网络爬虫法律条文或出台:你的程序合法吗?
有组织的捅马蜂窝违法了吗
今天的朋友圈被《我承认,我们是有组织攻击马蜂窝的》刷屏了。自媒体「小声比比」作者梓泉和「乎睿数据」的三名技术人员组成的「四人豪华犯罪团伙」,通过爬虫技术结合大数据分析,披露马蜂窝 2100 万条用户评论数据中的 1800 万条为造假数据,被马蜂窝以名誉权纠纷为由状告法院。
猫哥学前班
2018/11/06
1.2K0
有组织的捅马蜂窝违法了吗
肖飒:区块链应用创业的法律边界及案例分析 | 清华x-lab公开课
清华x-lab公开课第二期第二讲邀请到了中国银行法学研究会理事肖飒,他为清华师生带来了题为《区块链应用创业的法律边界及案例分析》的演讲。
大数据文摘
2018/12/28
9240
肖飒:区块链应用创业的法律边界及案例分析 | 清华x-lab公开课
你的爬虫会送你进监狱吗?
随着大数据的火热,数据相关行业竞争不仅“蒸蒸日上”,爬虫之间的战争也越发地激烈。一篇《你的爬虫会送老板进监狱吗?》在程序猿圈子里被大量转载,甚至有的程序员因为非法获取数据的新闻从而放弃了这一行当。那么,爬虫是什么,它会是悬在程序员头上的达摩克利斯之剑吗?
崔庆才
2019/05/06
3.5K0
你的爬虫会送你进监狱吗?
破解安全措施、爬取数据,获利 100 余万:2 人各判五年、四年八个月
被告人:吴某某,男,1993年出生;李某,男,1991年出生。 法院查明: 2019年至2020年间,吴某某、李某破解并绕过北京五八信息技术有限公司网站的安全措施,爬取该公司服务器上的房源及用户手机号码等信息数据,并以重庆和致网络科技有限公司的名义通过网络向他人有偿提供,获取违法所得共计人民币100余万元。 2021年6月3日,吴某某、李某被公安机关查获归案,二人持有的手机2部、笔记本电脑1台、电脑主机1个被起获并扣押在案。 上述事实,吴某某、李某在开庭审理过程中没有异议,且有证人贺某某的证言、被害单位北
云头条
2022/10/20
3680
破解安全措施、爬取数据,获利 100 余万:2 人各判五年、四年八个月
侵犯软件著作权罪量刑标准
我国对于著作权的保护是在法律上有依据的,甚至写进了刑法。违法者除了要承担民事赔偿责任,还需要承担刑事责任,那么刑法这块对此是有怎样的量刑标准呢?
JEECG
2021/10/21
6680
17岁少年买不到回国机票,雇佣黑客攻击航空公司
2020年6月初,17岁的小陈因疫情原因滞留国外,由于无法买到回国机票而产生不满情绪。
FB客服
2021/08/24
4000
小学文化,破解无人机限高、禁飞区:判 6 个月,犯提供侵入、非法控制计算机信息系统程序、工具罪
陈某某,男,1996年出生,小学文化,因本案于2022年4月19日被抓获,次日被刑事拘留,同年5月17日被监视居住在医学观察隔离点,同年6月2日被刑事拘留,同年6月11日被逮捕。 2021年11月至2022年4月19日间,陈某某在安溪县向他人有偿提供大疆无人机破解限高、禁飞区限制服务方案,将下载的“DJI全套”软件及破解教程网站通过远程连接买家电脑操作进行有偿提供无人机限高、禁飞区限制破解服务,共计21人次,获利人民币6,850元。 陈某某于2022年4月19日被抓获,到案后如实供述主要犯罪事实。 指控的证
云头条
2022/09/27
5670
小学文化,破解无人机限高、禁飞区:判 6 个月,犯提供侵入、非法控制计算机信息系统程序、工具罪
《爬虫写得好,铁窗关到老》教你把握爬虫的法律边界!㊫
最近的IT公司违法案件越来越多,看了很多因为爬虫,数字货币,博彩网站外包等被抓的事情,给大家提个醒,打工注意不能违法,写代码背后也有法律风险。
不吃西红柿
2022/09/19
7180
《网络安全法》正式实施,网络运营者哪些雷区千万不能踩?
网络安全问题第一次有法可依了 《网络安全法》 于今日起正式施行的《网络安全法》,从网络安全支持与促进、网络运行安全一般规定、关键信息基础设施的运行安全、网络信息安全、监测预警与应急处置五个方面,对网络
Seebug漏洞平台
2018/03/30
9850
因买不到票,17 岁少年攻击航空系统,瘫痪四个小时,5000余万用户受影响:判 4 年
受疫情影响,一些国际航线机票紧缺,有的航线花高价也是一票难求,官网订票、APP购票、找黄牛抢票,能想到的方法都用了,可还是买不到票,怎么办? 因为买不到回国机票,一气之下,身处境外的17岁少年小陈竟多次、持续攻击某航空公司计算机系统,致使该航空公司对外服务网络全面瘫痪近四小时,5000余万用户受到影响! 广州日报记者今日从广州白云法院了解到,小陈因犯破坏计算机信息系统罪,被判处有期徒刑4年。 买不到回国机票,他找黑客攻击航空公司系统 2020年6月初,17岁的小陈因疫情影响被强制留滞在国外疫情重区,因在境外
云头条
2022/03/18
3480
【K哥爬虫普法】淘宝一亿快递信息泄漏,有人正在盯着你的网购!
2014 年 5 月初,被告人翁秀豪发现淘宝店铺源码存在漏洞,利用该漏洞可以在店铺源码中植入一个 url,执行该 url 指向的 javascript,以获取访问被植入 url 的淘宝店铺的所有淘宝用户的 cookie(淘宝用户登录时产生的一组认证信息,利用 cookie 可以执行对应帐号权限内的所有操作,无需帐号、密码),并利用其中的卖家 cookie 将 url 再次植入卖家淘宝店铺源码,实现自动循环,获取更多的淘宝用户 cookie。
K哥爬虫
2023/07/21
4840
【K哥爬虫普法】淘宝一亿快递信息泄漏,有人正在盯着你的网购!
窃取华三Comware源代码(研发成本 9.9 亿)、72 万出售,判 5 年 9 个月:购买方三人各判 3 年、2 年、2 年
被告人:魏某,男,1985年出生,大学文化程度,原系杭州华三通信技术有限公司员工 被告人:任某某,男,1975年出生,大学文化程度,北京楚航可信科技有限公司研发部负责人 被告人:姜某,男,1972年出生,大学文化程度,北京楚航可信科技有限公司总经理 被告人:雷某,男,1974年出生,大学文化程度,北京楚航可信科技有限公司董事长兼法人代表 一审查明事实: 2015年4月21日晚,魏某利用其在杭州华三通信技术有限公司(以下简称“华三公司”)研发部工作的便利,违反公司规定,使用手机、无线路由器等设备,通过技术手
云头条
2022/10/14
8561
窃取华三Comware源代码(研发成本 9.9 亿)、72 万出售,判 5 年 9 个月:购买方三人各判 3 年、2 年、2 年
中国爬虫违法违规案例汇总!
最近在 GitHub 发现了一个爬虫库,这个库整理了所有中国大陆爬虫开发者涉诉与违规相关的新闻、资料与法律法规。
龙哥
2019/11/27
1.6K0
推荐阅读
人在美国,刚下飞机,“IP属地”催生下的灰色产业
6140
《刑法修正案(九)》:对网络黑产伸出重拳
1.1K0
【k哥爬虫普法】非法入侵计算机信息系统,获取1500万余条个人信息!
7020
【K哥爬虫普法】老铁需要车牌靓号吗?判刑的那种
6290
看了这些,你觉得你的隐私还安全吗?用python来保护你的隐私
5300
倒卖中国联通、中国电信 IDC 外拉带宽,流量穿透、破坏探针系统:徐某被判五年六个月、经营的四家公司被罚 80 万
3K0
网络爬虫法律条文或出台:你的程序合法吗?
8.2K0
有组织的捅马蜂窝违法了吗
1.2K0
肖飒:区块链应用创业的法律边界及案例分析 | 清华x-lab公开课
9240
你的爬虫会送你进监狱吗?
3.5K0
破解安全措施、爬取数据,获利 100 余万:2 人各判五年、四年八个月
3680
侵犯软件著作权罪量刑标准
6680
17岁少年买不到回国机票,雇佣黑客攻击航空公司
4000
小学文化,破解无人机限高、禁飞区:判 6 个月,犯提供侵入、非法控制计算机信息系统程序、工具罪
5670
《爬虫写得好,铁窗关到老》教你把握爬虫的法律边界!㊫
7180
《网络安全法》正式实施,网络运营者哪些雷区千万不能踩?
9850
因买不到票,17 岁少年攻击航空系统,瘫痪四个小时,5000余万用户受影响:判 4 年
3480
【K哥爬虫普法】淘宝一亿快递信息泄漏,有人正在盯着你的网购!
4840
窃取华三Comware源代码(研发成本 9.9 亿)、72 万出售,判 5 年 9 个月:购买方三人各判 3 年、2 年、2 年
8561
中国爬虫违法违规案例汇总!
1.6K0
相关推荐
人在美国,刚下飞机,“IP属地”催生下的灰色产业
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验