SlideShare a Scribd company logo
SQUERYL
              ORM ! "#$%&#"#!'() $(*%)




!"#$ %&'()*                         e-Legion Ltd., 2011
                                                      1
ORM



Query q = entityManager.createQuery(
   "SELECT AVG(g.scoreInPercentage) FROM Grades g where g.subjectId = :subjectId"
);

q.setParameter(1, mathId);

Number avg = (Number) q.getSingleResult();

avg.floatValue();




                                                                                    2
ORM



Query q = entityManager.createQuery(
   "SELECT AVG(g.scoreInPercentage) FROM Grades g where g.subjectId = :subjectId"
);

q.setParameter(1, mathId);

Number avg = (Number) q.getSingleResult();

avg.floatValue();




                                                                                    3
TYPE SAFE ORM (JPA 2)


EntityManager em = ...
CriteriaBuilder qb = em.getCriteriaBuilder();

CriteriaQuery<Person> c = qb.createQuery(Person.class);
Root<Person> p = c.from(Person.class);
Predicate condition = qb.gt(p.get(Person_.age), 20);
c.where(condition);
TypedQuery<Person> q = em.createQuery(c);
List<Person> olderThan20s = q.getResultList();




                                                          4

Recommended for you

BVJS
BVJSBVJS
BVJS

The document discusses a talk titled "Beyond the DOM: Sane Structure for JS Apps" given by Rebecca Murphey at BVJS 2012. It provides code snippets for handling click events on objects and submitting a Twitter search form to retrieve results and display them on the page. The document advocates for moving beyond just manipulating the DOM and having a sane structure for JavaScript applications.

backbonejavascript
DOM Scripting Toolkit - jQuery
DOM Scripting Toolkit - jQueryDOM Scripting Toolkit - jQuery
DOM Scripting Toolkit - jQuery

The document discusses jQuery, a JavaScript library that makes DOM scripting and Ajax requests easier. It provides functions to select elements, handle events, animate elements and load JSON data. Some key features include CSS selector syntax, DOM manipulation methods, event handling and Ajax functions. The document also covers plugins, effects, and utilities included in jQuery.

Beyond the DOM: Sane Structure for JS Apps
Beyond the DOM: Sane Structure for JS AppsBeyond the DOM: Sane Structure for JS Apps
Beyond the DOM: Sane Structure for JS Apps

The document is a presentation by Rebecca Murphey titled "Beyond the DOM: Sane Structure for JS Apps" given at FrontTrends 2012. It discusses using a structured approach to building JavaScript applications, with separate models, views, and controllers. It provides examples of how searches could be handled with a search form view, search controller, server, search data collection, and searches collection to manage application state. Tests are also shown to validate the search functionality. The presentation concludes with discussing topics like memory management, building for production, and multi-page applications.

backboneclient-side appsjavascript
SQUERYL


ORM

SQL-+%,%-./0 DSL ,$1 23+4%!%&

