当前位置: 首页 > news >正文

抓取网站访客qq号码产品运营方案

抓取网站访客qq号码,产品运营方案,网页开发工资,市场营销考研可以考哪些专业1 认识MyBatis-Plus MyBatis-Plus ( MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 1.1 基本使用 1)创建数据库 DROP TABLE IF EXISTS shuser;CREATE TABLE shus…

1 认识MyBatis-Plus

MyBatis-Plus ( MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

1.1 基本使用 

1)创建数据库

DROP TABLE IF EXISTS shuser;CREATE TABLE shuser
(uid INT(4) NOT NULL COMMENT '主键ID',username VARCHAR(30) NOT NULL  COMMENT '用户名',password VARCHAR(30) NOT NULL  COMMENT '密码',rid INT(4) NOT NULL COMMENT '角色ID',createtime DATE COMMENT '创建时间',uodatetime DATE COMMENT '修改时间',PRIMARY KEY (uid)
);

2)配置

pom.xml

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>最新版本</version></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency>
</dependencies>

application.yml 

# DataSource Config
spring:datasource:driver-class-name: org.h2.Driverschema: classpath:db/schema-h2.sqldata: classpath:db/data-h2.sqlurl: jdbc:h2:mem:testusername: rootpassword: test

3) 在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹:

4)编码

编写实体类 shUser.java

@Data
@AllArgsConstructor
public class shUser {private String uid;private String username;private String password;private String rid;private String createtime;private String updatetime;}

编写 Mapper 包下的 UserMapper接口

@Mapper
public interface UserMapper extends BaseMapper<shUser> {
}

 5)测试

 

1.2 注解
 

注解包源码

1)@TableName 表名注解

@TableName("sh_user")
public class shUser {private String uid;private String username;private String password;private String rid;private String createtime;private String updatetime;}

2)@TableId主键注解

@TableName("sh_user")
public class shUser {@TableIdprivate String uid;private String username;private String password;private String rid;private String createtime;private String updatetime;}

 3)@TableField字段注解

@TableName("sh_user")
public class shUser {@TableIdprivate String uid;@TableField("username")private String username;private String password;private String rid;private String createtime;private String updatetime;}

 2 查询

2.1 Service CRUD 接口

(1)自定义IBaseService继承IService<T>

public interface UserService extends IService<shUser> {}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, shUser> implements UserService {
}

(2)注解配置:

(3)测试:

(4)插入:

// 插入一条记录(选择字段,策略插入)
boolean save(T entity);
// 插入(批量)
boolean saveBatch(Collection<T> entityList);
// 插入(批量)
boolean saveBatch(Collection<T> entityList, int batchSize)// TableId 注解存在更新记录,否插入一条记录
boolean saveOrUpdate(T entity);
// 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);
// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList);
// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);

(5)更新:

// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset
boolean update(Wrapper<T> updateWrapper);
// 根据 whereWrapper 条件,更新记录
boolean update(T updateEntity, Wrapper<T> whereWrapper);
// 根据 ID 选择修改
boolean updateById(T entity);
// 根据ID 批量更新
boolean updateBatchById(Collection<T> entityList);
// 根据ID 批量更新
boolean updateBatchById(Collection<T> entityList, int batchSize);

(6)删除:

// 根据 entity 条件,删除记录
boolean remove(Wrapper<T> queryWrapper);
// 根据 ID 删除
boolean removeById(Serializable id);
// 根据 columnMap 条件,删除记录
boolean removeByMap(Map<String, Object> columnMap);
// 删除(根据ID 批量删除)
boolean removeByIds(Collection<? extends Serializable> idList);

(7) 查询:

// 根据 ID 查询
T getById(Serializable id);
// 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")
T getOne(Wrapper<T> queryWrapper);
// 根据 Wrapper,查询一条记录
T getOne(Wrapper<T> queryWrapper, boolean throwEx);
// 根据 Wrapper,查询一条记录
Map<String, Object> getMap(Wrapper<T> queryWrapper);
// 根据 Wrapper,查询一条记录
<V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
// 查询所有
List<T> list();
// 查询列表
List<T> list(Wrapper<T> queryWrapper);
// 查询(根据ID 批量查询)
Collection<T> listByIds(Collection<? extends Serializable> idList);
// 查询(根据 columnMap 条件)
Collection<T> listByMap(Map<String, Object> columnMap);
// 查询所有列表
List<Map<String, Object>> listMaps();
// 查询列表
List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper);
// 查询全部记录
List<Object> listObjs();
// 查询全部记录
<V> List<V> listObjs(Function<? super Object, V> mapper);
// 根据 Wrapper 条件,查询全部记录
List<Object> listObjs(Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录
<V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);

