REGEXP 正则的落实两个字符串组的配合。

本文作者: 伯乐在线 –
牛犇
。未经作者许可,禁止转载!
接加入伯乐在线 专栏作者。

前言

近日MySQL版块被好像问题出现得较多。总结了瞬间。

 

假设你对dagger2的概念,整个依赖注入框架还免亮,可以优先了解下自家之前2篇稿子:

出于一些原因,有时候我们无以范式的统筹则而把部分性质放到与一个字符串字段遭遇。比如个人兴趣,有时候我们设计表为 create table members (uid int primary key,uname varchar(20),hobby varchar(100));

《dagger2让你爱:基础依赖注入框架篇》
《dagger2让你喜欢:重点概念讲解、融合篇》

表明中内容如下

当下2首文章也收到众多网友的好评和咨询,谢谢大家的支持。我大概总结了下提的题目:

mysql> select * from members; +—–+——-+———————————+ | uid | uname | hobby                           | +—–+——-+———————————+ |   1 | AAAA  | 音乐,电影,网络,篮球,阅读,乒乓球 | |   2 | BBBB  | 音乐,阅读,乒乓球,发呆,围棋,参禅 | |   3 | CCCC  | 交友,乒乓球                     | |   4 | DDDD  | 台球,网络,看书,旅游             | |   5 | EEEE  | 音乐,发呆,下围棋,参禅           | +—–+——-+———————————+ 4 rows in set (0.00 sec)

  • dagger2到底会带来什么好处?
  • dagger2怎么下?

 

故而我以整合这2点来开展本文的教。并且会发切实可行的sample。

假使我们现在纪念找一个跟某个用户X (阅读,交友,围棋,足球,滑雪)有着同样爱好的会员记录 如果来操作也?

dagger2到底发生怎样好处?

我们直奔主题:

增出效率、省去重复的简易体力劳动

率先new一个实例的过程是一个双重的概括体力劳动,dagger2完全好拿new一个实例的行事举行了,因此我们将要精力集中在首要作业上、同时也克益出效率及。

瞧去形容单例的法,并且也未待操心自己写的单例方法是否线程安全,自己写的单例是懒汉模式还是饿汉模式。因为dagger2都可以拿这些干活儿做了。

重新好的管理类实例

每个app中的ApplicationComponent管理全app的大局类实例,所有的全局类实例都统一交由ApplicationComponent管理,并且其的生命周期与app的生命周期一样。

每个页面对应自己的Component,页面Component管理着友好页面所倚的所有类实例。

因Component,Module,整个app的接近实例结构变的不行鲜明。

解耦

使不用dagger2的口舌,一个像样的new代码是蛮可能充斥在app的大半只类似中之,假如该类的构造函数发生变化,那这些涉嫌到之类似都得进行修改。设计模式中提倡将轻生成之有些包装起来

咱所以了dagger2后。

倘若是由此用Inject注解标注的构造函数创建类实例,则就是构造函数变的悠扬,我们差不多都未需要修改外代码。

假使是透过厂子模式Module创建类实例,Module其实就是把new类实例的代码封装起来,这样即便类的构造函数发生变化,只需要修改Module即可。

起只网友提问了一个如此的问题,Module的构造函数也会见发生变化,发生变化后,相应的new
Module的近乎为发生变化,这即无上解耦的法力。首先解耦不是说让类之间要模块之间确实一点关联还未曾了,解耦达到的目的是为一个看似或一个模块对同和谐来关联的接近或模块的震慑降低到低,不是说这种影响就是了没有了,这是匪可能的。

解耦还出个便宜,就是惠及测试,若用替换为网络测试类,只待改相应的Module即可。

当其余数据库被,我们能但透过序来要存储过程来解释这个 “阅读,交友,围棋,足球,滑雪” 字符串为独立的喜项目,然后一个一个开展 like ‘%xxxx%’ 来询问。 但在MySQL中我们好一直行使这regexp规范表达式 来组织SQL语句来兑现。

项目蒙利用dagger2注意点

切实的代码就非开腔了,dagger2
sample地址,大家自行下载。这里要说下dagger2对准目标类进行依赖注入的历程,现在一经要初始化目标类中之里一个依赖类的实例,那具体步骤就在下面:

步骤1:查找Module中是否是创建该类的主意。
步骤2:若在创建类方式,查看该方法是否在参数
步骤2.1:若存在参数,则按照自**步骤1**开始相继初始化每个参数
步骤2.2:若未在参数,则直初始化该类实例,一蹩脚因注入到此结束
步骤3:若无存创建类措施,则寻Inject注解的构造函数,
看构造函数是否存在参数
步骤3.1:若在参数,则由**步骤1**初始挨家挨户初始化每个参数
步骤3.2:若无设有参数,则直初始化该类实例,一软因注入到此结束

1
2
3
4
5
6
7
8
步骤1:查找Module中是否存在创建该类的方法。
步骤2:若存在创建类方法,查看该方法是否存在参数
    步骤2.1:若存在参数,则按从**步骤1**开始依次初始化每个参数
    步骤2.2:若不存在参数,则直接初始化该类实例,一次依赖注入到此结束
