{"id":85,"date":"2015-10-23T02:52:41","date_gmt":"2015-10-23T02:52:41","guid":{"rendered":"https:\/\/boochlin.com\/?p=85"},"modified":"2026-09-16T09:54:15","modified_gmt":"2026-09-16T09:54:15","slug":"android-orm-library-green-dao-introduction","status":"publish","type":"post","link":"https:\/\/boochlin.com\/?p=85","title":{"rendered":"Android ORM Library- Green DAO\uff08\u4e00\uff09 introduction"},"content":{"rendered":"<p>** <a href=\"\/\/www.slideshare.net\/secret\/rT2IItArugcUc9\">GreenDao Introduction<\/a> **<\/p>\n<p>\u300egreenDAO is an open source project to help Android developers working with data stored in SQLite. \u300f<\/p>\n<p>\u524d\u8a00\u5f88\u7c21\u55ae\uff0c\u5c31\u662f\u6211\u53ef\u4ee5\u5e6b\u52a9\u4f60\u5b58\u53d6SQLite<\/p>\n<p>\u4f46\u662f\u4f60\u53ef\u80fd\u6703\u60f3\uff0c\u9023SQLite\u90fd\u4e0d\u6703 \u9084\u4f86\u8ddf\u4eba\u5bb6\u5b78\u5beb\u5565Android\uff0c\u9000\u4e0b<\/p>\n<p>but\u8981\u8a18\u4f4f\u6703\u5beb\u8ddf\u5beb\u7684\u597d\uff0c\u9019\u662f\u5169\u78bc\u5b50\u4e8b\u60c5<\/p>\n<p>\u800c\u4e14\u8eab\u70baOOP\u7684\u652f\u6301\u8005\uff0c\u61c9\u8a72\u90fd\u4e0d\u662f\u6703\u559c\u6b61SQLite\u00a0script and Cusor \u7684\u786c\u6f22<\/p>\n<p>\u5ee2\u8a71\u7d50\u675f\uff0c\u5148\u5f37\u8abf\u5728\u524d\uff0c\u9019\u662f\u4e00\u7bc7\u79d1\u666eORM and GreenDao\u00a0\u7684\u4ecb\u7d39\u6587\uff0c\u4e0d\u6703\u6709\u592a\u9ad8\u6df1\u7684\u6771\u897f<\/p>\n<p>\u6709\u8208\u8da3\u7684\u8a71\u63a5\u4e0b\u4f86\u5c31\u6162\u6162\u4e00\u9801\u4e00\u9801\u8b1b\u89e3<\/p>\n<h3>page 1-2<\/h3>\n<h4>Outline<\/h4>\n<p>\u9019\u6b21\u8b1b\u89e3\u5206\u70ba\u4e94\u500b\u6bb5\u843d<\/p>\n<ol>\n<li>Why greendao<\/li>\n<\/ol>\n<p>\u6700\u6839\u672c\u7684\u539f\u56e0\u662f\u5565\uff1f\u4e0d\u76f4\u63a5\u7528Android \u7684sqlite<\/p>\n<ol start=\"2\">\n<li>\n<p>Feature \u2014-\u00a0\u6709\u5565\u82b1\u62db\uff08\u52a0\u901f\u958b\u767c\uff09<\/p>\n<\/li>\n<li>\n<p>Performance \u2014\u00a0\u901f\u5ea6\uff08\u57f7\u884c\u901f\u5ea6\uff09<\/p>\n<\/li>\n<li>\n<p>How to getting start<\/p>\n<\/li>\n<li>\n<p>How to use<\/p>\n<\/li>\n<\/ol>\n<p>\u958b\u59cb\u73a9\u5427<\/p>\n<h3>page 3<\/h3>\n<h4>\u7a76\u7adf\u70ba\u4f55\u8981\u4f7f\u7528green dao?<\/h4>\n<p>\u9019\u5c31\u8981\u56de\u5230\u958b\u767cAndroid database \u7684\u6839\u672c\u4e0a\uff0c\u6709\u4e9b\u6771\u897f\u662f\u55ae\u7d14Android \u958b\u767c\u8005\u4e0d\u559c\u6b61\u7684\u4e8b\u60c5<\/p>\n<p>\u5c31\u50cf\u662f\u5beb Content resolver and SQLite\u00a0script \u9019\u7a2e\u4ee4\u4eba\u89ba\u7684\u6e3e\u8eab\u4e0d\u5c0d\u52c1\u7684\u6771\u897f\uff0c\u4e00\u6d41\u958b\u767c\u611f\u6574\u500b\u4e0d\u898b<\/p>\n<p>\u518d\u4ed4\u7d30\u60f3\u60f3\u539f\u56e0\uff0c\u5c31\u662f\u9019\u5e7e\u9ede\u4e0d\u723d<\/p>\n<ol>\n<li>\n<p>DB\u00a0\u548c Curosr \u4e00\u9ede\u90fd\u4e0dObject-Oriented Programming, OOP\uff0c\u7269\u4ef6\u5c0e\u5411\u7a0b\u5f0f\u8a2d\u8a08\u3002<\/p>\n<\/li>\n<li>\n<p>\u5bebSQLite script \u4e00\u9ede\u90fd\u4e0d\u9ad8\u968e\uff0c\u611f\u89ba\u5c31\u662f\u7d44\u53e5\u5b50\u800c\u5df2<\/p>\n<\/li>\n<li>\n<p>\u4e0d\u9ad8\u968e\u5c31\u7b97\u4e86\uff0c\u8001\u662f\u5728select * \u9019\u7a2e\u5dee\u4e0d\u591a\u7684\u53e5\u5b50<\/p>\n<\/li>\n<li>\n<p>\u5176\u5be6\u6211\u4e0d\u77e5\u9053\u539f\u4f86\u7d44SQLite script \u88e1\u9762\u4e0d\u80fd\u7528 \u300e||\u300f\u9019\u7a2e\u4e0acs101\u5c31\u8a72\u77e5\u9053\u7684\u6771\u897f<\/p>\n<\/li>\n<li>\n<p>\u597d\u5566\uff0c\u6211\u627f\u8a8d\u6211\u8d85\u5f31\u7684<\/p>\n<\/li>\n<\/ol>\n<p>\u70ba\u4f55\u6211\u8981\u82b1\u90a3\u67d0\u591a\u6642\u9593\u53bb\u4ecb\u7d39\u4e00\u5957\u65b0\u7684lib\uff0c\u7c21\u55ae\u4f86\u8aaa\u5c31\u662fteam\u88e1\u9762\u7684\u5c0f\u5925\u4f34(\u6211)\u9700\u8981\u6559\u80b2<\/p>\n<p>\u00a0<\/p>\n<h3>page 4<\/h3>\n<h4>It is popular?<\/h4>\n<p>\u597d\u4e0d\u597d\u7528\u4e0d\u80fd\u53ea\u807d\u6211\u8aaa\u4e4b\u5176\u5be6\u4ed6\u5f88\u6d41\u884c<\/p>\n<p>\u81f3\u5c11pinterest \u7e3d\u807d\u904e\u4e86\u5427<\/p>\n<h3>page 5<\/h3>\n<h4>Features<\/h4>\n<p><strong>1. \u5feb<\/strong><\/p>\n<p><strong>2. ORM \uff08Object Relational Mapping\uff0c\u7c21\u7a31ORM\uff0c\u6216O\/RM\uff0c\u6216O\/R mapping\uff09<\/strong><\/p>\n<p>\u7269\u4ef6\u5c0e\u5411\u662f\u5f9e\u8edf\u9ad4\u5de5\u7a0b\u57fa\u672c\u539f\u5247\uff08\u5982\u8026\u5408\u3001\u805a\u5408\u3001\u5c01\u88dd\uff09\u7684\u57fa\u790e\u4e0a\u767c\u5c55\u8d77\u4f86\u7684\uff0c\u800c\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\u5247\u662f\u5f9e\u6578\u5b78\u7406\u8ad6\u767c\u5c55\u800c\u4f86\u7684\uff0c\u5169\u5957\u7406\u8ad6\u5b58\u5728\u986f\u8457\u7684\u5340\u5225\u3002\u70ba\u4e86\u89e3\u6c7a\u9019\u500b\u4e0d\u5339\u914d\u7684\u73fe\u8c61\uff0c\u7269\u4ef6\u95dc\u806f\u5c0d\u6620\u6280\u8853\u61c9\u904b\u800c\u751f\u3002\uff08from wiki\uff09<\/p>\n<p><strong>2.1 Code generate<\/strong><\/p>\n<p>\u5e6b\u4f60\u641e\u5b9adirty code\u7684\u90e8\u4efd\uff0c\u5c31\u662f\u4ee5\u4e0b\u5e7e\u500btopic<\/p>\n<p><strong>2.2 Read and write object.<\/strong><\/p>\n<p>ORM\u6700\u5927\u76ee\u7684\u5c31\u662f\u964d\u4f4e\u958b\u767c\u4e0a\u7269\u4ef6\u8207\u8cc7\u6599\u5eab\u7684\u4e0d\u6279\u914d\u554f\u984c\uff0c\u5c0d\u65bc\u524d\u7aef\u5de5\u7a0b\u5e2b\u4f86\u8aaa\u5247\u662f\u5e0c\u671b\u8f38\u5165\u548c\u8f38\u51fa\u90fd\u53ea\u662f\u500b\u7269\u4ef6\uff0c\u6700\u597d\u80fd\u53ea\u5229\u7528\u7269\u4ef6\u5c64\u7d1a\u5c31\u5b8c\u6210\u6240\u6709\u5c0ddb\u7684\u8655\u7406<\/p>\n<p>\u800c\u5728\u958b\u767c\u4e0a\u6700\u5e38\u898b\u7684\u7b2c\u4e00\u6b65\u5c31\u662f\u628a\u6bcf\u4e00\u5217\u8cc7\u6599\u8996\u70ba\u4e00\u500b\u7269\u4ef6\uff0c\u5c07column\u7684\u8cc7\u6599\u4e00\u500b\u4e00\u500b\u5c0d\u61c9\u7684\u585e\u9032\u7269\u4ef6\uff0c\u4e5f\u5c31\u662f\u6700\u5e38\u898b\u7684 <strong>setter and getter<\/strong><\/p>\n<p>example:<\/p>\n<pre><code class=\"hljs language-plaintext\">Car car = new Car();\ncar.setHeight(100);  car.getHeight()\ncar.setHeight(100);  car.getHeight()<\/code><\/pre>\n<p>\u9019\u901a\u5e38\u5c31\u662f\u4e00\u6bb5dirty code\uff0c\u7562\u7adf\u6709\u5e7e\u9805\u53c3\u6578\u5c31\u8981\u5beb\u5e7e\u500b setter and getter<\/p>\n<p><strong>2.3 Create table done for you<\/strong><\/p>\n<p>\u5728Android SQLite\u00a0\u7684\u8a9e\u6cd5\u4e2d\u5275\u9020 table \u662f\u975e\u5e38\u56fa\u5b9a\u7684\u5beb\u6cd5<\/p>\n<p>\u56e0\u6b64\u9806\u4fbf\u5e6b\u5fd9generate \u51fa\u4f86<\/p>\n<p>example:<\/p>\n<pre><code class=\"hljs language-sql\">db.execSQL(&quot;CREATE TABLE &quot; <span class=\"hljs-operator\">+<\/span> <span class=\"hljs-keyword\">constraint<\/span> <span class=\"hljs-operator\">+<\/span> &quot;&#x27;LeftPage&#x27; (&quot; <span class=\"hljs-operator\">+<\/span> <span class=\"hljs-operator\">\/<\/span><span class=\"hljs-operator\">\/<\/span>\n                &quot;&#x27;DataID&#x27; INTEGER PRIMARY KEY ,&quot; <span class=\"hljs-operator\">+<\/span> <span class=\"hljs-operator\">\/<\/span><span class=\"hljs-operator\">\/<\/span> <span class=\"hljs-number\">0<\/span>: DataID\n                &quot;&#x27;Category&#x27; TEXT,&quot; <span class=\"hljs-operator\">+<\/span> <span class=\"hljs-operator\">\/<\/span><span class=\"hljs-operator\">\/<\/span> <span class=\"hljs-number\">1<\/span>: Category\n                &quot;&#x27;Provider&#x27; TEXT,&quot; <span class=\"hljs-operator\">+<\/span> <span class=\"hljs-operator\">\/<\/span><span class=\"hljs-operator\">\/<\/span> <span class=\"hljs-number\">2<\/span>: Provider);<\/code><\/pre>\n<p><strong>2.4 Experessing queries<\/strong><\/p>\n<p>\u57282.2\u7684\u4ecb\u7d39\u4e2d\u63d0\u5230\uff0c\u5e0c\u671b\u6240\u6709\u5c0d\u8655db\u7684\u8655\u7406\u90fd\u80fd\u4ee5\u7269\u4ef6\u65b9\u5f0f\u4f86\u5c0d\u61c9<\/p>\n<p>\u9019\u6700\u5927\u7684\u597d\u8655\u5c31\u662f\u53ef\u4ee5\u66f4\u5bb9\u6613\u7684\u4f7f\u7528 query \u529f\u80fd\uff0c\u8a73\u7d30\u7684\u4ecb\u7d39\u53ef\u4ee5\u770b\u4e4b\u5f8cpage<\/p>\n<p>\u4e0d\u904e\u81f3\u5c11\u53ef\u4ee5\u78ba\u4fddquery \u5f8c\u56de\u50b3\u7684\u6771\u897f\u662f\u4f60\u6700\u7fd2\u6163\u7684 list<T> \u3002<\/p>\n<p><strong>3. Session cache<\/strong><\/p>\n<p>\u4e00\u5927\u91cd\u9ede\uff0c\u4f46\u662f\u9019\u6b21\u4e3b\u8981\u662f\u79d1\u666e\u6559\u80b2\uff0c\u4e26\u4e0d\u591a\u8ac7<\/p>\n<h3>page6-7<\/h3>\n<h4>Performance<\/h4>\n<p>\u6548\u80fd\u6c38\u9060\u662f\u6700\u91cd\u8981\u7684\u4e00\u74b0\uff0c\u81ea\u5df1\u624b\u52d5\u6e2c\u8a66<\/p>\n<p>insert and delete 10000 row<\/p>\n<p> load 20000 row<\/p>\n<p>\u57fa\u672c\u4e0a\u6700\u53ef\u6015\u7684\u5dee\u7570\u5728\u65bc insert \uff0c\u4e0d\u904e\u9019\u662f\u5728\u6c92\u6709 transcation\u7684\u60c5\u6cc1\uff0c\u6709\u9ede\u4e0d\u516c\u5e73<\/p>\n<p>\u4e0d\u904e\u770bload\u7684\u6642\u9593\uff0c\u5c31\u53ef\u4ee5\u767c\u73fe\u5dee\u7570\u5566<\/p>\n<p>\u53e6\u5916\u4e5f\u53ef\u4ee5\u770b\u5927\u5e2b\u8ddf\u5176\u4ed6orm lib \u7684\u6bd4\u8f03<a href=\"https:\/\/github.com\/daj\/android-orm-benchmark\">benchmark<\/a><\/p>\n<p>delete\u5230\u662f\u6c92\u6709\u5dee\u591a\u5c11<\/p>\n<h3>page 8<\/h3>\n<h4>ORM in greendao<\/h4>\n<pre class=\"mermaid\">graph LR\n    App[Java\/Android \u61c9\u7528\u7a0b\u5f0f] -->|\u64cd\u4f5c\u5be6\u9ad4 POJO| greenDAO[greenDAO ORM \u6838\u5fc3]\n    greenDAO -->|\u751f\u6210\u9ad8\u6548\u7387 SQL| SQLite[(SQLite Database)]\n    SQLite -->|Cursor \u96f6\u53cd\u5c04\u6620\u5c04| greenDAO\n    greenDAO -->|\u8fd4\u56de\u5be6\u9ad4\u8cc7\u6599| App<\/pre>\n<p><strong>GreenDao<\/strong><\/p>\n<p>\u6240\u6709\u7684 SQLite database \u7684\u64cd\u4f5c\u5168\u90e8\u90fd\u900f\u904egreendao<\/p>\n<p>\u800c\u8f38\u51fa\u8f38\u5165\u7684\u5c0d\u8c61\u90fd\u662f\u4ee5java object \u70ba\u6a19\u7684\u3002\u9019\u662f\u6700\u5927\u76ee\u7684\u3002<\/p>\n<p>\u5176\u5be6\u985e\u4f3c\u7684\u6771\u897f\u5c31\u662f hibernate\uff0c\u53ea\u4e0d\u904ehibernate \u66f4\u5927\u5c3e<\/p>\n<h3>page 9<\/h3>\n<h4>A example for present<\/h4>\n<p>\u5148\u70ba\u4e86\u78ba\u4fdd\u4e4b\u5f8c\u6211\u5728\u4ecb\u7d39\u6642\uff0c\u4ecb\u7d39\u7684\u4f8b\u5b50\u662f\u9023\u8cab\u7684\uff0c\u5148\u4f86\u500b\u57fa\u672c\u5b9a\u7fa9<\/p>\n<p>\u6253\u7b97\u4f5c\u4e00\u500b social data collector\uff0c\u88e1\u9762\u6703\u6536\u96c6\u5404\u7a2e social ap \u7684\u8cc7\u6599<\/p>\n<p>\u5168\u90e8\u90fd\u5b58\u6210 CommonData \u9019\u500b\u7269\u4ef6\uff0c\u88e1\u9762\u5305\u542b\u9019\u4e9b\u6b04\u4f4d<\/p>\n<p>DataID as primary key<\/p>\n<p> Category \u985e\u5225<\/p>\n<p> Provider \u63d0\u4f9b\u8005 \uff1afacebook, twitter\u2026<\/p>\n<p> DisplayOrder \u6839\u64dabig data \u5f8c\u7684\u6392\u5e8f\u6b0a\u91cd<\/p>\n<h3>page 10-15<\/h3>\n<h4>Expressing Queries: What difference<\/h4>\n<p><strong>\u9019\u5e7e\u9801\u90fd\u5728\u8ac7\uff0c\u4f55\u8b02\u7684greendao Expressing Queries \u4ed6\u8207Android \u81ea\u5e36\u7684 content provider \u5dee\u5728\u54ea\u88e1<\/strong><\/p>\n<p>content resolver \u771f\u7684\u8d85\u7169<\/p>\n<p>page 10 \u53ea\u662f\u62ffloadAll()\u4f86\u6696\u6696\u5834\uff0c\u7562\u7adf\u62ff\u9019\u500bmethod\u4f86\u6bd4\u4e00\u9ede\u90fd\u4e0d\u5f48\u6027\u5316<\/p>\n<h3>page 11-12<\/h3>\n<p>\u6839\u64da\u4e4b\u524d\u7684\u5b9a\u7fa9\uff0c\u5047\u8a2d\u8981\u53bb query \u7b26\u5408\u4ee5\u4e0b\u689d\u4ef6\u7684\u5f0f\u5b50<\/p>\n<p>Provider equal facebook<\/p>\n<p> Order by display order<\/p>\n<p> Limit data count100<\/p>\n<p>\u4ee5Android sql \u4f86\u770b\u5c31\u662f<\/p>\n<p>code:<\/p>\n<pre><code class=\"hljs language-plaintext\">String selection = StorageField.Provider. + \"=?\" ;\nString[] selectionargs = new String {\u201cfacebook\u201d} ;\nString sortorder = \u201c ASC \u201d + StorageField.Displayorder + \u201c LIMIT \u201d + \"100\";\nCursor c = getContentResolver() . query (uriLPageProvider , projection  ,  selection, selectionargs, sortorder ) ;<\/code><\/pre>\n<p>\u4e5f\u8a31\u4f60\u662f\u500b\u5927\u5e2b\uff0c\u53ef\u4ee5\u5beb\u7684\u66f4\u7c21\u6f54\u4e00\u9ede<\/p>\n<p>code:<\/p>\n<pre><code class=\"hljs language-sql\"><span class=\"hljs-keyword\">Select<\/span> <span class=\"hljs-operator\">*<\/span> <span class=\"hljs-keyword\">from<\/span> leftpage  <span class=\"hljs-keyword\">where<\/span> Provider <span class=\"hljs-operator\">=<\/span> \u2018facebook\u2019 <span class=\"hljs-keyword\">order<\/span> <span class=\"hljs-keyword\">asc<\/span> \u2018displayorder\u2019 limit \u2018<span class=\"hljs-number\">100<\/span>\u2019<\/code><\/pre>\n<p>\u606d\u559c\u4f60\u5b8c\u6210SQLite\u00a0script<\/p>\n<p>\u4f46\u9084\u6709\u4e00\u95dc\uff1a\u5c31\u662f\u628acursor \u8b8a\u6210 list\uff0c\u5176\u5be6\u9019\u8d85\u82b1\u6642\u9593<\/p>\n<p>**\u4f46\u662f\u9019\u5728 GreenDao\u88e1\u9762\u5c31\u53ea\u8981<\/p>\n<p>**code:<\/p>\n<pre><code class=\"hljs language-plaintext\">mCommonDataDao.queryBuilder()\n   .where(Properties.Provider.eq(Provider.Facebook))\n   .orderAsc(Properties.DisplayOrder)\n   .limit(100)\n   .list();<\/code><\/pre>\n<p>\u597d\u5427\uff0c\u9019\u6574\u500b\u8b8a\u5f97\u8d85\u4e7e\u6de8\u53c8\u597d\u61c2\uff0c\u591a\u67d0\u7f8e\u597d\u7684\u4e16\u754c\u5beb\u5230\u6709\u9ede\u7d2f\u4e86<\/p>\n<h3>page 16-17<\/h3>\n<h4>How to getting start?<\/h4>\n<p>\u7b2c\u4e00\u6b21\u7e3d\u662f\u6bd4\u8f03\u9ebb\u7169\u4e00\u4e9b<\/p>\n<pre class=\"mermaid\">graph TD\n    GenProj[DaoGenerator \u7368\u7acb\u5c08\u6848: \u5b9a\u7fa9 Schema \u8207 Entities] -->|\u7de8\u8b6f\u671f\u57f7\u884c code generation| GeneratedDao[\u751f\u6210: DaoMaster \/ DaoSession \/ EntityDao]\n    GeneratedDao --> AndroidApp[Android \u4e3b\u5de5\u7a0b (\u5f15\u7528\u751f\u6210\u4ee3\u78bc)]\n    AndroidApp --> SQLite[(\u5e95\u5c64 SQLite \u8cc7\u6599\u5eab)]<\/pre>\n<p>\u7531\u6b64\u5716\u770b\u4ee5\u770b\u5f97\u51fa\u4f86\uff0c\u4f7f\u7528dao \u5fc5\u9808\u5148\u5275\u9020dao (\u597d\u50cf\u5ee2\u8a71)<\/p>\n<p>\u5efa\u7acb greendao generator project \uff08normal java class\uff09\u53bb\u7522\u751f\uff08code generateion\uff09<\/p>\n<p>daos \u76f8\u95dc\u6a94\u6848\u5230Android\u00a0project \u4ee5\u4f9b\u4f7f\u7528<\/p>\n<h3>page 18-23<\/h3>\n<h4>Step by step<\/h4>\n<p><strong>Step 1:<\/strong> \u5275\u5efa greendao \u76f8\u95dccode \u5fc5\u9808\u5148\u5728\u4e00\u822cclass\u5beb greendao-generator \u7684code<\/p>\n<p>\u4ee5Android\u00a0studio \u4f86\u770b\u5c31\u662f\u5148\u5275\u5efa module<\/p>\n<p>\u7136\u5f8c gradle script \u52a0\u5165 greendao-generator\u7684\u5f15\u7528<\/p>\n<p>code:<\/p>\n<pre><code class=\"hljs language-groovy\">compile <span class=\"hljs-string\">&#x27;de.greenrobot:greendao-generator:1.3.1<\/span><\/code><\/pre>\n<p><strong>Step 2:<\/strong> \u63a5\u4e0b\u4f86\u5728 module \u958bnormal class \u540d\u5b50\u96a8\u4fbf\uff0c\u5728\u88e1\u9762\u958b\u59cb\u8a2d\u5b9a\u6709\u95dc db\u7684\u5c6c\u6027\uff08\u6b04\u4f4d\uff0c\u4f4d\u5740\u2026\uff09<\/p>\n<p>code:<\/p>\n<pre><code class=\"hljs language-java\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">GreenDao<\/span> {\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-type\">void<\/span> <span class=\"hljs-title function_\">main<\/span><span class=\"hljs-params\">(String[] args)<\/span>{\n        <span class=\"hljs-comment\">\/\/ \u5275\u5efa\u57fa\u672c schema \u6307\u5b9a version and package<\/span>\n        <span class=\"hljs-type\">Schema<\/span> <span class=\"hljs-variable\">schema<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">Schema<\/span>(<span class=\"hljs-number\">1<\/span>, <span class=\"hljs-string\">&quot;com.acer.android.leftpage.provider&quot;<\/span>);\n\n        <span class=\"hljs-comment\">\/\/ \u5229\u7528 schema \u958b\u59cb\u8a2d\u5b9a entity, <\/span>\n        <span class=\"hljs-comment\">\/\/ \u8a2d\u5b9a dao name<\/span>\n        <span class=\"hljs-type\">Entity<\/span> <span class=\"hljs-variable\">commonData<\/span> <span class=\"hljs-operator\">=<\/span> schema.addEntity(<span class=\"hljs-string\">&quot;CommonData&quot;<\/span>);\n        <span class=\"hljs-comment\">\/\/ \u8a2d\u5b9a table name<\/span>\n        commonData.setTableName(<span class=\"hljs-string\">&quot;LeftPage&quot;<\/span>);\n        <span class=\"hljs-comment\">\/\/ \u81f3\u5c11\u6307\u5b9a\u4e00\u500b primary key<\/span>\n        commonData.addLongProperty(<span class=\"hljs-string\">&quot;DataID&quot;<\/span>).primaryKey();\n        <span class=\"hljs-comment\">\/\/ \u5176\u4ed6 table column name<\/span>\n        commonData.addStringProperty(<span class=\"hljs-string\">&quot;Category&quot;<\/span>);\n        commonData.addStringProperty(<span class=\"hljs-string\">&quot;Provider&quot;<\/span>);\n        commonData.addLongProperty(\u201cDisplayOrder\u201d);\n        <span class=\"hljs-comment\">\/\/ \u8a2d\u5b9a add content provider \u6703\u81ea\u52d5\u9023 content provider \u56fa\u5b9a\u7684code \u7d66\u5efa\u8d77\u4f86<\/span>\n        <span class=\"hljs-comment\">\/\/ \u5efa\u597d\u4e5f\u4e0d\u80fd\u99ac\u4e0a\u7528\uff0c\u5fc5\u9808\u8ddf\u8005\u4fee\u6539 manifest \u548c \u90e8\u4efdcode<\/span>\n        commonData.addContentProvider();\n        <span class=\"hljs-comment\">\/\/ \u5229\u7528 generator \u6307\u5b9a code generate \u4f4d\u5740 \uff0c\u8ddfpackage \u4e0d\u540c\uff0c\u8acb\u6307\u5b9a\u5408\u6cd5\u5be6\u9ad4\u8def\u5f91<\/span>\n        <span class=\"hljs-comment\">\/\/ \u901a\u5e38\u5c31\u662f\u5c0d\u61c9\u5230\u4f60\u8981\u4f7f\u7528greendao \u7684 android project path.<\/span>\n        <span class=\"hljs-type\">DaoGenerator<\/span> <span class=\"hljs-variable\">generator<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">DaoGenerator<\/span>();\n        generator.generateAll(schema, <span class=\"hljs-string\">&quot;..\/AcerHome\/LeftPage\/src\/main\/java\/&quot;<\/span>);}<\/code><\/pre>\n<p>**Step 3:**\u5b8c\u6210\u5f8c\uff0c\u8acb\u76f4\u63a5 compile and run to generate code.<\/p>\n<p>\u901a\u5e38\u5c31\u6703\u5728\u4f60\u6307\u5b9a\u7684\u8def\u5f91\u4e0b\u7522\u751f\u5e95\u4e0b\u56db\u500b\u6a94\u6848<\/p>\n<pre class=\"mermaid\">classDiagram\n    class DaoMaster {\n        +newSession() DaoSession\n        +createAllTables(SQLiteDatabase)\n        +dropAllTables(SQLiteDatabase)\n    }\n    class DaoSession {\n        +getCommonDataDao() CommonDataDao\n        +clear()\n    }\n    class CommonDataDao {\n        +insert(CommonData)\n        +load(Long key)\n        +queryBuilder()\n    }\n    class CommonData {\n        -Long dataID\n        -String category\n        -String provider\n    }\n    DaoMaster *-- DaoSession\n    DaoSession *-- CommonDataDao\n    CommonDataDao --> CommonData<\/pre>\n<p>\u5c0d\u61c9\u5230\u4e0a\u9762\u7684code\u5c31\u662f\u5c31\u662f\u5e95\u4e0b\u9019\u56db\u500bcore class<\/p>\n<p><strong>1. DaoMaster<\/strong><\/p>\n<p>\u300eThe entry point for using greenDAO. DaoMaster holds the database object (SQLiteDatabase) and manages DAO classes (not objects) for a specific schema. It has static methods to create the tables or drop them.\u300f<\/p>\n<p>\u4e3b\u8981\u7ba1\u7406\u5c0d SQLiteDatabase \u7684\u57fa\u672c\u64cd\u4f5c\uff08drop , create, find\uff09\uff0c\u4ee5\u53ca\u5c0d dao \u7684\u64cd\u4f5c<\/p>\n<p>\u4e5f\u662f\u6240\u6709\u5c0d greendao \u7684\u64cd\u4f5c\u7684\u8d77\u59cb\u9ede\u3002<\/p>\n<p>code:<\/p>\n<pre><code class=\"hljs language-java\"><span class=\"hljs-keyword\">package<\/span> com.acer.android.greendao;\n\n<span class=\"hljs-keyword\">import<\/span> android.content.Context;\n<span class=\"hljs-keyword\">import<\/span> android.database.sqlite.SQLiteDatabase;\n<span class=\"hljs-keyword\">import<\/span> android.database.sqlite.SQLiteDatabase.CursorFactory;\n<span class=\"hljs-keyword\">import<\/span> android.database.sqlite.SQLiteOpenHelper;\n<span class=\"hljs-keyword\">import<\/span> android.util.Log;\n\n<span class=\"hljs-keyword\">import<\/span> de.greenrobot.dao.AbstractDaoMaster;\n<span class=\"hljs-keyword\">import<\/span> de.greenrobot.dao.identityscope.IdentityScopeType;\n<span class=\"hljs-comment\">\/\/ \u5f88\u8cbc\u5fc3\u7684\u63d0\u9192\uff0c\u5225\u4e82\u52d5\u963f<\/span>\n<span class=\"hljs-comment\">\/\/ THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.<\/span>\n\n<span class=\"hljs-comment\">\/**\n * Master of DAO (schema version 1): knows all DAOs.\n *\/<\/span>\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">DaoMaster<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title class_\">AbstractDaoMaster<\/span> {\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">final<\/span> <span class=\"hljs-type\">int<\/span> <span class=\"hljs-variable\">SCHEMA_VERSION<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-number\">1<\/span>;\n    <span class=\"hljs-comment\">\/**\n     * Creates underlying database table using DAOs.\n     *\/<\/span>\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-type\">void<\/span> <span class=\"hljs-title function_\">createAllTables<\/span><span class=\"hljs-params\">(SQLiteDatabase db, <span class=\"hljs-type\">boolean<\/span> ifNotExists)<\/span> {\n        CommonDataDao.createTable(db, ifNotExists);\n    }\n    <span class=\"hljs-comment\">\/**\n     * Drops underlying database table using DAOs.\n     *\/<\/span>\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-type\">void<\/span> <span class=\"hljs-title function_\">dropAllTables<\/span><span class=\"hljs-params\">(SQLiteDatabase db, <span class=\"hljs-type\">boolean<\/span> ifExists)<\/span> {\n        CommonDataDao.dropTable(db, ifExists);\n    }\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">abstract<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">OpenHelper<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title class_\">SQLiteOpenHelper<\/span> {\n        <span class=\"hljs-type\">public<\/span> <span class=\"hljs-title function_\">OpenHelper<\/span><span class=\"hljs-params\">(Context context, String name, CursorFactory factory)<\/span> {\n            <span class=\"hljs-built_in\">super<\/span>(context, name, factory, SCHEMA_VERSION);\n        }\n        <span class=\"hljs-meta\">@Override<\/span>\n        <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-type\">void<\/span> <span class=\"hljs-title function_\">onCreate<\/span><span class=\"hljs-params\">(SQLiteDatabase db)<\/span> {\n            Log.i(<span class=\"hljs-string\">&quot;greenDAO&quot;<\/span>, <span class=\"hljs-string\">&quot;Creating tables for schema version &quot;<\/span> + SCHEMA_VERSION);\n            createAllTables(db, <span class=\"hljs-literal\">false<\/span>);\n        }\n    }\n    <span class=\"hljs-comment\">\/**\n     * WARNING: Drops all table on Upgrade! Use only during development.\n     *\/<\/span>\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">DevOpenHelper<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title class_\">OpenHelper<\/span> {\n        <span class=\"hljs-type\">public<\/span> <span class=\"hljs-title function_\">DevOpenHelper<\/span><span class=\"hljs-params\">(Context context, String name, CursorFactory factory)<\/span> {\n            <span class=\"hljs-built_in\">super<\/span>(context, name, factory);\n        }\n        <span class=\"hljs-meta\">@Override<\/span>\n        <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-type\">void<\/span> <span class=\"hljs-title function_\">onUpgrade<\/span><span class=\"hljs-params\">(SQLiteDatabase db, <span class=\"hljs-type\">int<\/span> oldVersion, <span class=\"hljs-type\">int<\/span> newVersion)<\/span> {\n            Log.i(<span class=\"hljs-string\">&quot;greenDAO&quot;<\/span>, <span class=\"hljs-string\">&quot;Upgrading schema from version &quot;<\/span> + oldVersion + <span class=\"hljs-string\">&quot; to &quot;<\/span> + newVersion + <span class=\"hljs-string\">&quot; by dropping all tables&quot;<\/span>);\n            dropAllTables(db, <span class=\"hljs-literal\">true<\/span>);\n            onCreate(db);\n        }\n    }\n    <span class=\"hljs-type\">public<\/span> <span class=\"hljs-title function_\">DaoMaster<\/span><span class=\"hljs-params\">(SQLiteDatabase db)<\/span> {\n        <span class=\"hljs-built_in\">super<\/span>(db, SCHEMA_VERSION);\n        registerDaoClass(CommonDataDao.class);\n    }\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-type\">DaoSession<\/span> <span class=\"hljs-title function_\">newSession<\/span><span class=\"hljs-params\">()<\/span> {\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">DaoSession<\/span>(db, IdentityScopeType.Session, daoConfigMap);\n    }\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-type\">DaoSession<\/span> <span class=\"hljs-title function_\">newSession<\/span><span class=\"hljs-params\">(IdentityScopeType type)<\/span> {\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">DaoSession<\/span>(db, type, daoConfigMap);\n    }\n\n}<\/code><\/pre>\n<p><strong>2. DaoSession<\/strong><\/p>\n<p>\u300eManages all available DAO objects for a specific schema, which you can acquire using one of the getter methods. DaoSession provides also some generic persistence methods like insert, load, update, refresh and delete for entities. Lastly, a DaoSession objects also keeps track of an identity scope.\u300f<\/p>\n<p>\u5229\u7528 DaoMaster \u53ef\u4ee5\u62ff\u5230 DaoSession<\/p>\n<p>DaoSession \u4e3b\u8981\u63d0\u4f9b\u6700\u5e38\u898b\u7684 CRUD \u65b9\u6cd5\uff0c\u4e26\u5c0didentity scope\u4f5ccache \u8ddf\u8e64<\/p>\n<p>code:<\/p>\n<pre><code class=\"hljs language-java\"><span class=\"hljs-keyword\">package<\/span> com.acer.android.greendao;\n<span class=\"hljs-keyword\">import<\/span> android.database.sqlite.SQLiteDatabase;\n<span class=\"hljs-keyword\">import<\/span> java.util.Map;\n<span class=\"hljs-keyword\">import<\/span> de.greenrobot.dao.AbstractDao;\n<span class=\"hljs-keyword\">import<\/span> de.greenrobot.dao.AbstractDaoSession;\n<span class=\"hljs-keyword\">import<\/span> de.greenrobot.dao.identityscope.IdentityScopeType;\n<span class=\"hljs-keyword\">import<\/span> de.greenrobot.dao.internal.DaoConfig;\n\n<span class=\"hljs-keyword\">import<\/span> com.acer.android.leftpage.greendao.CommonData;\n\n<span class=\"hljs-comment\">\/\/ THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.<\/span>\n\n<span class=\"hljs-comment\">\/**\n * {<span class=\"hljs-doctag\">@inheritDoc<\/span>}\n *\n * <span class=\"hljs-doctag\">@see<\/span> de.greenrobot.dao.AbstractDaoSession\n *\/<\/span>\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">DaoSession<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title class_\">AbstractDaoSession<\/span> {\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">final<\/span> DaoConfig commonDataDaoConfig;\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">final<\/span> CommonDataDao commonDataDao;\n    <span class=\"hljs-type\">public<\/span> <span class=\"hljs-title function_\">DaoSession<\/span><span class=\"hljs-params\">(SQLiteDatabase db, IdentityScopeType type, Map&lt;Class&lt;? extends AbstractDao&gt;, DaoConfig&gt;\n            daoConfigMap)<\/span> {\n        <span class=\"hljs-built_in\">super<\/span>(db);\n        commonDataDaoConfig = daoConfigMap.get(CommonDataDao.class).clone();\n        commonDataDaoConfig.initIdentityScope(type);\n        commonDataDao = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">CommonDataDao<\/span>(commonDataDaoConfig, <span class=\"hljs-built_in\">this<\/span>);\n        registerDao(CommonData.class, commonDataDao);\n    }\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-type\">void<\/span> <span class=\"hljs-title function_\">clear<\/span><span class=\"hljs-params\">()<\/span> {\n        commonDataDaoConfig.getIdentityScope().clear();\n    }\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-type\">CommonDataDao<\/span> <span class=\"hljs-title function_\">getCommonDataDao<\/span><span class=\"hljs-params\">()<\/span> {\n        <span class=\"hljs-keyword\">return<\/span> commonDataDao;\n    }\n}<\/code><\/pre>\n<p><strong>3. CommonDataDao<\/strong><\/p>\n<p>\u300eData access objects (DAOs) persists and queries for entities. For each entity, greenDAO generates a DAO. It has more persistence methods than the DaoSession, for example: count, loadAll, and insertInTx.\u300f<\/p>\n<p>daos \u63d0\u4f9b\u66f4\u591a\u66f4\u7cbe\u7d30\u7684\u64cd\u4f5c\uff08count, loadAll, and insertInTx\uff09\u5728 daosession \u7684base \u4e0a<\/p>\n<p>\uff0c\u800c\u6211\u5011\u64cd\u4f5c\u7684\u8d77\u9ede\u901a\u5e38\u5c31\u662f\u62ff\u500bcommondao \u4f86\u9032\u884c crud\uff0c \u76f8\u8f03\u4e4b\u4e0b\u5565 session , master\u53cd\u800c\u9084\u6c92\u5565\u518d\u7528\u3002<\/p>\n<p>code \u90e8\u4efd\u4e3b\u8981\u5206\u62103\u584a<\/p>\n<p>**3.1. \u63d0\u4f9b static class: Properties \u7528\u4f86\u5e6b\u52a9\u5c0dcolumn \u7684 reference<\/p>\n<p>**code:<\/p>\n<pre><code class=\"hljs language-java\"><span class=\"hljs-comment\">\/**\n     * Properties of entity CommonData.\n     * Can be used for QueryBuilder and for referencing column names.\n     *\/<\/span>\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">Properties<\/span> {\n        <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">final<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-type\">Property<\/span> <span class=\"hljs-variable\">DataID<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">Property<\/span>(<span class=\"hljs-number\">0<\/span>, Long.class, <span class=\"hljs-string\">&quot;DataID&quot;<\/span>, <span class=\"hljs-literal\">true<\/span>, <span class=\"hljs-string\">&quot;DataID&quot;<\/span>);\n        <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">final<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-type\">Property<\/span> <span class=\"hljs-variable\">Category<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">Property<\/span>(<span class=\"hljs-number\">1<\/span>, String.class, <span class=\"hljs-string\">&quot;Category&quot;<\/span>, <span class=\"hljs-literal\">false<\/span>, <span class=\"hljs-string\">&quot;Category&quot;<\/span>);\n        <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">final<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-type\">Property<\/span> <span class=\"hljs-variable\">Provider<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">Property<\/span>(<span class=\"hljs-number\">2<\/span>, String.class, <span class=\"hljs-string\">&quot;Provider&quot;<\/span>, <span class=\"hljs-literal\">false<\/span>, <span class=\"hljs-string\">&quot;Provider&quot;<\/span>);\n        <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">final<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-type\">Property<\/span> <span class=\"hljs-variable\">DisplayOrder<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">Property<\/span>(<span class=\"hljs-number\">3<\/span>, Integer.class, <span class=\"hljs-string\">&quot;DisplayOrder&quot;<\/span>, <span class=\"hljs-literal\">false<\/span>, <span class=\"hljs-string\">&quot;DisplayOrder&quot;<\/span>);\n        <span class=\"hljs-comment\">\/\/ ...... \u9084\u6709\u5f88\u591a\u5f88\u591a<\/span>\n    }<\/code><\/pre>\n<p>**3.2. create table : \u4e4b\u524d\u6709\u63d0\u904e\u4e86\uff0c\u9019\u7a2e\u56fa\u5b9a\u6232\u78bc\u7684\u6771\u897f\u7576\u7136\u662f\u81ea\u52d5generate<\/p>\n<p>**code:<\/p>\n<pre><code class=\"hljs language-sql\">public <span class=\"hljs-keyword\">static<\/span> void createTable(SQLiteDatabase db, <span class=\"hljs-type\">boolean<\/span> ifNotExists) {\n        String <span class=\"hljs-keyword\">constraint<\/span> <span class=\"hljs-operator\">=<\/span> ifNotExists? &quot;IF NOT EXISTS &quot;: &quot;&quot;;\n        db.execSQL(&quot;CREATE TABLE &quot; <span class=\"hljs-operator\">+<\/span> <span class=\"hljs-keyword\">constraint<\/span> <span class=\"hljs-operator\">+<\/span> &quot;&#x27;LeftPage&#x27; (&quot; <span class=\"hljs-operator\">+<\/span> <span class=\"hljs-operator\">\/<\/span><span class=\"hljs-operator\">\/<\/span>\n                &quot;&#x27;DataID&#x27; INTEGER PRIMARY KEY ,&quot; <span class=\"hljs-operator\">+<\/span> <span class=\"hljs-operator\">\/<\/span><span class=\"hljs-operator\">\/<\/span> <span class=\"hljs-number\">0<\/span>: DataID\n                &quot;&#x27;Category&#x27; TEXT,&quot; <span class=\"hljs-operator\">+<\/span> <span class=\"hljs-operator\">\/<\/span><span class=\"hljs-operator\">\/<\/span> <span class=\"hljs-number\">1<\/span>: Category\n                &quot;&#x27;Provider&#x27; TEXT,&quot; <span class=\"hljs-operator\">+<\/span> <span class=\"hljs-operator\">\/<\/span><span class=\"hljs-operator\">\/<\/span> <span class=\"hljs-number\">2<\/span>: Provider\n                &quot;&#x27;DisplayOrder&#x27; INTEGER \uff09&quot;); <span class=\"hljs-operator\">+<\/span> <span class=\"hljs-operator\">\/<\/span><span class=\"hljs-operator\">\/<\/span> <span class=\"hljs-number\">3<\/span>: DisplayOrder\n        }<\/code><\/pre>\n<p><strong>3.3. bindvalue : \u5c31\u662f object to cursor or cursor to object.<\/strong><\/p>\n<p>\u4e0d\u4e0acode<\/p>\n<p><strong>4. CommonData<\/strong><\/p>\n<p>\u300ePersistable objects. Usually, entities are generated (you do not have to), and are objects representing a database row using standard Java properties (like a POJO or a JavaBean).\u300f<\/p>\n<p>\u9019\u88e1\u5c31\u662f\u5927\u91cf\u7684 setter and getter\uff0c\u9019\u7a2edirty code \u7576\u7136\u662f auto generate\u963f<\/p>\n<h3>page 23<\/h3>\n<p>**Step 4:\u00a0**\u76ee\u524dgenerate \u51fa\u4f86\u7684\u6a94\u6848\u5728\u4f60\u7684android project \u88e1\u9762<\/p>\n<p>\u4f46\u662f\u61c9\u8a72\u9084\u662f\u4e0d\u80fd\u7528\uff0c\u56e0\u70ba\u5f88\u591a\u5947\u5999\u7684 class \u537b\u5f15\u7528\u4e0d\u5230<\/p>\n<p>\u56e0\u6b64\u8acb\u5728 project gradle \u52a0\u5165<\/p>\n<p>code:<\/p>\n<pre><code class=\"hljs language-groovy\">compile <span class=\"hljs-string\">&#x27;de.greenrobot:greendao:1.3.7&#x27;<\/span><\/code><\/pre>\n<h3>page 24-25<\/h3>\n<h4>HOW TO USE<\/h4>\n<p>\u7d42\u65bc\u53ef\u4ee5\u958b\u59cb\u4f7f\u7528\u5566\uff0c\u53ea\u8981\u8a18\u4f4f\u6709\u5565\u4e8b\u5c31\u76f4\u63a5\u627e CommonDao \u4f86\u8655\u7406\uff0c\u4e00\u5207\u6c92\u554f\u984c<\/p>\n<p>initial \u65b9\u5f0f\u5982\u4e0b<\/p>\n<p>code:<\/p>\n<pre><code class=\"hljs language-java\"><span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">final<\/span> <span class=\"hljs-type\">String<\/span> <span class=\"hljs-variable\">DB_NAME<\/span> <span class=\"hljs-operator\">=<\/span>  \u201cLeftpageProvider.db<span class=\"hljs-string\">&quot;;\nprivate DaoSession daoSession;\nCommonDataDao mCommonDataDao\nprivate DBHelper(Context context) {\n     \/\/ \u76f4\u63a5\u6307\u5b9adb name \uff0c\u9019\u6bd4\u8f03\u5c11\u898b\n    DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);\n    DaoMaster daoMaster = new DaoMaster(helper.getWritableDatabase());\n    daoSession = daoMaster.newSession();\n    mCommonDataDao= daoSession.getCommonDataDao();\n}<\/span><\/code><\/pre>\n<h3>page 26-27<\/h3>\n<h4>Query<\/h4>\n<p>\u8001\u5be6\u8aaa\u6211\u4e0d\u77e5\u9053\u9084\u6709\u5565\u9700\u8981\u8b1b\u89e3\uff0c\u9019\u662f\u6700\u57fa\u672c\u7528\u6cd5<\/p>\n<p>\u4e5f\u591a\u4e86\u4e0d\u5c11\u5728 content resolver \u4e0d\u592a\u6703\u7528\u5230\u7684\u5beb\u6cd5,\u4f46\u5728sql \u5f88\u5e38\u7528\u5230\u7684\u6558\u8ff0\u53e5<\/p>\n<p><strong>Query with syntax<\/strong><\/p>\n<p>\u76f8\u540c\uff1aeq , notEq<\/p>\n<p>\u5927\u65bc\u5c0f\u65bc\uff1age , le , gt , lt<\/p>\n<p>other:in , between,like\u2026..<\/p>\n<p>code:<\/p>\n<pre><code class=\"hljs language-plaintext\">\/\/ \u5148\u505a\u51faqueryBuilder \u5f8c\uff0c\u958b\u59cb\u586b\u689d\u4ef6\u5f0f\nList dataList = CommonDataDao.queryBuilder()\n   .where(Properties.Provider.eq(Provider.Social))\n   .orderAsc(mCommonDataDao.Properties.DisplayOrder) .list();<\/code><\/pre>\n<p>\u5982\u679c\u9084\u662f\u5f88\u7737\u6200 cursor and SQLitedatabase<\/p>\n<p>\u5e6b\u4f60\u4fdd\u7559 raw query<\/p>\n<p>code:<\/p>\n<pre><code class=\"hljs language-plaintext\">SQLiteDatabase db = daoSession.getDatabase();\nCursor cursor = db.rawQuery(\"SELECT *FROM leftpage WHERE .....\", null);<\/code><\/pre>\n<h3>page 28<\/h3>\n<h4>Insert<\/h4>\n<p>\u57fa\u672c\u7528\u6cd5\u5982\u4e0b\uff0c\u53e6\u5916\u60f3\u8981\u591a\u591a\u5ba3\u5c0e\uff0c\u585e\u5927\u91cf\u8cc7\u6599\u6642\u8acb\u5584\u7528 bulk insert \u4ee5\u6539\u5584\u6548\u7387\uff5e\uff5e\u8b1d\u8b1d<\/p>\n<p>SQLitedatabase \u5c31\u662f\u8acbblock \u5f8c\u5728\u585e\u5927\u91cf\u8cc7\u6599<\/p>\n<p>\u53e6\u5916\u5c0f\u5c0f\u63d0\u9192\uff0cprimary key \u8acb\u4fdd\u6301\u70banull \uff0c\u7531\u7cfb\u7d71\u5e6b\u4f60\u586b\u503c\uff08\u6211\u77e5\u9053\u9019\u662f\u5e38\u8b58\uff0c\u4f46\u662f\u7e3d\u6709\u5c0f\u5925\u4f34..\uff09<\/p>\n<p>code:<\/p>\n<pre><code class=\"hljs language-java\"><span class=\"hljs-comment\">\/\/Insert:<\/span>\n    CommonDataDao .insert(<span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">CommonData<\/span>(DATA_ID, arg1, arg2,x\u2026\u2026));\n<span class=\"hljs-comment\">\/\/Bulk Insert <\/span>\n    CommonDataDao .insertln(CommonDataList);\n    CommonDataDao.insertln(CommonData[]);\n<span class=\"hljs-comment\">\/\/InsetOrReplace<\/span>\n    CommonDataDao.insertOrReplaceln(CommonDataList)<\/code><\/pre>\n<h3>page 29<\/h3>\n<h4>Delete<\/h4>\n<p>\u57fa\u672c\u7528\u6cd5\u5982\u4e0b<\/p>\n<p>code:<\/p>\n<pre><code class=\"hljs language-plaintext\">\/\/ Delete sentence\n\/\/ \u8ddfquery\u4e00\u6a23\uff0c\u5148\u5229\u7528 QueryBuilder \u628a\u689d\u4ef6\u5f0f\u7d66\u5217\u51fa\u4f86\uff0c\u4f46\u662f\u6700\u5f8c\u904b\u884c\u7684\u65b9\u6cd5\u4e8b\u6839\u64da\u689d\u4ef6\u5f0f\n\/\/ \u904b\u884c delete command\nCommonDataDao.QueryBuilder()\n  .where(Properties.Provider.eq(facebook))\n  .buildDelete()  .executeDeleteWithoutDetachingEntities();\n\/\/ Delete all\nCommonDataDao.deleteAll();<\/code><\/pre>\n<h3>page 30<\/h3>\n<h4>Update<\/h4>\n<p>\u8a72\u6ce8\u610f\u7684\u9ede\u57fa\u672c\u4e0a\u8ddfinsert \u4e00\u6a23<\/p>\n<p>\u5c31\u662f \u62dc\u8a17\u5584\u7528 bulk update \uff0c\u9084\u6709\u641e\u6e05\u695a primary key \u7684\u7528\u9014\u53ca\u610f\u7fa9<\/p>\n<p>code:<\/p>\n<pre><code class=\"hljs language-java\"><span class=\"hljs-comment\">\/\/ Update sentence<\/span>\nCommonDataDao.update(<span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">CommonData<\/span>(Data_ID , arg1 , arg2 , \u2026\u2026.));\n<span class=\"hljs-comment\">\/\/ Bulk Update <\/span>\nCommonDataDao.updateln(CommonDataList);\nCommonDataDao.updateln(CommonData[]);<\/code><\/pre>\n<h3>page 31<\/h3>\n<h4>Thanks<\/h4>\n<p>Reference:<\/p>\n<p><a href=\"http:\/\/greendao-orm.com\/features\/\">http:\/\/greendao-orm.com\/features\/<\/a><\/p>\n<p><a href=\"http:\/\/bng86.gitbooks.io\/android-third-party-\/content\/greendao.html\">http:\/\/bng86.gitbooks.io\/android-third-party-\/content\/greendao.html<\/a><\/p>\n<p><a href=\"http:\/\/www.slideshare.net\/SmileeYang\/greendao-43892958?qid=b95e0f35-a323-4930-8e8a-d0e298a1eb10&amp;v=qf1&amp;b=&amp;from_search=1\">http:\/\/www.slideshare.net\/SmileeYang\/greendao-43892958?qid=b95e0f35-a323-4930-8e8a-d0e298a1eb10&amp;v=qf1&amp;b=&amp;from_search=1<\/a><\/p>\n<p><a href=\"http:\/\/www.slideshare.net\/ssuser8674c1\/green-dao-50914708?qid=b95e0f35-a323-4930-8e8a-d0e298a1eb10&amp;v=qf1&amp;b=&amp;from_search=5\">http:\/\/www.slideshare.net\/ssuser8674c1\/green-dao-50914708?qid=b95e0f35-a323-4930-8e8a-d0e298a1eb10&amp;v=qf1&amp;b=&amp;from_search=5<\/a><\/p>\n<h3>page 32<\/h3>\n<h4>\u5176\u5be6\u9019\u662f\u500b\u5951\u5b50<\/h4>\n<p>greendao \u4e0d\u53ea\u6709\u4e0a\u8ff0\u9019\u6a23\u57fa\u672c\u7684\u529f\u80fd\uff0c\u9084\u6709\u5f88\u591a\u5f88\u5f37\u4f46\u662f\u6211\u770b\u4e0d\u61c2\u7684\u6771\u897f<\/p>\n<p>\u9084\u6709\u5f88\u591a\u66f4\u52a0\u9032\u968e\u7684\u529f\u80fd\uff0c\u5982\u679c\u9084\u6709\u4e0b\u4e00\u7ae0\u7bc0\u7684\u8a71\uff0c\u6703\u958b\u59cb\u4ecb\u7d39\u5176\u4ed6\u6211\u5728\u958b\u767c\u4e0a\u5c0e\u5165\u7684\u554f\u984c<\/p>\n<p>\u8b1d\u8b1d\u89c0\u8cde \u9577\u6587\u79d1\u666e\u4e00\u7bc7<\/p>\n","protected":false},"excerpt":{"rendered":"<p>** GreenDao Introduction ** \u300egreenDAO is an open source [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[169],"tags":[53,253,268,269],"_links":{"self":[{"href":"https:\/\/boochlin.com\/index.php?rest_route=\/wp\/v2\/posts\/85"}],"collection":[{"href":"https:\/\/boochlin.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/boochlin.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/boochlin.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/boochlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=85"}],"version-history":[{"count":5,"href":"https:\/\/boochlin.com\/index.php?rest_route=\/wp\/v2\/posts\/85\/revisions"}],"predecessor-version":[{"id":1415,"href":"https:\/\/boochlin.com\/index.php?rest_route=\/wp\/v2\/posts\/85\/revisions\/1415"}],"wp:attachment":[{"href":"https:\/\/boochlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=85"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/boochlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=85"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/boochlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=85"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}