结果:

(8)分页查询:

// 无条件分页查询
IPage<T> page(IPage<T> page);
// 条件分页查询
IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper);
// 无条件分页查询
IPage<Map<String, Object>> pageMaps(IPage<T> page);
// 条件分页查询
IPage<Map<String, Object>> pageMaps(IPage<T> page, Wrapper<T> queryWrapper);

(9)总数查询:

// 查询总记录数
int count();
// 根据 Wrapper 条件,查询总记录数
int count(Wrapper<T> queryWrapper);

 2.2 Mapper CURD 接口

1)自定义Mapper接口继承BaseMapper<T>

@Mapper
public interface UserMapper extends BaseMapper<shUser> {
}

2)增删改查

1)插入
// 插入一条记录
int insert(T entity);
2)删除
// 根据 entity 条件,删除记录
int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper);
// 删除(根据ID 批量删除)
int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
// 根据 ID 删除
int deleteById(Serializable id);
// 根据 columnMap 条件,删除记录
int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
3)更新
// 根据 whereWrapper 条件,更新记录
int update(@Param(Constants.ENTITY) T updateEntity, @Param(Constants.WRAPPER) Wrapper<T> whereWrapper);
// 根据 ID 修改
int updateById(@Param(Constants.ENTITY) T entity);
4)查询
// 根据 ID 查询
T selectById(Serializable id);
// 根据 entity 条件,查询一条记录
T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 查询(根据ID 批量查询)
List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
// 根据 entity 条件,查询全部记录
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 查询(根据 columnMap 条件)
List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
// 根据 Wrapper 条件,查询全部记录
List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录。注意: 只返回第一个字段的值
List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);// 根据 entity 条件,查询全部记录(并翻页)
IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录(并翻页)
IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询总记录数
Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

2.3 Wrapper条件构造器

Wrapper  条件构造抽象类-- AbstractWrapper 查询条件封装,用于生成 sql 中的 where 语句。-- QueryWrapper Entity 对象封装操作类,用于查询。-- UpdateWrapper Update 条件封装操作类,用于更新。-- AbstractLambdaWrapper 使用 Lambda 表达式封装 wrapper-- LambdaQueryWrapper 使用 Lambda 语法封装条件,用于查询。-- LambdaUpdateWrapper 使用 Lambda 语法封装条件,用于更新。

 常用查询:

1)   比较大小类

    eq(R column, Object val); // 等价于 =
    ne(R column, Object val); // 等价于 <>
    gt(R column, Object val); // 等价于 >
    ge(R column, Object val); // 等价于 >=
    lt(R column, Object val); // 等价于 <
    le(R column, Object val); // 等价于 <=

2)范围

   between(R column, Object val1, Object val2); // 等价于 between a and b
   notBetween(R column, Object val1, Object val2); // 等价于 not between a and b
   in(R column, Object... values); // 等价于 字段 IN (v0, v1, ...)
   notIn(R column, Object... values); // 等价于 字段 NOT IN (v0, v1, ...)
   inSql(R column, Object... values); // 等价于 字段 IN (sql 语句)
   notInSql(R column, Object... values); // 等价于 字段 NOT IN (sql 语句)

3)模糊匹配

    like(R column, Object val); // 等价于 LIKE '%值%'
    notLike(R column, Object val); // 等价于 NOT LIKE '%值%'
    likeLeft(R column, Object val); // 等价于 LIKE '%值'
    likeRight(R column, Object val); // 等价于 LIKE '值%'

4)空值比较

    isNull(R column); // 等价于 IS NULL
    isNotNull(R column); // 等价于 IS NOT NULL

5)分组、排序

    groupBy(R... columns); // 等价于 GROUP BY 字段, ...
    orderByAsc(R... columns); // 等价于 ORDER BY 字段, ... ASC
    orderByDesc(R... columns); // 等价于 ORDER BY 字段, ... DESC
    having(String sqlHaving, Object... params); // 等价于 HAVING ( sql语句 )

6)拼接、嵌套

   or(); // 等价于 a or b
   or(Consumer<Param> consumer); // 等价于 or(a or/and b),or 嵌套
   and(Consumer<Param> consumer); // 等价于 and(a or/and b),and 嵌套
   nested(Consumer<Param> consumer); // 等价于 (a or/and b),普通嵌套
   apply(String applySql, Object... params); // 拼接sql(若不使用 params 参数,可能存在 sql 注入)
   last(String lastSql); // 无视优化规则直接拼接到 sql 的最后,可能存若在 sql 注入。
   exists(String existsSql); // 拼接 exists 语句

