Welcome to the wonderful world of ORM.
DataFaucet is a simple system for managing database access, making your ColdFusion applications:
- More Versatile
- Easier to Read, Write and Maintain
- More Secure - (by helping to prevent SQL injection)
- Less Coupled (including platform independence)
By using this library I was able to eliminate about 600 lines of code from Ray Camden's Galleon Forums application and at the same time add features and flexibility.
NOTE: Documentation for DataFaucet assumes that you have a basic understanding of Adobe ColdFusion and CFCs.
What DataFaucet is NOT
DataFaucet is not
- Expensive - DataFaucet is distributed with an OpenBSD style open-source license.
- A Code Generator - DataFaucet creates and executes SQL at run-time.
- A License to write sloppy code - it won't scrub user input to prevent XSS attacks for you.
What is ORM?
Object Relational Modeling (ORM) simply put is a way of standardizing the manner in which you store data in a relational database and how the objects in your application talk to databases. Using an ORM eliminates many of the routine or "boring" aspects of application development so that you can focus on more important things like your business model / logic and user interaction.
Can you give me an example?
I certainly can. Turn this SQL-Server-specific code:
<cfparam name="form.productID" default="" /> <cfquery datasource="#MyDSN#" username="#dbUsr#" password="#dbPwd#"> <!--- check to see if this is a new product ---> <cfif len(trim(form.productID))> <!--- product already exists - perform an update ---> UPDATE tblProduct SET [NAME] = <cfqueryparam value="#form.name#" cfsqltype="cf_sql_varchar" />, description = <cfqueryparam value="#form.description#" cfsqltype="cf_sql_varchar" />, price = <cfqueryparam value="#form.price#" cfsqltype="cf_sql_real" /> WHERE productid = <cfqueryparam value="#form.productID#" cfsqltype="cf_sql_varchar" /> <cfelse> <!--- product is new - give it an id and insert it ---> <cfset form.productID = CreateUUID() /> INSERT INTO tblProduct (PRODUCTID, [NAME], DESCRIPTION, PRICE) VALUES ( <cfqueryparam value="#form.productID#" cfsqltype="cf_sql_varchar" />, <cfqueryparam value="#form.name#" cfsqltype="cf_sql_varchar" />, <cfqueryparam value="#form.description#" cfsqltype="cf_sql_varchar" />, <cfqueryparam value="#form.price#" cfsqltype="cf_sql_real" /> ) </cfif> </cfquery>
into this platform-independent code for ANY database:
<cfparam name="form.productID" default="" /> <!--- get the datasource ---> <cfset ds = request.DataFaucet.getDatasource() /> <!--- get a product record ---> <cfset Record = ds.getActiveRecord(className="ar.product").init(form.productid) /> <!--- save product data to the database ---> <cfset Record.update(form) />
For an example of what you can do with DataFaucet in an afternoon, see the Waterlog sample application.
For a more traditional ORM example, try the Maze Game (some assembly required).
If you need help getting started or additional resources beyond this documentation, join our discussion group.
- Samuel Isaac Dealey (lead)
- Dan Lancelot
- Ryan McIlmoyl
- Rob Parkhill
- Gabriel Roffman
- Kai Tischler
- Sana Ullah