564%731 6(+(23*(1

8#.9:# '%,3, -%$9:# ,#$3




                                5
TYPE SAFE ORM (JPA 2)


EntityManager em = ...
CriteriaBuilder qb = em.getCriteriaBuilder();

CriteriaQuery<Person> c = qb.createQuery(Person.class);
Root<Person> p = c.from(Person.class);
Predicate condition = qb.gt(p.get(Person_.age), 20);
c.where(condition);
TypedQuery<Person> q = em.createQuery(c);
List<Person> olderThan20s = q.getResultList();




                                                          6
SQUERYL




val olderThan20s = people.where(_.age gt 20)




                                               7
SQUERYL



val olderThan20s =

 from (people) ( p =>
   select (p)
   where (p.age gt 20)
 )




                         8

Recommended for you

Javascript & jQuery: A pragmatic introduction
Javascript & jQuery: A pragmatic introductionJavascript & jQuery: A pragmatic introduction
Javascript & jQuery: A pragmatic introduction

This document provides an introduction to Javascript and jQuery. It covers Javascript data types including numbers, strings, Booleans, null/undefined, and arrays. It then covers jQuery topics like jQuery objects, selectors, CSS manipulation, events including ready and load, and AJAX/JSON requests using both asynchronous and synchronous modes. It includes examples for working with numbers, strings, selectors, events, AJAX calls and shortcuts. The document aims to provide a pragmatic introduction to Javascript and jQuery concepts and functionality.

jqueryjavascriptajax
Swift - 혼자 공부하면 분명히 안할테니까 같이 공부하기
Swift - 혼자 공부하면 분명히 안할테니까 같이 공부하기Swift - 혼자 공부하면 분명히 안할테니까 같이 공부하기
Swift - 혼자 공부하면 분명히 안할테니까 같이 공부하기

The document contains code snippets demonstrating various Swift programming concepts including variables, constants, types, optionals, functions, classes, structs, enums, and more. Key concepts demonstrated include variable and constant declaration with types, optional binding, functions with parameters and return values, classes and structs with properties and methods, tuples, and enums with associated values and raw values.

Drupal csu-open atriumname
Drupal csu-open atriumnameDrupal csu-open atriumname
Drupal csu-open atriumname

atrium_username is a Drupal feature for managing user name display: * a lightweight alternative to realname module; * "works" before theme layer * uses the node title of the user profile

drupal
!"#!$%




         9
!"#!$%

;.(*(3$(23*(1
<43.23'*((
5=#)3
Insert
Select

Update
Delete


                      10
&#&'&()&*('&+
 import org.squeryl.SessionFactory
 import java.sql.DriverManager._

 Class.forName("org.h2.Driver")

 SessionFactory.concreteFactory = Some { ()=>
   Session.create(
      getConnection("jdbc:h2:mem:"),
      new H2Adapter
   )
 }


“>3(&.31” ?3-4('3

;!+%$92@06# ConnectionPool (DBCP, BoneCP)


                                                11
,-(#*(.'&&


transaction { ... }

 &!#7,3 .3"(.3#6 .%&@A 643.23'*(A ( '%))(6(6
 & '%.*#

inTransaction { ... }

 .("#7% .# ,#$3#6, #!$( (!+%$92@#6!1 &.@64(
 ,4@7%0 643.23'*((




                                               12

Recommended for you

DataMapper @ RubyEnRails2009
DataMapper @ RubyEnRails2009DataMapper @ RubyEnRails2009
DataMapper @ RubyEnRails2009

This document provides an overview of the DataMapper ORM library for Ruby. It discusses DataMapper 0.10 being released after 11 months of work. It demonstrates basic usage like defining models with properties and relationships. It also covers more advanced features like querying, custom types, embedded documents, validation, timestamps, constraints and plugins. Contact information is provided at the end for the DataMapper project on GitHub, mailing list and IRC channel to ask any questions.

datamapperrer09rer2009
The Ring programming language version 1.5.2 book - Part 43 of 181
The Ring programming language version 1.5.2 book - Part 43 of 181The Ring programming language version 1.5.2 book - Part 43 of 181
The Ring programming language version 1.5.2 book - Part 43 of 181

This document discusses Ring code for implementing CRUD (create, read, update, delete) functionality using an MVC (model-view-controller) pattern. It includes code for classes that represent a Salary model, controller, and view. It also includes code for classes that handle user registration and login functionality, including models, views, controllers, and language files. The document provides code examples for connecting to a database, implementing base model and controller classes, and performing common database operations like searching, counting, inserting, updating, and finding records.

ringring programmingring programming language
Rediscovering JavaScript: The Language Behind The Libraries
Rediscovering JavaScript: The Language Behind The LibrariesRediscovering JavaScript: The Language Behind The Libraries
Rediscovering JavaScript: The Language Behind The Libraries

This document provides a summary of the evolution of JavaScript libraries from 2004 to 2005. It discusses how in 2004, JavaScript was not taken seriously by most developers. A few libraries like Prototype.js emerged in 2005, helping popularize JavaScript for dynamic effects like drag and drop. This led to a flurry of library development in 2005, including early versions of jQuery, MochiKit and YUI. These libraries had different philosophies but helped unlock JavaScript's potential and make it a first-class language for web development.

javascriptjquery
"/01(
             (PrimitiveTypeMode)

              case class User(
                id:     Long = 0,
                @Column(length = 256)
                email: String,
                name:   String,
                rating: Int = 0,
              ) extends KeyedEntity[Long]


Plain Old Scala Object ()%B.% case)
563.,346./# 6(+/ ,$1 +%$#0
C%$1 )%7@6 -/69 var ($( val
8%B.% @'32369 432)#4, ()1 !6%$-*3 & -32#
>3!$#,%&369 KeyedEntity .# %-1236#$9.%


                                            13
"/01(
             (CustomTypeMode)




5$%B./# '$3!!/ ,$1 +%$#0
8%7@6 &'$A"369 & !#-1 &3$(,3*(A, etc




                                       14
"/01(

          object MySchema extends Schema {
            val users = table[User]

              on(users) { u => declare(
                  u.id    is (autoIncremented),
                  u.email is (unique)
                )
              }
          }

          transaction { MySchema.create }

<3-$(*/
D743.("#.(1
5&12(

                                                  15
INSERT



import MySchema._

val vasya =
  users.insert(new User("vasya@example.com", "Vasya"))

users.insert(List(user1, user2))




                                                         16

Recommended for you

Functionality Focused Code Organization
Functionality Focused Code OrganizationFunctionality Focused Code Organization
Functionality Focused Code Organization

The magic of jQuery's CSS-based selection makes it easy to think about our code in terms of the DOM, and sometimes that approach is exactly right. Other times, though, what we're trying to accomplish is only tangentially related to our nodes, and opting for an approach where we think in terms of functionality -- not how that functionality is manifested on our page -- can pay big dividends in terms of flexibility. In this talk, we'll look at a small sample application where the DOM takes a back seat to functionality-focused modules, and see how the approach can change the way we write and organize our code.

javascriptjquery
jQuery
jQueryjQuery
jQuery

JQuery is a JavaScript library that simplifies HTML document manipulation, event handling, animations, and Ajax interactions. It works across browsers and makes tasks like DOM traversal and manipulation, event handling, animation, and Ajax much simpler. JQuery's versatility, extensibility, and cross-browser compatibility have made it popular, with millions of developers using it to write JavaScript.

introduction to jqueryjqueryjquery presentation
Miniproject on Employee Management using Perl/Database.
Miniproject on Employee Management using Perl/Database.Miniproject on Employee Management using Perl/Database.
Miniproject on Employee Management using Perl/Database.

The project is about employee management system. The language used in this project is Perl and MySql database for storing data with phpMyadmin as database handler.

educationmanagementprogramming
SELECT
from(users) ( u =>
  select(u)
  where(u.name like “%Vasya%”)
)


from(users) ( u =>
  select(u.id, u.email)
  orderBy(u.id asc)
)


users.where( _.rating.~ >= 0)


//Option[User]
users.lookup(1)



                                 17
FULL UPDATE



//используем copy
//поскольку все поля immutable

val updatedVasya =
  vasya.copy(rating = vasya.rating + 1)

users.update(updatedVasya)




                                          18
PARTIAL UPDATE

     val updated =
       update(users) ( u =>
         set(u.rating := u.rating.~ + 1)
         where(u.name like "%Vasya%")
       )

     println("%s Vasyas rated" format updated)




~. "6%-/ .# +@6369 Int.+ ( SQL ‘+’

&)#!6% ~. )%B.% (!+%$92%&369 u.rating      plus 1



                                                    19
DELETE


users.delete(1)

val deleted =
  users.deleteWhere( u =>
    u.rating.~ < 0
  )

println("%s users deleted" format deleted)




                                             20

Recommended for you

Elm: give it a try
Elm: give it a tryElm: give it a try
Elm: give it a try

Let's try to look at Elm, is it something like TypeScript or Haskell? Should we use it on a daily basis?

elmhaskelljavascript
画像Hacks
画像Hacks画像Hacks
画像Hacks

The document shows code for processing images using the Imager module in Perl. It demonstrates scaling, cropping, mapping color values, combining images using rubthrough, adding text with QR codes, detecting differences between images, and detecting faces in an image using a cascade classifier. It also includes code to search for adult video actresses from a porn module.

yapcperl
Dig Deeper into WordPress - WD Meetup Cairo
Dig Deeper into WordPress - WD Meetup CairoDig Deeper into WordPress - WD Meetup Cairo
Dig Deeper into WordPress - WD Meetup Cairo

Dig deeper into WordPress is a presentation made for Web Designers Meetup in Cairo taken place on 17th Dec 2012. Signup at WPMonkeys.com to get notified when awesome new WordPress related content is published.

wordpressphpweb design and development
2$&3(01"+ 2()450




                   21
2$&3(01"+ 2()450


5%!63&./# 23+4%!/
Group By ( 374#73*(1
Joins
Relations




                       22
COMPOSITE SELECT


   val rated =
     users.where( _.rating.~ >= 0)


   val vasyasRated =
     from(rated) ( u =>
       select(u)
       where(u.name like “%Vasya%”)
     )




                                      23
NESTED SELECT

 val rated =
   users.where( _.rating.~ >= 0)


 val vasyasRated =
   from(rated) ( u =>
     select(u)
     where(u.id in
       from(rated)
       (r => select(r.id))
     )
   )




                                   24

Recommended for you

linieaire regressie
linieaire regressielinieaire regressie
linieaire regressie

This document describes a regression class that calculates a linear regression model (y=ax+b) based on data points. The class collects x and y data points from a database, calculates the number of data points, ensures the x and y arrays are the same length, calculates the sum of x and y values, and uses those sums to calculate the regression coefficients a and b by minimizing the sum of squared residuals from the line. It can then calculate a predicted y value for a new given x data point.

The Dom Scripting Toolkit J Query
The Dom Scripting Toolkit J QueryThe Dom Scripting Toolkit J Query
The Dom Scripting Toolkit J Query

This document provides an overview of jQuery, a JavaScript library for DOM scripting. It discusses why libraries like jQuery are useful for making DOM scripting easy and handling cross-browser compatibility issues. The core features of jQuery are then summarized, including selectors, DOM manipulation, events, effects, Ajax functionality, and utilities. Examples are provided throughout to illustrate how various jQuery methods work.

javanetdevelopment
ScalaQuery
ScalaQueryScalaQuery
ScalaQuery

The document discusses ScalaQuery, a type-safe database API for Scala. It describes how ScalaQuery can be used to connect to a database, perform queries and updates, and map database tables to case classes through the use of tables. Tables allow defining columns and relations to other tables. Queries can be built declaratively through for-comprehensions and include filtering, joins, and parameters. The results of queries can be lists, single values or options. The document suggests moving to Slick for a more native Scala API.

flatmap
067 SELECT

C%!643.(".31 &/-%4'3
  from(users) ( u => ... ).page(offset, pageLength)


Distinct
  from(users) ( u => ... ).distinct


ForUpdate
  from(users) ( u => ... ).forUpdate




                                                      25
(3-03('&+


val ratingDistribution =
  from(users) ( u =>
    groupBy(u.rating)
    compute(count(u.id))
  )

ratingDistribution foreach { r=>
  println(“%s: %s” format (r.key, r.measures))
}




                                                 26
JOIN


from(users, posts) ( (u,p) =>
  select(u.name, p)
  where(u.id === p.userId)
)




from(users, avatars.leftOuter) ( (u,a) =>
  select(u, a.url)
  on(u.id === a.map(_.userId))
)




                                            27
RELATIONS



object MySchema extends Schema {
  val users = table[User]
  val posts = table[Post]
  val userPosts =
   oneToManyRelation(users, posts) via ( (u,p) =>
     u.id === p.userId
   )
}




                                                    28

Recommended for you

En nybegynners introduksjon til scalaz
En nybegynners introduksjon til scalazEn nybegynners introduksjon til scalaz
En nybegynners introduksjon til scalaz

1. Scalaz is a Scala library that provides functional data structures and type classes to complement the standard library. It defines foundational type classes like Functor, Monad, and provides instances for many data types. 2. The document discusses several Scalaz type classes - Equal, Semigroup, Monoid, Functor, Applicative, Monad, and Validation. It provides examples of how to use these type classes to define instances for types like Int, List, Option, etc. 3. Using Scalaz allows functional programming with types like Validation that encapsulate errors in a pure way, avoiding side effects from exceptions. It also provides syntactic sugar like |+| and <*> to make

javazonescalascalaz
Gdg using docker to streamline development
Gdg using docker to streamline developmentGdg using docker to streamline development
Gdg using docker to streamline development

The document discusses how Docker can be used to streamline development processes. Docker allows developers to build, ship, and run distributed applications consistently across environments by introducing software containers. Containers provide a lightweight Linux environment that is portable and isolates applications from one another. The document provides examples of building Docker containers and linking them together, as well as developing and deploying applications using Docker. It also briefly discusses how Kubernetes can be used to deploy and manage containers at scale in the cloud.

kubernetesdevelopmentdocker
Persistens i scala
Persistens i scalaPersistens i scala
Persistens i scala

The document discusses various topics related to persistence in Scala, including: - Setting focus on the persistence layer and introducing some of the many alternatives. - Thinking carefully about the choices made regarding persistence. - How Scala extends and improves upon concepts from Java, such as null safety with Option types, extension methods, and powerful collections.

persistencejavazonescala
(STATELESS) RELATIONS

case class User (....) extends KeyedEntity[Long] {
  //OneToMany[Post] < Query
  lazy val posts = MySchema.userPosts.left(this)
}

case class User (....) extends KeyedEntity[Long] {
  //ManyToOne[User] < Query
  lazy val user = MySchema.userPosts.right(this)
}

val user =
  users.lookup(1).getOrElse(error(“user not found”))

for (p <- user.posts)
  println(p.title)




                                                       29
STATEFUL RELATIONS

case class User (....) extends KeyedEntity[Long] {

    //StatefulOneToMany[Post] < Iterable[Post]
    lazy val posts = MySchema.userPosts.leftStateful(this)

}

case User (....) extends KeyedEntity[Long] {

    //StetefulManyToOne[User]
    lazy val user = MySchema.userPosts.rightStateful(this)

}




                                                             30
#02!",(,.&




             31
#02!",(,.&

Compile-time Voodoo
  createEqualityExpressionWithLastAccessedFieldReferenceAndConstant


>#6 UNION
5$(:'%) @)./0 DSL
  where ( u.name === stringOpt.? ) //работает

  where ( u.flag === boolOpt.? ) //не работает

  not(not(u.flag)).inhibitWhen(boolOpt != Some(true))
  and
  not(u.flag).inhibitWhen(boolOpt != Some(false))




                                                                      32

Recommended for you

The Near Future of CSS
The Near Future of CSSThe Near Future of CSS
The Near Future of CSS

This document summarizes upcoming CSS features like Box Alignment Level 3, CSS Grid Layout, CSS Shapes, CSS Feature Queries, and CSS Custom Properties. It explains what each feature does at a high level and provides example code snippets. The document also encourages developers to get involved by filing issues on browser bug trackers, requesting new features, and creating blog posts/demos to help drive adoption of these new CSS specifications.

cssweb platformweb design
The Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris LemaThe Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris Lema

The reality for companies that are trying to figure out their blogging or content strategy is that there's a lot of content to write beyond just the "buy now" page.

wordcampbloggingcontent marketing
The Presentation Come-Back Kid
The Presentation Come-Back KidThe Presentation Come-Back Kid
The Presentation Come-Back Kid

How to get back up after a presentation failure.

presentation stylespresentationspresentation training
$!8-!"%?




           33
"8("&9!


email: yuri.buyanov@e-legion.com

email: yuri.buyanov@gmail.com

www: http://digal.github.com/

twitter: @digal




                                   34

More Related Content

What's hot

Delivering a Responsive UI
Delivering a Responsive UIDelivering a Responsive UI
Delivering a Responsive UI
Rebecca Murphey
 
Idioms in swift 2016 05c
Idioms in swift 2016 05cIdioms in swift 2016 05c
Idioms in swift 2016 05c
Kaz Yoshikawa
 
Advanced jQuery
Advanced jQueryAdvanced jQuery
Advanced jQuery
sergioafp
 
BVJS
BVJSBVJS
DOM Scripting Toolkit - jQuery
DOM Scripting Toolkit - jQueryDOM Scripting Toolkit - jQuery
DOM Scripting Toolkit - jQuery
Remy Sharp
 
Beyond the DOM: Sane Structure for JS Apps
Beyond the DOM: Sane Structure for JS AppsBeyond the DOM: Sane Structure for JS Apps
Beyond the DOM: Sane Structure for JS Apps
Rebecca Murphey
 
Javascript & jQuery: A pragmatic introduction
Javascript & jQuery: A pragmatic introductionJavascript & jQuery: A pragmatic introduction
Javascript & jQuery: A pragmatic introduction
Iban Martinez
 
Swift - 혼자 공부하면 분명히 안할테니까 같이 공부하기
Swift - 혼자 공부하면 분명히 안할테니까 같이 공부하기Swift - 혼자 공부하면 분명히 안할테니까 같이 공부하기
Swift - 혼자 공부하면 분명히 안할테니까 같이 공부하기
Suyeol Jeon
 
Drupal csu-open atriumname
Drupal csu-open atriumnameDrupal csu-open atriumname
Drupal csu-open atriumname
Emanuele Quinto
 
DataMapper @ RubyEnRails2009
DataMapper @ RubyEnRails2009DataMapper @ RubyEnRails2009
DataMapper @ RubyEnRails2009
Dirkjan Bussink
 
The Ring programming language version 1.5.2 book - Part 43 of 181
The Ring programming language version 1.5.2 book - Part 43 of 181The Ring programming language version 1.5.2 book - Part 43 of 181
The Ring programming language version 1.5.2 book - Part 43 of 181
Mahmoud Samir Fayed
 
Rediscovering JavaScript: The Language Behind The Libraries
Rediscovering JavaScript: The Language Behind The LibrariesRediscovering JavaScript: The Language Behind The Libraries
Rediscovering JavaScript: The Language Behind The Libraries
Simon Willison
 
Functionality Focused Code Organization
Functionality Focused Code OrganizationFunctionality Focused Code Organization
Functionality Focused Code Organization
Rebecca Murphey
 
jQuery
jQueryjQuery
jQuery
Jay Poojara
 
Miniproject on Employee Management using Perl/Database.
Miniproject on Employee Management using Perl/Database.Miniproject on Employee Management using Perl/Database.
Miniproject on Employee Management using Perl/Database.
Sanchit Raut
 
Elm: give it a try
Elm: give it a tryElm: give it a try
Elm: give it a try
Eugene Zharkov
 
画像Hacks
画像Hacks画像Hacks
画像Hacks
Yusuke Wada
 
Dig Deeper into WordPress - WD Meetup Cairo
Dig Deeper into WordPress - WD Meetup CairoDig Deeper into WordPress - WD Meetup Cairo
Dig Deeper into WordPress - WD Meetup Cairo
Mohamed Mosaad
 
linieaire regressie
linieaire regressielinieaire regressie
linieaire regressie
Mwalima Peltenburg
 
The Dom Scripting Toolkit J Query
The Dom Scripting Toolkit J QueryThe Dom Scripting Toolkit J Query
The Dom Scripting Toolkit J Query
QConLondon2008
 

What's hot (20)

Delivering a Responsive UI
Delivering a Responsive UIDelivering a Responsive UI
Delivering a Responsive UI
 
Idioms in swift 2016 05c
Idioms in swift 2016 05cIdioms in swift 2016 05c
Idioms in swift 2016 05c
 
Advanced jQuery
Advanced jQueryAdvanced jQuery
Advanced jQuery
 
BVJS
BVJSBVJS
BVJS
 
DOM Scripting Toolkit - jQuery
DOM Scripting Toolkit - jQueryDOM Scripting Toolkit - jQuery
DOM Scripting Toolkit - jQuery
 
Beyond the DOM: Sane Structure for JS Apps
Beyond the DOM: Sane Structure for JS AppsBeyond the DOM: Sane Structure for JS Apps
Beyond the DOM: Sane Structure for JS Apps
 
Javascript & jQuery: A pragmatic introduction
Javascript & jQuery: A pragmatic introductionJavascript & jQuery: A pragmatic introduction
Javascript & jQuery: A pragmatic introduction
 
Swift - 혼자 공부하면 분명히 안할테니까 같이 공부하기
Swift - 혼자 공부하면 분명히 안할테니까 같이 공부하기Swift - 혼자 공부하면 분명히 안할테니까 같이 공부하기
Swift - 혼자 공부하면 분명히 안할테니까 같이 공부하기
 
Drupal csu-open atriumname
Drupal csu-open atriumnameDrupal csu-open atriumname
Drupal csu-open atriumname
 
DataMapper @ RubyEnRails2009
DataMapper @ RubyEnRails2009DataMapper @ RubyEnRails2009
DataMapper @ RubyEnRails2009
 
The Ring programming language version 1.5.2 book - Part 43 of 181
The Ring programming language version 1.5.2 book - Part 43 of 181The Ring programming language version 1.5.2 book - Part 43 of 181
The Ring programming language version 1.5.2 book - Part 43 of 181
 
Rediscovering JavaScript: The Language Behind The Libraries
Rediscovering JavaScript: The Language Behind The LibrariesRediscovering JavaScript: The Language Behind The Libraries
Rediscovering JavaScript: The Language Behind The Libraries
 
Functionality Focused Code Organization
Functionality Focused Code OrganizationFunctionality Focused Code Organization
Functionality Focused Code Organization
 
jQuery
jQueryjQuery
jQuery
 
Miniproject on Employee Management using Perl/Database.
Miniproject on Employee Management using Perl/Database.Miniproject on Employee Management using Perl/Database.
Miniproject on Employee Management using Perl/Database.
 
Elm: give it a try
Elm: give it a tryElm: give it a try
Elm: give it a try
 
画像Hacks
画像Hacks画像Hacks
画像Hacks
 
Dig Deeper into WordPress - WD Meetup Cairo
Dig Deeper into WordPress - WD Meetup CairoDig Deeper into WordPress - WD Meetup Cairo
Dig Deeper into WordPress - WD Meetup Cairo
 
linieaire regressie
linieaire regressielinieaire regressie
linieaire regressie
 
The Dom Scripting Toolkit J Query
The Dom Scripting Toolkit J QueryThe Dom Scripting Toolkit J Query
The Dom Scripting Toolkit J Query
 

Viewers also liked

ScalaQuery
ScalaQueryScalaQuery
En nybegynners introduksjon til scalaz
En nybegynners introduksjon til scalazEn nybegynners introduksjon til scalaz
En nybegynners introduksjon til scalaz
Trond Marius Øvstetun
 
Gdg using docker to streamline development
Gdg using docker to streamline developmentGdg using docker to streamline development
Gdg using docker to streamline development
Trond Marius Øvstetun
 
Persistens i scala
Persistens i scalaPersistens i scala
Persistens i scala
Trond Marius Øvstetun
 
The Near Future of CSS
The Near Future of CSSThe Near Future of CSS
The Near Future of CSS
Rachel Andrew
 
The Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris LemaThe Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris Lema
Chris Lema
 
The Presentation Come-Back Kid
The Presentation Come-Back KidThe Presentation Come-Back Kid
The Presentation Come-Back Kid
Ethos3
 

Viewers also liked (7)

ScalaQuery
ScalaQueryScalaQuery
ScalaQuery
 
En nybegynners introduksjon til scalaz
En nybegynners introduksjon til scalazEn nybegynners introduksjon til scalaz
En nybegynners introduksjon til scalaz
 
Gdg using docker to streamline development
Gdg using docker to streamline developmentGdg using docker to streamline development
Gdg using docker to streamline development
 
Persistens i scala
Persistens i scalaPersistens i scala
Persistens i scala
 
The Near Future of CSS
The Near Future of CSSThe Near Future of CSS
The Near Future of CSS
 
The Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris LemaThe Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris Lema
 
The Presentation Come-Back Kid
The Presentation Come-Back KidThe Presentation Come-Back Kid
The Presentation Come-Back Kid
 

Similar to Юрий Буянов «Squeryl — ORM с человеческим лицом»

The Ring programming language version 1.6 book - Part 46 of 189
The Ring programming language version 1.6 book - Part 46 of 189The Ring programming language version 1.6 book - Part 46 of 189
The Ring programming language version 1.6 book - Part 46 of 189
Mahmoud Samir Fayed
 
The Ring programming language version 1.3 book - Part 34 of 88
The Ring programming language version 1.3 book - Part 34 of 88The Ring programming language version 1.3 book - Part 34 of 88
The Ring programming language version 1.3 book - Part 34 of 88
Mahmoud Samir Fayed
 
The Ring programming language version 1.2 book - Part 32 of 84
The Ring programming language version 1.2 book - Part 32 of 84The Ring programming language version 1.2 book - Part 32 of 84
The Ring programming language version 1.2 book - Part 32 of 84
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.4 book - Part 44 of 185
The Ring programming language version 1.5.4 book - Part 44 of 185The Ring programming language version 1.5.4 book - Part 44 of 185
The Ring programming language version 1.5.4 book - Part 44 of 185
Mahmoud Samir Fayed
 
Django - sql alchemy - jquery
Django - sql alchemy - jqueryDjango - sql alchemy - jquery
Django - sql alchemy - jquery
Mohammed El Rafie Tarabay
 
The Ring programming language version 1.5.3 book - Part 54 of 184
The Ring programming language version 1.5.3 book - Part 54 of 184The Ring programming language version 1.5.3 book - Part 54 of 184
The Ring programming language version 1.5.3 book - Part 54 of 184
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.3 book - Part 44 of 184
The Ring programming language version 1.5.3 book - Part 44 of 184The Ring programming language version 1.5.3 book - Part 44 of 184
The Ring programming language version 1.5.3 book - Part 44 of 184
Mahmoud Samir Fayed
 
The Ring programming language version 1.10 book - Part 54 of 212
The Ring programming language version 1.10 book - Part 54 of 212The Ring programming language version 1.10 book - Part 54 of 212
The Ring programming language version 1.10 book - Part 54 of 212
Mahmoud Samir Fayed
 
Bag Of Tricks From Iusethis
Bag Of Tricks From IusethisBag Of Tricks From Iusethis
Bag Of Tricks From Iusethis
Marcus Ramberg
 
ScalikeJDBC Tutorial for Beginners
ScalikeJDBC Tutorial for BeginnersScalikeJDBC Tutorial for Beginners
ScalikeJDBC Tutorial for Beginners
Kazuhiro Sera
 
JQuery Flot
JQuery FlotJQuery Flot
JQuery Flot
Arshavski Alexander
 
前端MVC 豆瓣说
前端MVC 豆瓣说前端MVC 豆瓣说
前端MVC 豆瓣说
Ting Lv
 
Venturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Venturing Into The Wild: A .NET Developer's Experience As A Ruby DeveloperVenturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Venturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Jon Kruger
 
Svcc 2013-d3
Svcc 2013-d3Svcc 2013-d3
Svcc 2013-d3
Oswald Campesato
 
SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)
Oswald Campesato
 
The Ring programming language version 1.5.1 book - Part 42 of 180
The Ring programming language version 1.5.1 book - Part 42 of 180The Ring programming language version 1.5.1 book - Part 42 of 180
The Ring programming language version 1.5.1 book - Part 42 of 180
Mahmoud Samir Fayed
 
Virtual Madness @ Etsy
Virtual Madness @ EtsyVirtual Madness @ Etsy
Virtual Madness @ Etsy
Nishan Subedi
 
The Ring programming language version 1.7 book - Part 48 of 196
The Ring programming language version 1.7 book - Part 48 of 196The Ring programming language version 1.7 book - Part 48 of 196
The Ring programming language version 1.7 book - Part 48 of 196
Mahmoud Samir Fayed
 
Tt subtemplates-caching
Tt subtemplates-cachingTt subtemplates-caching
Tt subtemplates-caching
Valeriy Studennikov
 
Functional Principles for OO Developers
Functional Principles for OO DevelopersFunctional Principles for OO Developers
Functional Principles for OO Developers
jessitron
 

Similar to Юрий Буянов «Squeryl — ORM с человеческим лицом» (20)

The Ring programming language version 1.6 book - Part 46 of 189
The Ring programming language version 1.6 book - Part 46 of 189The Ring programming language version 1.6 book - Part 46 of 189
The Ring programming language version 1.6 book - Part 46 of 189
 
The Ring programming language version 1.3 book - Part 34 of 88
The Ring programming language version 1.3 book - Part 34 of 88The Ring programming language version 1.3 book - Part 34 of 88
The Ring programming language version 1.3 book - Part 34 of 88
 
The Ring programming language version 1.2 book - Part 32 of 84
The Ring programming language version 1.2 book - Part 32 of 84The Ring programming language version 1.2 book - Part 32 of 84
The Ring programming language version 1.2 book - Part 32 of 84
 
The Ring programming language version 1.5.4 book - Part 44 of 185
The Ring programming language version 1.5.4 book - Part 44 of 185The Ring programming language version 1.5.4 book - Part 44 of 185
The Ring programming language version 1.5.4 book - Part 44 of 185
 
Django - sql alchemy - jquery
Django - sql alchemy - jqueryDjango - sql alchemy - jquery
Django - sql alchemy - jquery
 
The Ring programming language version 1.5.3 book - Part 54 of 184
The Ring programming language version 1.5.3 book - Part 54 of 184The Ring programming language version 1.5.3 book - Part 54 of 184
The Ring programming language version 1.5.3 book - Part 54 of 184
 
The Ring programming language version 1.5.3 book - Part 44 of 184
The Ring programming language version 1.5.3 book - Part 44 of 184The Ring programming language version 1.5.3 book - Part 44 of 184
The Ring programming language version 1.5.3 book - Part 44 of 184
 
The Ring programming language version 1.10 book - Part 54 of 212
The Ring programming language version 1.10 book - Part 54 of 212The Ring programming language version 1.10 book - Part 54 of 212
The Ring programming language version 1.10 book - Part 54 of 212
 
Bag Of Tricks From Iusethis
Bag Of Tricks From IusethisBag Of Tricks From Iusethis
Bag Of Tricks From Iusethis
 
ScalikeJDBC Tutorial for Beginners
ScalikeJDBC Tutorial for BeginnersScalikeJDBC Tutorial for Beginners
ScalikeJDBC Tutorial for Beginners
 
JQuery Flot
JQuery FlotJQuery Flot
JQuery Flot
 
前端MVC 豆瓣说
前端MVC 豆瓣说前端MVC 豆瓣说
前端MVC 豆瓣说
 
Venturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Venturing Into The Wild: A .NET Developer's Experience As A Ruby DeveloperVenturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
Venturing Into The Wild: A .NET Developer's Experience As A Ruby Developer
 
Svcc 2013-d3
Svcc 2013-d3Svcc 2013-d3
Svcc 2013-d3
 
SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)
 
The Ring programming language version 1.5.1 book - Part 42 of 180
The Ring programming language version 1.5.1 book - Part 42 of 180The Ring programming language version 1.5.1 book - Part 42 of 180
The Ring programming language version 1.5.1 book - Part 42 of 180
 
Virtual Madness @ Etsy
Virtual Madness @ EtsyVirtual Madness @ Etsy
Virtual Madness @ Etsy
 
The Ring programming language version 1.7 book - Part 48 of 196
The Ring programming language version 1.7 book - Part 48 of 196The Ring programming language version 1.7 book - Part 48 of 196
The Ring programming language version 1.7 book - Part 48 of 196
 
Tt subtemplates-caching
Tt subtemplates-cachingTt subtemplates-caching
Tt subtemplates-caching
 
Functional Principles for OO Developers
Functional Principles for OO DevelopersFunctional Principles for OO Developers
Functional Principles for OO Developers
 

More from e-Legion

MBLT16: Elena Rydkina, Pure
MBLT16: Elena Rydkina, PureMBLT16: Elena Rydkina, Pure
MBLT16: Elena Rydkina, Pure
e-Legion
 
MBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetricaMBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetrica
e-Legion
 
MBLT16: Vincent Wu, Alibaba Mobile
MBLT16: Vincent Wu, Alibaba MobileMBLT16: Vincent Wu, Alibaba Mobile
MBLT16: Vincent Wu, Alibaba Mobile
e-Legion
 
MBLT16: Dmitriy Geranin, Afisha Restorany
MBLT16: Dmitriy Geranin, Afisha RestoranyMBLT16: Dmitriy Geranin, Afisha Restorany
MBLT16: Dmitriy Geranin, Afisha Restorany
e-Legion
 
MBLT16: Marvin Liao, 500Startups
MBLT16: Marvin Liao, 500StartupsMBLT16: Marvin Liao, 500Startups
MBLT16: Marvin Liao, 500Startups
e-Legion
 
MBLT16: Andrey Maslak, Aviasales
MBLT16: Andrey Maslak, AviasalesMBLT16: Andrey Maslak, Aviasales
MBLT16: Andrey Maslak, Aviasales
e-Legion
 
MBLT16: Andrey Bakalenko, Sberbank Online
MBLT16: Andrey Bakalenko, Sberbank OnlineMBLT16: Andrey Bakalenko, Sberbank Online
MBLT16: Andrey Bakalenko, Sberbank Online
e-Legion
 
Rx Java architecture
Rx Java architectureRx Java architecture
Rx Java architecture
e-Legion
 
Rx java
Rx javaRx java
Rx java
e-Legion
 
MBLTDev15: Hector Zarate, Spotify
MBLTDev15: Hector Zarate, SpotifyMBLTDev15: Hector Zarate, Spotify
MBLTDev15: Hector Zarate, Spotify
e-Legion
 
MBLTDev15: Cesar Valiente, Wunderlist
MBLTDev15: Cesar Valiente, WunderlistMBLTDev15: Cesar Valiente, Wunderlist
MBLTDev15: Cesar Valiente, Wunderlist
e-Legion
 
MBLTDev15: Brigit Lyons, Soundcloud
MBLTDev15: Brigit Lyons, SoundcloudMBLTDev15: Brigit Lyons, Soundcloud
MBLTDev15: Brigit Lyons, Soundcloud
e-Legion
 
MBLTDev15: Egor Tolstoy, Rambler&Co
MBLTDev15: Egor Tolstoy, Rambler&CoMBLTDev15: Egor Tolstoy, Rambler&Co
MBLTDev15: Egor Tolstoy, Rambler&Co
e-Legion
 
MBLTDev15: Alexander Orlov, Postforpost
MBLTDev15: Alexander Orlov, PostforpostMBLTDev15: Alexander Orlov, Postforpost
MBLTDev15: Alexander Orlov, Postforpost
e-Legion
 
MBLTDev15: Artemiy Sobolev, Parallels
MBLTDev15: Artemiy Sobolev, ParallelsMBLTDev15: Artemiy Sobolev, Parallels
MBLTDev15: Artemiy Sobolev, Parallels
e-Legion
 
MBLTDev15: Alexander Dimchenko, DIT
MBLTDev15: Alexander Dimchenko, DITMBLTDev15: Alexander Dimchenko, DIT
MBLTDev15: Alexander Dimchenko, DIT
e-Legion
 
MBLTDev: Evgeny Lisovsky, Litres
MBLTDev: Evgeny Lisovsky, LitresMBLTDev: Evgeny Lisovsky, Litres
MBLTDev: Evgeny Lisovsky, Litres
e-Legion
 
MBLTDev: Alexander Dimchenko, Bright Box
MBLTDev: Alexander Dimchenko, Bright Box MBLTDev: Alexander Dimchenko, Bright Box
MBLTDev: Alexander Dimchenko, Bright Box
e-Legion
 
MBLTDev15: Konstantin Goldshtein, Microsoft
MBLTDev15: Konstantin Goldshtein, MicrosoftMBLTDev15: Konstantin Goldshtein, Microsoft
MBLTDev15: Konstantin Goldshtein, Microsoft
e-Legion
 
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
e-Legion
 

More from e-Legion (20)

MBLT16: Elena Rydkina, Pure
MBLT16: Elena Rydkina, PureMBLT16: Elena Rydkina, Pure
MBLT16: Elena Rydkina, Pure
 
MBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetricaMBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetrica
 
MBLT16: Vincent Wu, Alibaba Mobile
MBLT16: Vincent Wu, Alibaba MobileMBLT16: Vincent Wu, Alibaba Mobile
MBLT16: Vincent Wu, Alibaba Mobile
 
MBLT16: Dmitriy Geranin, Afisha Restorany
MBLT16: Dmitriy Geranin, Afisha RestoranyMBLT16: Dmitriy Geranin, Afisha Restorany
MBLT16: Dmitriy Geranin, Afisha Restorany
 
MBLT16: Marvin Liao, 500Startups
MBLT16: Marvin Liao, 500StartupsMBLT16: Marvin Liao, 500Startups
MBLT16: Marvin Liao, 500Startups
 
MBLT16: Andrey Maslak, Aviasales
MBLT16: Andrey Maslak, AviasalesMBLT16: Andrey Maslak, Aviasales
MBLT16: Andrey Maslak, Aviasales
 
MBLT16: Andrey Bakalenko, Sberbank Online
MBLT16: Andrey Bakalenko, Sberbank OnlineMBLT16: Andrey Bakalenko, Sberbank Online
MBLT16: Andrey Bakalenko, Sberbank Online
 
Rx Java architecture
Rx Java architectureRx Java architecture
Rx Java architecture
 
Rx java
Rx javaRx java
Rx java
 
MBLTDev15: Hector Zarate, Spotify
MBLTDev15: Hector Zarate, SpotifyMBLTDev15: Hector Zarate, Spotify
MBLTDev15: Hector Zarate, Spotify
 
MBLTDev15: Cesar Valiente, Wunderlist
MBLTDev15: Cesar Valiente, WunderlistMBLTDev15: Cesar Valiente, Wunderlist
MBLTDev15: Cesar Valiente, Wunderlist
 
MBLTDev15: Brigit Lyons, Soundcloud
MBLTDev15: Brigit Lyons, SoundcloudMBLTDev15: Brigit Lyons, Soundcloud
MBLTDev15: Brigit Lyons, Soundcloud
 
MBLTDev15: Egor Tolstoy, Rambler&Co
MBLTDev15: Egor Tolstoy, Rambler&CoMBLTDev15: Egor Tolstoy, Rambler&Co
MBLTDev15: Egor Tolstoy, Rambler&Co
 
MBLTDev15: Alexander Orlov, Postforpost
MBLTDev15: Alexander Orlov, PostforpostMBLTDev15: Alexander Orlov, Postforpost
MBLTDev15: Alexander Orlov, Postforpost
 
MBLTDev15: Artemiy Sobolev, Parallels
MBLTDev15: Artemiy Sobolev, ParallelsMBLTDev15: Artemiy Sobolev, Parallels
MBLTDev15: Artemiy Sobolev, Parallels
 
MBLTDev15: Alexander Dimchenko, DIT
MBLTDev15: Alexander Dimchenko, DITMBLTDev15: Alexander Dimchenko, DIT
MBLTDev15: Alexander Dimchenko, DIT
 
MBLTDev: Evgeny Lisovsky, Litres
MBLTDev: Evgeny Lisovsky, LitresMBLTDev: Evgeny Lisovsky, Litres
MBLTDev: Evgeny Lisovsky, Litres
 
MBLTDev: Alexander Dimchenko, Bright Box
MBLTDev: Alexander Dimchenko, Bright Box MBLTDev: Alexander Dimchenko, Bright Box
MBLTDev: Alexander Dimchenko, Bright Box
 
MBLTDev15: Konstantin Goldshtein, Microsoft
MBLTDev15: Konstantin Goldshtein, MicrosoftMBLTDev15: Konstantin Goldshtein, Microsoft
MBLTDev15: Konstantin Goldshtein, Microsoft
 
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
MBLTDev15: Anna Mikhina, Maxim Evdokimov, Tinkoff Bank
 

Recently uploaded

Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - MydbopsScaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Mydbops
 
Password Rotation in 2024 is still Relevant
Password Rotation in 2024 is still RelevantPassword Rotation in 2024 is still Relevant
Password Rotation in 2024 is still Relevant
Bert Blevins
 
What’s New in Teams Calling, Meetings and Devices May 2024
What’s New in Teams Calling, Meetings and Devices May 2024What’s New in Teams Calling, Meetings and Devices May 2024
What’s New in Teams Calling, Meetings and Devices May 2024
Stephanie Beckett
 
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
Bert Blevins
 
Coordinate Systems in FME 101 - Webinar Slides
Coordinate Systems in FME 101 - Webinar SlidesCoordinate Systems in FME 101 - Webinar Slides
Coordinate Systems in FME 101 - Webinar Slides
Safe Software
 
What's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptxWhat's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptx
Stephanie Beckett
 
Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024
BookNet Canada
 
Manual | Product | Research Presentation
Manual | Product | Research PresentationManual | Product | Research Presentation
Manual | Product | Research Presentation
welrejdoall
 
Implementations of Fused Deposition Modeling in real world
Implementations of Fused Deposition Modeling  in real worldImplementations of Fused Deposition Modeling  in real world
Implementations of Fused Deposition Modeling in real world
Emerging Tech
 
20240704 QFM023 Engineering Leadership Reading List June 2024
20240704 QFM023 Engineering Leadership Reading List June 202420240704 QFM023 Engineering Leadership Reading List June 2024
20240704 QFM023 Engineering Leadership Reading List June 2024
Matthew Sinclair
 
20240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 202420240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 2024
Matthew Sinclair
 
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
Erasmo Purificato
 
How RPA Help in the Transportation and Logistics Industry.pptx
How RPA Help in the Transportation and Logistics Industry.pptxHow RPA Help in the Transportation and Logistics Industry.pptx
How RPA Help in the Transportation and Logistics Industry.pptx
SynapseIndia
 
Cookies program to display the information though cookie creation
Cookies program to display the information though cookie creationCookies program to display the information though cookie creation
Cookies program to display the information though cookie creation
shanthidl1
 
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-InTrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc
 
INDIAN AIR FORCE FIGHTER PLANES LIST.pdf
INDIAN AIR FORCE FIGHTER PLANES LIST.pdfINDIAN AIR FORCE FIGHTER PLANES LIST.pdf
INDIAN AIR FORCE FIGHTER PLANES LIST.pdf
jackson110191
 
find out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challengesfind out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challenges
huseindihon
 
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALLBLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
Liveplex
 
The Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU CampusesThe Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU Campuses
Larry Smarr
 
How to Build a Profitable IoT Product.pptx
How to Build a Profitable IoT Product.pptxHow to Build a Profitable IoT Product.pptx
How to Build a Profitable IoT Product.pptx
Adam Dunkels
 

Recently uploaded (20)

Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - MydbopsScaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
 
Password Rotation in 2024 is still Relevant
Password Rotation in 2024 is still RelevantPassword Rotation in 2024 is still Relevant
Password Rotation in 2024 is still Relevant
 
What’s New in Teams Calling, Meetings and Devices May 2024
What’s New in Teams Calling, Meetings and Devices May 2024What’s New in Teams Calling, Meetings and Devices May 2024
What’s New in Teams Calling, Meetings and Devices May 2024
 
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
Understanding Insider Security Threats: Types, Examples, Effects, and Mitigat...
 
Coordinate Systems in FME 101 - Webinar Slides
Coordinate Systems in FME 101 - Webinar SlidesCoordinate Systems in FME 101 - Webinar Slides
Coordinate Systems in FME 101 - Webinar Slides
 
What's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptxWhat's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptx
 
Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024Details of description part II: Describing images in practice - Tech Forum 2024
Details of description part II: Describing images in practice - Tech Forum 2024
 
Manual | Product | Research Presentation
Manual | Product | Research PresentationManual | Product | Research Presentation
Manual | Product | Research Presentation
 
Implementations of Fused Deposition Modeling in real world
Implementations of Fused Deposition Modeling  in real worldImplementations of Fused Deposition Modeling  in real world
Implementations of Fused Deposition Modeling in real world
 
20240704 QFM023 Engineering Leadership Reading List June 2024
20240704 QFM023 Engineering Leadership Reading List June 202420240704 QFM023 Engineering Leadership Reading List June 2024
20240704 QFM023 Engineering Leadership Reading List June 2024
 
20240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 202420240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 2024
 
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
 
How RPA Help in the Transportation and Logistics Industry.pptx
How RPA Help in the Transportation and Logistics Industry.pptxHow RPA Help in the Transportation and Logistics Industry.pptx
How RPA Help in the Transportation and Logistics Industry.pptx
 
Cookies program to display the information though cookie creation
Cookies program to display the information though cookie creationCookies program to display the information though cookie creation
Cookies program to display the information though cookie creation
 
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-InTrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
 
INDIAN AIR FORCE FIGHTER PLANES LIST.pdf
INDIAN AIR FORCE FIGHTER PLANES LIST.pdfINDIAN AIR FORCE FIGHTER PLANES LIST.pdf
INDIAN AIR FORCE FIGHTER PLANES LIST.pdf
 
find out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challengesfind out more about the role of autonomous vehicles in facing global challenges
find out more about the role of autonomous vehicles in facing global challenges
 
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALLBLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
 
The Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU CampusesThe Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU Campuses
 
How to Build a Profitable IoT Product.pptx
How to Build a Profitable IoT Product.pptxHow to Build a Profitable IoT Product.pptx
How to Build a Profitable IoT Product.pptx
 

Юрий Буянов «Squeryl — ORM с человеческим лицом»

  • 1. SQUERYL ORM ! "#$%&#"#!'() $(*%) !"#$ %&'()* e-Legion Ltd., 2011 1
  • 2. ORM Query q = entityManager.createQuery( "SELECT AVG(g.scoreInPercentage) FROM Grades g where g.subjectId = :subjectId" ); q.setParameter(1, mathId); Number avg = (Number) q.getSingleResult(); avg.floatValue(); 2
  • 3. ORM Query q = entityManager.createQuery( "SELECT AVG(g.scoreInPercentage) FROM Grades g where g.subjectId = :subjectId" ); q.setParameter(1, mathId); Number avg = (Number) q.getSingleResult(); avg.floatValue(); 3
  • 4. TYPE SAFE ORM (JPA 2) EntityManager em = ... CriteriaBuilder qb = em.getCriteriaBuilder(); CriteriaQuery<Person> c = qb.createQuery(Person.class); Root<Person> p = c.from(Person.class); Predicate condition = qb.gt(p.get(Person_.age), 20); c.where(condition); TypedQuery<Person> q = em.createQuery(c); List<Person> olderThan20s = q.getResultList(); 4
  • 5. SQUERYL ORM SQL-+%,%-./0 DSL ,$1 23+4%!%& 564%731 6(+(23*(1 8#.9:# '%,3, -%$9:# ,#$3 5
  • 6. TYPE SAFE ORM (JPA 2) EntityManager em = ... CriteriaBuilder qb = em.getCriteriaBuilder(); CriteriaQuery<Person> c = qb.createQuery(Person.class); Root<Person> p = c.from(Person.class); Predicate condition = qb.gt(p.get(Person_.age), 20); c.where(condition); TypedQuery<Person> q = em.createQuery(c); List<Person> olderThan20s = q.getResultList(); 6
  • 7. SQUERYL val olderThan20s = people.where(_.age gt 20) 7
  • 8. SQUERYL val olderThan20s = from (people) ( p => select (p) where (p.age gt 20) ) 8
  • 9. !"#!$% 9
  • 11. &#&'&()&*('&+ import org.squeryl.SessionFactory import java.sql.DriverManager._ Class.forName("org.h2.Driver") SessionFactory.concreteFactory = Some { ()=> Session.create( getConnection("jdbc:h2:mem:"), new H2Adapter ) } “>3(&.31” ?3-4('3 ;!+%$92@06# ConnectionPool (DBCP, BoneCP) 11
  • 12. ,-(#*(.'&& transaction { ... } &!#7,3 .3"(.3#6 .%&@A 643.23'*(A ( '%))(6(6 & '%.*# inTransaction { ... } .("#7% .# ,#$3#6, #!$( (!+%$92@#6!1 &.@64( ,4@7%0 643.23'*(( 12
  • 13. "/01( (PrimitiveTypeMode) case class User( id: Long = 0, @Column(length = 256) email: String, name: String, rating: Int = 0, ) extends KeyedEntity[Long] Plain Old Scala Object ()%B.% case) 563.,346./# 6(+/ ,$1 +%$#0 C%$1 )%7@6 -/69 var ($( val 8%B.% @'32369 432)#4, ()1 !6%$-*3 & -32# >3!$#,%&369 KeyedEntity .# %-1236#$9.% 13
  • 14. "/01( (CustomTypeMode) 5$%B./# '$3!!/ ,$1 +%$#0 8%7@6 &'$A"369 & !#-1 &3$(,3*(A, etc 14
  • 15. "/01( object MySchema extends Schema { val users = table[User] on(users) { u => declare( u.id is (autoIncremented), u.email is (unique) ) } } transaction { MySchema.create } <3-$(*/ D743.("#.(1 5&12( 15
  • 16. INSERT import MySchema._ val vasya = users.insert(new User("vasya@example.com", "Vasya")) users.insert(List(user1, user2)) 16
  • 17. SELECT from(users) ( u => select(u) where(u.name like “%Vasya%”) ) from(users) ( u => select(u.id, u.email) orderBy(u.id asc) ) users.where( _.rating.~ >= 0) //Option[User] users.lookup(1) 17
  • 18. FULL UPDATE //используем copy //поскольку все поля immutable val updatedVasya = vasya.copy(rating = vasya.rating + 1) users.update(updatedVasya) 18
  • 19. PARTIAL UPDATE val updated = update(users) ( u => set(u.rating := u.rating.~ + 1) where(u.name like "%Vasya%") ) println("%s Vasyas rated" format updated) ~. "6%-/ .# +@6369 Int.+ ( SQL ‘+’ &)#!6% ~. )%B.% (!+%$92%&369 u.rating plus 1 19
  • 20. DELETE users.delete(1) val deleted = users.deleteWhere( u => u.rating.~ < 0 ) println("%s users deleted" format deleted) 20
  • 22. 2$&3(01"+ 2()450 5%!63&./# 23+4%!/ Group By ( 374#73*(1 Joins Relations 22
  • 23. COMPOSITE SELECT val rated = users.where( _.rating.~ >= 0) val vasyasRated = from(rated) ( u => select(u) where(u.name like “%Vasya%”) ) 23
  • 24. NESTED SELECT val rated = users.where( _.rating.~ >= 0) val vasyasRated = from(rated) ( u => select(u) where(u.id in from(rated) (r => select(r.id)) ) ) 24
  • 25. 067 SELECT C%!643.(".31 &/-%4'3 from(users) ( u => ... ).page(offset, pageLength) Distinct from(users) ( u => ... ).distinct ForUpdate from(users) ( u => ... ).forUpdate 25
  • 26. (3-03('&+ val ratingDistribution = from(users) ( u => groupBy(u.rating) compute(count(u.id)) ) ratingDistribution foreach { r=> println(“%s: %s” format (r.key, r.measures)) } 26
  • 27. JOIN from(users, posts) ( (u,p) => select(u.name, p) where(u.id === p.userId) ) from(users, avatars.leftOuter) ( (u,a) => select(u, a.url) on(u.id === a.map(_.userId)) ) 27
  • 28. RELATIONS object MySchema extends Schema { val users = table[User] val posts = table[Post] val userPosts = oneToManyRelation(users, posts) via ( (u,p) => u.id === p.userId ) } 28
  • 29. (STATELESS) RELATIONS case class User (....) extends KeyedEntity[Long] { //OneToMany[Post] < Query lazy val posts = MySchema.userPosts.left(this) } case class User (....) extends KeyedEntity[Long] { //ManyToOne[User] < Query lazy val user = MySchema.userPosts.right(this) } val user = users.lookup(1).getOrElse(error(“user not found”)) for (p <- user.posts) println(p.title) 29
  • 30. STATEFUL RELATIONS case class User (....) extends KeyedEntity[Long] { //StatefulOneToMany[Post] < Iterable[Post] lazy val posts = MySchema.userPosts.leftStateful(this) } case User (....) extends KeyedEntity[Long] { //StetefulManyToOne[User] lazy val user = MySchema.userPosts.rightStateful(this) } 30
  • 32. #02!",(,.& Compile-time Voodoo createEqualityExpressionWithLastAccessedFieldReferenceAndConstant >#6 UNION 5$(:'%) @)./0 DSL where ( u.name === stringOpt.? ) //работает where ( u.flag === boolOpt.? ) //не работает not(not(u.flag)).inhibitWhen(boolOpt != Some(true)) and not(u.flag).inhibitWhen(boolOpt != Some(false)) 32
  • 33. $!8-!"%? 33