summaryrefslogtreecommitdiff
path: root/demos/quickstart/protected/pages/Database/SqlMap.page
diff options
context:
space:
mode:
Diffstat (limited to 'demos/quickstart/protected/pages/Database/SqlMap.page')
-rw-r--r--demos/quickstart/protected/pages/Database/SqlMap.page86
1 files changed, 43 insertions, 43 deletions
diff --git a/demos/quickstart/protected/pages/Database/SqlMap.page b/demos/quickstart/protected/pages/Database/SqlMap.page
index 2e3aed16..40e8ba20 100644
--- a/demos/quickstart/protected/pages/Database/SqlMap.page
+++ b/demos/quickstart/protected/pages/Database/SqlMap.page
@@ -3,7 +3,7 @@
<h1 id="140062">Data Mapper</h1>
<com:SinceVersion Version="3.1a" />
-<p id="700505" class="block-content">Data Mappers moves data between objects and a database while keeping them
+<p id="700505" class="block-content">Data Mappers moves data between objects and a database while keeping them
independent of each other and the mapper itself. If you started with
<a href="?page=Database.ActiveRecord">Active Records</a>, you may eventually
faced with more complex business
@@ -13,11 +13,11 @@
that is, the object schema and the relational schema don't match up.
</p>
-<p id="700506" class="block-content">The Data Mapper separates the in-memory objects from the database. Its responsibility
- is to transfer data between the two and also to isolate them from each other.
- With Data Mapper the in-memory objects needn't know even that there's a database
+<p id="700506" class="block-content">The Data Mapper separates the in-memory objects from the database. Its responsibility
+ is to transfer data between the two and also to isolate them from each other.
+ With Data Mapper the in-memory objects needn't know even that there's a database
present; they need no SQL interface code, and certainly no knowledge of the
- database schema. (The database schema is always ignorant of the objects that use it.)
+ database schema. (The database schema is always ignorant of the objects that use it.)
</p>
<h2 id="140063">When to Use It</h2>
@@ -28,46 +28,46 @@
what the database structure is, because all the correspondence is done by the mappers.
</p>
-<p id="700508" class="block-content">This helps you in the code because you can understand and work with the domain objects
- without having to understand how they're stored in the database. You can modify the
+<p id="700508" class="block-content">This helps you in the code because you can understand and work with the domain objects
+ without having to understand how they're stored in the database. You can modify the
business models or the database without having to alter either. With complicated
mappings, particularly those involving <b>existing databases</b>, this is very valuable.
</p>
-<p id="700509" class="block-content">The price, of course, is the extra layer that you don't get with
- <a href="?page=Database.ActiveRecord">Active Record</a>,
- so the test for using these patterns is the complexity of the business logic.
- If you have fairly simple business logic, an <a href="?page=Database.ActiveRecord">Active Record</a>
- will probably work.
+<p id="700509" class="block-content">The price, of course, is the extra layer that you don't get with
+ <a href="?page=Database.ActiveRecord">Active Record</a>,
+ so the test for using these patterns is the complexity of the business logic.
+ If you have fairly simple business logic, an <a href="?page=Database.ActiveRecord">Active Record</a>
+ will probably work.
For more complicated logic a Data Mapper may be more suitable.
</p>
<h2 id="140064">SqlMap Data Mapper</h2>
-<p id="700510" class="block-content">The SqlMap DataMapper framework makes it easier to use a database with a PHP application.
- SqlMap DataMapper couples objects with stored procedures or SQL statements using
- a XML descriptor. Simplicity is the biggest advantage of the SqlMap DataMapper over
- object relational mapping tools. To use SqlMap DataMapper you rely on your own objects,
- XML, and SQL. There is little to learn that you don't already know.
+<p id="700510" class="block-content">The SqlMap DataMapper framework makes it easier to use a database with a PHP application.
+ SqlMap DataMapper couples objects with stored procedures or SQL statements using
+ a XML descriptor. Simplicity is the biggest advantage of the SqlMap DataMapper over
+ object relational mapping tools. To use SqlMap DataMapper you rely on your own objects,
+ XML, and SQL. There is little to learn that you don't already know.
With SqlMap DataMapper you have the full power of both SQL and stored procedures at
your fingertip
</p>
<p id="700511" class="block-content">
<img src=<%~ diagram.png %> alt="SqlMap Data Mapper Overview" id="fig:sqlmap.png" class="figure"/>
-
- Here's a high level description of the work flow illustrated in the figure abov.
+
+ Here's a high level description of the work flow illustrated in the figure above.
Provide a parameter, either as an object or a primitive type. The parameter can be
- used to set runtime values in your SQL statement or stored procedure. If a runtime value
+ used to set runtime values in your SQL statement or stored procedure. If a runtime value
is not needed, the parameter can be omitted.
</p>
-<p id="700512" class="block-content">Execute the mapping by passing the parameter and the name you gave the statement or
+<p id="700512" class="block-content">Execute the mapping by passing the parameter and the name you gave the statement or
procedure in your XML descriptor. This step is where the magic happens. The framework
- will prepare the SQL statement or stored procedure, set any runtime values using your
+ will prepare the SQL statement or stored procedure, set any runtime values using your
parameter, execute the procedure or statement, and return the result.
</p>
<p id="700513" class="block-content">In the case of an update, the number of rows affected is returned. In the case of a
- query, a single object, or a collection of objects is returned. Like the parameter,
+ query, a single object, or a collection of objects is returned. Like the parameter,
the result object, or collection of objects, can be a plain-old object or a primitive PHP type.
</p>
@@ -82,8 +82,8 @@ $dsn = 'pgsql:host=localhost;dbname=test'; //Postgres SQL
$conn = new TDbConnection($dsn, 'dbuser','dbpass');
$manager = new TSqlMapManager($conn);
$manager->configureXml('my-sqlmap.xml');
-$sqlmap = $manager->getSqlMapGateway();
-</com:TTextHighlighter>
+$sqlmap = $manager->getSqlMapGateway();
+</com:TTextHighlighter>
</p>
<p id="700515" class="block-content">
@@ -96,31 +96,31 @@ $sqlmap = $manager->getSqlMapGateway();
<p id="700516" class="block-content">
SqlMap database connection can also be configured using a <tt>&lt;module&gt;</tt>
- tag in the <a href="?page=Configurations.AppConfig">application.xml</a>
+ tag in the <a href="?page=Configurations.AppConfig">application.xml</a>
or <a href="?page=Configurations.PageConfig">config.xml</a> as follows.
<com:TTextHighlighter Language="xml" CssClass="source block-content" id="code_700167">
<modules>
- <module id="my-sqlmap" class="System.Data.SqlMap.TSqlMapConfig"
+ <module id="my-sqlmap" class="System.Data.SqlMap.TSqlMapConfig"
EnableCache="true" ConfigFile="my-sqlmap.xml" >
<database ConnectionString="pgsql:host=localhost;dbname=test"
Username="dbuser" Password="dbpass" />
</module>
-</modules>
-</com:TTextHighlighter>
+</modules>
+</com:TTextHighlighter>
</p>
<p id="700517" class="block-content">
The <tt>ConfigFile</tt> attribute should point to a SqlMap configuration file
- (to be detailed later) either using absolute path, relative path or the
+ (to be detailed later) either using absolute path, relative path or the
Prado's namespace dot notation path (must omit the ".xml" extension).
-
+
<div class="tip"><b class="note">Tip:</b>
The <tt>EnableCache</tt> attribute when set to "true" will cache the
parsed configuration. You must clear or disable the cache if you
- make chanages your configuration file.
+ make changes to your configuration file.
A <a href="?page=Advanced.Performance#6402">cache
module</a> must also be defined for the cache to function.
- </div>
+ </div>
</p>
<p id="700518" class="block-content">To obtain the SqlMap gateway interface from the &lt;module&gt; configuration, simply
@@ -140,8 +140,8 @@ class MyPage extends TPage
<h2 id="140066">A quick example</h2>
<p id="700519" class="block-content">Let us
- consider the following "users" table that contains two columns named "username" and "email",
- where "username" is also the primary key.
+ consider the following "users" table that contains two columns named "username" and "email",
+ where "username" is also the primary key.
<com:TTextHighlighter Language="sql" CssClass="source block-content" id="code_700169">
CREATE TABLE users
(
@@ -178,7 +178,7 @@ class User
attribute will be used as the identifier for the query. The <tt>resultClass</tt>
attribute value is the name of the class the the objects to be returned.
We can now query the objects as follows:
-
+
<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_700172">
//assume that $sqlmap is an TSqlMapGateway instance
$userList = $sqlmap->queryForList("SelectUsers");
@@ -189,7 +189,7 @@ $user = $sqlmap->queryForObject("SelectUsers");
</p>
<p id="700523" class="block-content">The above example shows demonstrates only a fraction of the capabilities
- of the SqlMap Data Mapper. Further details can be found in the
+ of the SqlMap Data Mapper. Further details can be found in the
<a href="http://www.pradosoft.com/demo/sqlamp/">SqlMap Manual</a>.
</p>
@@ -197,12 +197,12 @@ $user = $sqlmap->queryForObject("SelectUsers");
<p id="700524" class="block-content">The above example may seem trival and it also seems that there is
alot work just to retrieve some data. However, notice that the <tt>User</tt>
class is totally unware of been stored in the database, and the database is
- unware of the <tt>User</tt> class.
+ unware of the <tt>User</tt> class.
</p>
<p id="700525" class="block-content">
One of advantages of SqlMap is the
ability to map complex object relationship, collections from an existing
- database. On the other hand, <a href="?page=Database.ActiveRecord">Active Record</a>
+ database. On the other hand, <a href="?page=Database.ActiveRecord">Active Record</a>
provide a very simple way
to interact with the underlying database but unable to do more complicated
relationship or collections. A good compromise is to use SqlMap to retrieve
@@ -214,11 +214,11 @@ $user = $sqlmap->queryForObject("SelectUsers");
<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_700173">
class UserRecord extends TActiveRecord
{
- const TABLE='users'; //table name
+ const TABLE='users'; //table name
public $username; //the column named "username" in the "users" table
public $email;
-
+
/**
* @return TActiveRecord active record finder instance
*/
@@ -245,7 +245,7 @@ class UserRecord extends TActiveRecord
<p id="700528" class="block-content">The PHP code for retrieving the users remains the same, but SqlMap
returns Active Records instead, and we can take advantage of the Active Record methods.
-
+
<com:TTextHighlighter Language="php" CssClass="source block-content" id="code_700175">
//assume that $sqlmap is an TSqlMapGateway instance
$user = $sqlmap->queryForObject("SelectUsers");
@@ -259,7 +259,7 @@ $user->save(); //save it using Active Record
<ul id="u1" class="block-content">
<li>Fowler et. al. <i>Patterns of Enterprise Application Architecture</i>,
Addison Wesley, 2002.</li>
- <li>iBatis Team. <i>iBatis Data Mapper</i>,
+ <li>iBatis Team. <i>iBatis Data Mapper</i>,
<a href="http://ibatis.apache.org">http://ibatis.apache.org</a>.</li>
</ul>