-
Notifications
You must be signed in to change notification settings - Fork 30
/
database.html
83 lines (75 loc) · 3.76 KB
/
database.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<lift:surround with="default" at="content">
<p><i>Lift</i> allows you to create model objects that
map themselves to and from the database. Here's an example of
a "User" model object.</p>
<p>
<div class="lift:Database?form=post">
There are <database:count ></database:count> records in the "Person" table. The first one is <database:first></database:first>.
Press <database:submit></database:submit> to create more records.
</div>
</p>
<style type="text/css">
/* <![CDATA[ */
.comment {
/* font-lock-comment-face */
color: #b22222;
}
.comment-delimiter {
/* font-lock-comment-delimiter-face */
color: #b22222;
}
.function-name {
/* font-lock-function-name-face */
color: #0000ff;
}
.keyword {
/* font-lock-keyword-face */
color: #a020f0;
}
.string {
/* font-lock-string-face */
color: #bc8f8f;
}
.type {
/* font-lock-type-face */
color: #228b22;
}
.variable-name {
/* font-lock-variable-name-face */
color: #b8860b;
}
/* ]]> */
</style>
<pre>
<span class="comment-delimiter">/**</span><span class="comment">
* The singleton that has methods for accessing the database
*/</span>
<span class="keyword">object</span> <span class="variable-name">User</span> <span class="keyword">extends</span> <span class="type">User</span> <span class="keyword">with</span> <span class="type">KeyedMetaMapper</span>[<span class="type">Long</span>, <span class="type">User</span>] {
<span class="keyword">override</span> <span class="keyword">def</span> <span class="function-name">dbTableName</span> = <span class="string">"users"</span> <span class="comment-delimiter">// </span><span class="comment">define the DB table name
</span>
<span class="comment-delimiter">// </span><span class="comment">define the order fields will appear in forms and output
</span> <span class="keyword">override</span> <span class="keyword">lazy</span> <span class="keyword">val</span> <span class="variable-name">fieldOrder</span> = List(id, firstName, lastName,
email, password, textArea)
}
<span class="comment-delimiter">/**</span><span class="comment">
* An O-R mapped "User" class that includes first name, last name,
* password and we add a "Personal Essay" to it
*/</span>
<span class="keyword">class</span> <span class="type">User</span> <span class="keyword">extends</span> <span class="type">ProtoUser</span>[<span class="type">User</span>] {
<span class="keyword">def</span> <span class="function-name">getSingleton</span> = User
<span class="comment-delimiter">// </span><span class="comment">define an additional field for a personal essay
</span> <span class="keyword">object</span> <span class="variable-name">textArea</span> <span class="keyword">extends</span> <span class="type">MappedTextarea</span>(<span class="keyword">this</span>, 2048) {
<span class="keyword">override</span> <span class="keyword">def</span> <span class="function-name">textareaRows</span> = 10
<span class="keyword">override</span> <span class="keyword">def</span> <span class="function-name">textareaCols</span> = 50
<span class="keyword">override</span> <span class="keyword">def</span> <span class="function-name">displayName</span> = <span class="string">"Personal Essay"</span>
}
}
</pre>
<p>For this little bit of work, we get a complete user with
first name, last name, password, email, and a personal essay.
Each of the fields knows how to validate itself. The
User (and any other "Mapped" class) knows how to Create,
Update, Read, and Delete itself from the database. It knows
how to convert itself to a string, to XML, and even generate
HTML forms for itself.</p>
</lift:surround>