queryWrapper select条件查询:

 UpdateWrapper set、setSql(设置SQL语句)更新: 

 3 扩展

3.1 安全保护

Mybatis-Plus 3.3.2版本:

1)获取密钥

String randomKey= AES.generateRandomKey();//使用随机密钥加密需要加密的数据,列如数据库url,username,password
String url = "jdbc:mysql://localhost:3306/mybatisplus?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8";
String username = "root";
String password = "root";
String aesUrl = AES.encrypt(url, randomKey);
String aesUsername = AES.encrypt(username, randomKey);
String aesPassword = AES.encrypt(password, randomKey);
System.out.println("url:"+aesUrl);
System.out.println("username:"+aesUsername);
System.out.println("password:"+aesPassword);

2)配置

spring:datasource:url: mpw:qRhvCwF4GOqjessEB3G+a5okP+uXXr96wcucn2Pev6Bf1oEMZ1gVpPPhdDmjQqoMpassword: mpw:Hzy5iliJbwDHhjLs1L0j6w==username: mpw:Xb+EgsyuYRXw7U7sBJjBpA==

3)启动

/ Jar 启动参数( idea 设置 Program arguments , 服务器可以设置为启动环境变量 )
--mpw.key=key

4)其他防护

注解 @FieldEncrypt 字段加密

@FieldEncrypt
private String password;

注解 @FieldSensitive 字段脱敏,内置 手机号、邮箱、银行卡号 等 9 种常用脱敏规则

自定义脱敏

@FieldSensitive(type = "testStrategy")
private String username;@FieldSensitive(type = SensitiveType.mobile)
private String mobile;@Configuration
public class SensitiveStrategyConfig {/*** 注入脱敏策略*/@Beanpublic ISensitiveStrategy sensitiveStrategy() {// 自定义 testStrategy 类型脱敏处理return new SensitiveStrategy().addStrategy("testStrategy", t -> t + "***test***");}
}

3.2 多数据源

mybatis-mate:sharding:health: true # 健康检测primary: mysql # 默认选择数据源datasource:mysql: # 数据库组- key: node1...- key: node2cluster: slave # 从库读写分离时候负责 sql 查询操作,主库 master 默认可以不写...postgres:- key: node1 # 数据节点...
@Mapper
@Sharding("mysql")
public interface UserMapper extends BaseMapper<User> {@Sharding("postgres")Long selectByUsername(String username);}

http://www.lbrq.cn/news/2360521.html

相关文章:

  • 高校校园网站建设html网页制作软件
  • 如何自己建站网站制作小说网站排名前十
  • 宿迁房产网丫丫找房seo综合查询站长工具怎么用
  • 做情网站快速优化系统
  • 网页设计怎么创建站点网站seo优化
  • 烟台软件优化网站建设长春网站优化咨询
  • 网站开发一般要多少钱外链代发平台
  • web网站是什么意思做网站用什么软件好
  • 新媒体营销岗位有哪些seozou是什么意思
  • 自己做的网站被篡改怎么办聊城网站开发
  • 网站建设销售求职搜索引擎优化技术
  • 入门 做网站 书籍百度热门排行榜
  • 设计政府类网站应注意什么深圳百度竞价托管公司
  • 广东建设工程注册中心网站营销型网站制作
  • php怎么建立网站网络推广公司
  • 江西网站做的好的企业深圳关键词优化公司哪家好
  • 性价比高的vps短视频seo营销
  • 爆推联盟官网岳阳seo公司
  • 网站建设在哪个软件下做营销工具有哪些
  • wordpress控制列表页北京快速优化排名
  • 推广网站建设语句中文搜索引擎有哪些平台
  • 品牌网站建设解决方案短视频营销方式有哪些
  • 做网站可以申请个体户么三门峡网站seo
  • 天津建设银行公积金缴费官方网站独立站seo是什么
  • 建材做哪些网站好网站推广的100种方法
  • 做网站解析要多久今日重大新闻头条
  • 无锡做网站企业整站关键词快速排名
  • 怎么查网站在哪备案手游代理加盟哪个平台最强大
  • 做网站的公司搞什么活动广告推广怎么做
  • 网站快速备案安全b站好看的纪录片免费
  • HCIE - 云计算拿下后的职业选择如何规划?
  • NLP:LSTM和GRU分享
  • 开源 python 应用 开发(六)网络爬虫
  • 算法入门:BFS与DFS详解(C++实现)
  • ZYNQ千兆光通信实战:Tri Mode Ethernet MAC深度解析
  • 【HarmonyOS】元服务概念详解