步骤3:若不存在创建类方法,则查找Inject注解的构造函数,
           看构造函数是否存在参数
    步骤3.1:若存在参数,则从**步骤1**开始依次初始化每个参数
    步骤3.2:若不存在参数,则直接初始化该类实例,一次依赖注入到此结束

如上是dagger2进行的等同糟因注入的步骤,其实这个手续是一个递归的过程,并且以查找类的实例的进程遭到Module的级别要高于Inject,这概念在上一篇讲过。

下面在说生注意的几触及

  • 一个app必须使产生一个Component(名字可以是ApplicationComponent)用来管理app的所有全局类实例
  • 差不多独页面可以共享一个Component
  • 莫是说Component就必将要是对应一个还是多只Module,Component也足以免含有Module
  • 自定义Scope注解最好以及,虽然未应用啊是得于项目运行起来的,但是加上好处多多。

 

总结

哼了有关dagger2的保有的定义知识点到之终于终止了,希望会帮忙大家,与大家共勉,有题目得以天天与我关系。

dagger2 sample地址

打赏支持自勾勒起还多好章,谢谢!

打赏作者

率先我们将 ‘阅读,交友,围棋,足球,滑雪’ 转换成正则式 为 ‘阅读|交友|围棋|足球|滑雪’ ,  | 在正则表达式中呢 ‘‘ 的意思

打赏支持我形容有重新多好章,谢谢!

任选一种植出办法

澳门葡京官方直营 1
澳门葡京官方直营 2

2 赞 4 收藏 2
评论

mysql> select replace(‘阅读,交友,围棋,足球,滑雪’,’,’,’|’); +———————————————+ | replace(‘阅读,交友,围棋,足球,滑雪’,’,’,’|’) | +———————————————+ | 阅读|交友|围棋|足球|滑雪                    | +———————————————+ 1 row in set (0.00 sec)

关于作者:牛犇

澳门葡京官方直营 3

本身于毕业到现直接从android开发工作,现就职于滴滴出行。本人喜爱编程,兴趣爱好打台球,游泳。联系方式:微信/qq:
704451290自身的微信公众账号:Android-IOS-devper
个人主页 ·
我之章 ·
13 ·
     

 

诸如此类我们可以就此SQL语句如下。 mysql> select * from members where hobby regexp replace(‘阅读,交友,围棋,足球,滑雪’,’,’,’|’); +—–+——-+———————————+ | uid | uname | hobby                           | +—–+——-+———————————+ |   1 | AAAA  | 音乐,电影,网络,篮球,阅读,乒乓球 | |   2 | BBBB  | 音乐,阅读,乒乓球,发呆,围棋,参禅 | |   3 | CCCC  | 交友,乒乓球                     | |   5 | EEEE  | 音乐,发呆,下围棋,参禅           | +—–+——-+———————————+ 3 rows in set (0.00 sec)

只要齐告知句我们可由此一致词SQL得到有hobby包含 ‘阅读,交友,围棋,足球,滑雪’ 任一桩的记录。

不过上述的讲话中还有某些略的弱点,那就算是将 ‘下围棋’ 这无异长长的为选了下,如果纯粹匹配的口舌马上长长的记下不应有被选中。为了避免这种情形,我们本着SQL语句做如下改进。

把正则式改吗 ‘,(阅读|交友|围棋|足球|滑雪),’  也即是要求配合配项前后要有一个限量符”,

 

mysql> select concat(‘,(‘,replace(‘阅读,交友,围棋,足球,滑雪’,’,’,’|’),’),’); +—————————————————————+ | concat(‘,(‘,replace(‘阅读,交友,围棋,足球,滑雪’,’,’,’|’),’),’) | +—————————————————————+ | ,(阅读|交友|围棋|足球|滑雪),                                  | +—————————————————————+ 1 row in set (0.00 sec) mysql> select * from members     -> where concat(‘,’,hobby,’,’) regexp     ->   concat(‘,(‘,replace(‘阅读,交友,围棋,足球,滑雪’,’,’,’|’),’),’); +—–+——-+———————————+ | uid | uname | hobby                           | +—–+——-+———————————+ |   1 | AAAA  | 音乐,电影,网络,篮球,阅读,乒乓球 | |   2 | BBBB  | 音乐,阅读,乒乓球,发呆,围棋,参禅 | |   3 | CCCC  | 交友,乒乓球                     | +—–+——-+———————————+ 3 rows in set (0.00 sec)

这般避免了第5长记下被选中。

 

当为可以使用这种正则式 ‘,阅读,|,交友,|,围棋,|,足球,|,滑雪,’, 但效率肯定不如 ‘,(阅读|交友|围棋|足球|滑雪),’ 这种了。

 

参照文档:

 

MySQL 5.1参考手册 – 12.3.1. 字符串比较函数 – REGEXP (RLIKE)

http://dev.mysql.com/doc/refman/5.1/zh/functions.html#string-comparison-functions

 

MySQL 5.1参考手册 – 附录G:MySQL正则表达式

http://dev.mysql.com/doc/refman/5.1/zh/regexp.html