`
laowang
  • 浏览: 37892 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hellolift学习笔记(5)

阅读更多
6.view Blog的实现1--Mapper
很容易定位到com.hellolift.snippet.BlogUtil.viewblog方法,这个方法根据请求的参数id(用户id),在数据库中查找该用户的文章(Entry对象),如果找到,则通过comet显示博客列表,没找到则显示到所有用户文章列表的链接。

这里进行数据库操作时,使用的是liftweb所提供的Mapper框架(《The Definitive Guide To Lift》Ch.6)
为了使用Mapper框架,做了一下几件事情
i) 配置数据库链接,在Boot.scala中实现,现在知道这个工作就行了,暂时不深究
 if (!DB.jndiJdbcConnAvailable_?) DB.defineConnectionManager(DefaultConnectionIdentifier, DBVendor)


ii)实现Mapper-Enabled的类,具体来说就是继承KeyedMapper,KeyedMetaMapper等,我们可以看到Entry和User 都继承者了这些trait。

Mapper-Enabled的细节回头再来看,我们先关注一下怎么样使用这些类(因为这个好像简单些 )
 val t = Entry.findAll(By(Entry.author, toLong(S.param("id"))),
			OrderBy(Entry.id, Descending), MaxRows(20))

还是先来看语法
i. toLong(S.param("id"))
S.param 返回http请求中的参数值,返回值是 Box[String],当id参数不存在是,返回Empty
toLong 是net.liftweb.util.BasicTypesHelpers.toLong 方法这里用到的有两种情况
case Full(n) => toLong(n)
case None | Empty | Failure(_, _, _) => 0L


ii. findAll是定义在MetaMapper中的方法,定义如下
def findAll(by: QueryParam[A]*): List[A]

和定义Loc时的LocParam一样,这也是一个可重复的参数,所有参数均为QueryParam。看一下QueryParam(trait net.liftweb.mapper.QueryParam)的api可以看到以下子类Ignore, Distinct, ByList, Cmp, StartAt, MaxRows, OrderBy, BySql, PreCache, InRaw, OrderBySql, InThing。这些子类都可以作为查询的附加控制。我们能看到这里用到的OrderBy和MaxRows,但是没有By。
By(net.liftweb.mapper.By)是一个object,他的apply方法将返回Cmp对象,Cmp对象是QueryParam的一个子类。相似的,还有NotBy,By_>,By_<,ByList,NullRef,NotNullRef,Like 等等。
现在findAll的几个参数都已经明晰了,虽然api中的说明很简单,但是根据名称我们我们比较容易看懂这个查询的含义。

这行代码的执行结果t是一个List[Entry]

t match {
      // If no 'id' was requested, then show a listing of all users.
      case Nil =>
        {
          User.findAll().map(u => <span><a href={"/blog?id=" + u.id}>
				      {u.firstName + " " + u.lastName}</a>
				      <br /></span>)
        }
      case entries =>
           .....
}

Nil是List的子类,含义是空的List(),在输入错误id或者id为空时,findAll返回的就是一个Nill,这时将重新查找所有User用户,显示用户列表的链接
User.findAll() 返回List[User]
map方法的结果返回一个List[Elem],并将作为viewblog方法的返回值。
且慢,根据viewblog方法的定义,返回值应该是NodeSeq,List[Elem]是怎样作为NodeSeq返回的呢?这里用到了scala的Implicit Conversions (《Programming In Scala》Ch.21 P465)
在NodeSeq中定义了转换方法
implicit def view(s : scala.Seq[scala.xml.Node]) : scala.xml.NodeSeq

至于里面究竟是如何转换的,我就暂时不关心了
分享到:
评论

相关推荐

    Java学习笔记学习笔记

    Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...

    希沃白板学习笔记.pdf

    希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf

    Springcloud学习笔记.md

    Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Spring...

    人工智能学习笔记,人工智能学习笔记

    人工智能学习笔记,人工智能学习笔记,人工智能学习笔记人工智能学习笔记,人工智能学习笔记,人工智能学习笔记人工智能学习笔记,人工智能学习笔记,人工智能学习笔记人工智能学习笔记,人工智能学习笔记,人工智能...

    CCNA学习笔记 CCNA学习笔记

    CCNA学习笔记 CCNA学习笔记 CCNA学习笔记

    云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-基于ssm的云的学习笔记系统-ssm-java代码

    云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...

    云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-基于Web的云的学习笔记系统设计与实现-java代码

    云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...

    nginx学习笔记(软件+学习笔记)

    nginx学习笔记(软件+学习笔记) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! nginx学习笔记(软件+学习笔记) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! nginx学习笔记(软件+学习笔记) ...

    PHP个人学习笔记

    PHP个人学习笔记

    2022吴恩达机器学习笔记汇总(共10章节).zip

    2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip...

    docker学习笔记.md

    docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,...

    Deeplearning深度学习笔记v5.53

    Deeplearning深度学习笔记v5.53 吴恩达机器学习笔记更新--在这 5 堂课中,学生将可以学习到深度学习的基础,学会构建神经网络,并用在包括吴 恩达本人在内的多位业界顶尖专家指导下创建自己的机器学习项目。...

    contiki 学习笔记

    Contiki学习笔记:进程、事件、etimer关系 Contiki 实例: Contiki学习笔记:创建两个交互进程 Contiki 主函数剖析: Contiki学习笔记:main函数剖析 Contiki学习笔记:启动一个进程process_start Contiki学习笔记...

    ssh学习笔记1 ssh学习笔记1

    ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1 ssh学习笔记1

Global site tag (gtag.js) - Google Analytics