{"id":27306336,"url":"https://github.com/11039850/monalisa-orm","last_synced_at":"2025-04-12T03:59:34.386Z","repository":{"id":33748985,"uuid":"37403981","full_name":"11039850/monalisa-orm","owner":"11039850","description":"Very Simple ORM","archived":false,"fork":false,"pushed_at":"2023-04-16T15:00:21.000Z","size":19831,"stargazers_count":69,"open_issues_count":4,"forks_count":26,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-04-12T03:59:26.133Z","etag":null,"topics":["activerecord","auto-generate","database","dto","java","multi-string","orm"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/11039850.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2015-06-14T07:51:35.000Z","updated_at":"2024-01-26T17:00:38.000Z","dependencies_parsed_at":"2022-09-12T02:52:05.923Z","dependency_job_id":"6c76f10b-26d4-45e3-a8a1-1264184e23b7","html_url":"https://github.com/11039850/monalisa-orm","commit_stats":null,"previous_names":["11039850/monalisa-core"],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/11039850%2Fmonalisa-orm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/11039850%2Fmonalisa-orm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/11039850%2Fmonalisa-orm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/11039850%2Fmonalisa-orm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/11039850","download_url":"https://codeload.github.com/11039850/monalisa-orm/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248514217,"owners_count":21116900,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["activerecord","auto-generate","database","dto","java","multi-string","orm"],"created_at":"2025-04-12T03:59:33.777Z","updated_at":"2025-04-12T03:59:34.379Z","avatar_url":"https://github.com/11039850.png","language":"Java","readme":"# Features\n\n[![Join the chat at https://gitter.im/monalisa-orm/community](https://badges.gitter.im/monalisa-orm/community.svg)](https://gitter.im/monalisa-orm/community?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n* Using the database takes only 1 line of code\n* Generic ORM functions(CRUD)\n* Auto-Generate DTOs\n* Object fields\n* Reload SQL dynamically\n* Sharding support \n* Write multi-line strings easily\n\n5 minutes video: [Youtube](http://www.youtube.com/watch?v=3qpr0J7D7cQ) / [YouKu](http://v.youku.com/v_show/id_XMTU0ODk1MzA2MA==.html) \n\n[Example Project](https://github.com/11039850/monalisa-example) |  [Eclipse Plugin](https://github.com/11039850/monalisa-orm/wiki/Code-Generator#eclipse-plugin)\n\n\n# Usage\n\n\n## Using Database with plugin\n\n![image](https://github.com/11039850/monalisa-orm/raw/master/doc/images/db.gif)\n\n## Using Database without plugin\n\n```java  \n\n\t@DB(url=\"jdbc:mysql://127.0.0.1:3306/test\" ,username=\"root\", password=\"root\")\n\tpublic interface TestDB{\n\t\tpublic static DBConfig DB=DBConfig.fromClass(TestDB.class);  \n\t\t\n\t\tpublic static class NewsModelGenerator{\n\t\t\tpublic static void main(String[] args) {\n\t\t\t\tDBModelGenerateMain.generateModelClass(TestDB.class);\n\t\t\t}\n\t\t}\n\t}\n```\n\n```java\n\tnew User().setName(\"zzg.zhou\").setStatus(1).save();\n```\t\n \n\n## Auto-Generate DTOs (need eclipse-plugin)\n\n![image](https://github.com/11039850/monalisa-orm/raw/master/doc/images/select.gif)\n\n```java\n\tpublic class UserBlogDao {\n\t\t@Select(name=\"test.result.UserBlogs\")      // \u003c--- Auto create/update: test.result.UserBlogs\n\t\tpublic List  selectUserBlogs(int user_id){ // \u003c--- Auto replace List to List\u003cUserBlogs\u003e\n\t\t\tQuery q=TestDB.DB.createQuery();\n\t\t\t            \n\t\t\tq.add(\"\"/**~{\n\t\t\t\tSELECT a.id, a.name, b.title, b.content, b.create_time\n\t\t\t\t\tFROM user a, blog b   \n\t\t\t\t\tWHERE a.id=b.user_id AND a.id=?\t\t\n\t\t\t}*/, user_id);\n\t\t\t \n\t\t\treturn q.getList();               // \u003c--- Auto replace getList() to getList\u003cUserBlogs\u003e\n\t\t} \n\t}\n```\n\n\n## Database Service\n\nDirect Database Access by HTTP, see: [monalisa-service](https://github.com/11039850/monalisa-service)\n```\n  curl http://localhost:8080/your_web_app/dbs/testdb/your_table_name\n```\n\n## Query Example\n\n### Insert\n\n```java\n\t//insert\n\tnew User().setName(\"zzg.zhou\").setStatus(1).save();\n\t\n\t//parse data from type: Map, json/xml string, JsonObject(Gson), HttpServletRequest, JavaBean\n\tnew User().parse(\"{'name':'oschina','status':0}\").save();\n\tnew User().parse(\"\u003cdata\u003e \u003cname\u003echina01\u003c/name\u003e\u003cstatus\u003e1\u003c/status\u003e \u003c/data\u003e\").save();\n\tnew User().parse(request).save();\n\t\n\t//Object field\n\tAddress address=new Address(\"guangdong\",\"shenzhen\");\n\tuser.setAddress(address).save();\n\t\n\t//File field\n\tString detail_save_path=\"path/001.txt\";\n\tString content=\"This is a big text.\";\n\tuser.setDetail(path,content.getBytes()).save(); \n\tuser.getDetailAsString();\n```\n\n\n### Delete\n\n```java\n\t//delete user by primary key or unique key\n\tuser.delete();\n\t\n\t//SQL: DELETE FROM `user` WHERE `name`='china01'\n\tUser.WHERE().name.eq(\"china01\").delete();\n\t\n\tUser.DELETE().deleteAll();\n\tUser.DELETE().truncate();     \n```\n\n\n### Update\n\n```java\n\t//update by primary key\n\tUser user=User.SELECT().selectOne(\"name=?\", \"zzg.zhou\");\n\tuser.setStatus(3).update();\n\t\n\t\t\n\t//SQL: UPDATE user SET name='tsc9526' WHERE name like 'zzg%'\t\n\tUser updateTo=new User().setName(\"tsc9526\");\n\tUser.WHERE().name.like(\"zzg%\").update(updateTo);\n```\n \n\n### Select\n\n```java\n\t//select by primary key\n\tUser.SELECT().selectByPrimaryKey(1);\n\t\n\t//SQL: SELECT * FROM `user` WHERE `name` = 'zzg.zhou'\n\tUser.SELECT().selectOne(\"name=?\", \"zzg.zhou\");\n\t\n\t//SQL: SELECT `name`, `status` FROM `user`\n\tUser.SELECT().include(\"name\",\"status\").select();\n \n \t//SQL: SELECT * FROM `user` WHERE (`name` like 'zzg%' AND `status` \u003e= 0) \n\t//                             OR (`name` = 'zzg' AND `status` \u003e 1) ORDER BY `status` ASC \n\tfor(User x:User.WHERE()\n\t\t\t.name.like(\"zzg%\").status.ge(0)\n\t\t\t.OR()\n\t\t\t.name.eq(\"zzg\").status.gt(1)\n\t\t\t.status.asc()\n\t\t\t.SELECT().select()){ //SELECT / delete / update\n\t\tSystem.out.println(x);\n\t}\n\t\n \t//Page\n\tPage\u003cUser\u003e page=User.WHERE()\n\t\t.name.like(\"zzg%\")\n\t\t.status.in(1,2,3)\n\t\t.SELECT().selectPage(10,0);\t\n\t\n```\n\n### Query\n\n```java\n\tTestDB.DB.select(\"SELECT * FROM user WHERE name like ?\",\"zzg%\");\n\t\n\tTestDB.DB.createQuery()\n\t\t.add(\"SELECT * FROM user WHERE name like ?\",\"zzg%\")\n\t\t.getList(User.class);\n\t \n```\n\n### DataTable\t\n\n```java\n\tQuery q=new Query(TestDB.DB);\n\tDataTable\u003cDataMap\u003e rs=q.add(\"SELECT * FROM user WHERE name like ?\",\"zzg%\")\n\t .add(\" AND status \").in(1,2,3)\n\t .getList();\n\t \n\t//Query inside DataTable\n\t//SQL: SELECT name, count(*) as cnt FROM _THIS_TABLE WHERE status\u003e=0 GROUP BY name ORDER BY name ASC\n\tDataTable\u003cDataMap\u003e newTable=rs.select(\"name, count(*) as cnt\",\"status\u003e=0\",\"name ASC\",\"GROUP BY name\");\t\n```\n\n### Transaction\n\n```java\n\t//transaction\n\tTx.execute(new Tx.Atom() {\n\t\tpublic int execute() {\n\t\t\tnew User().setName(\"name001\").setStatus(1).save();\n\t\t\tnew User().setName(\"name002\").setStatus(2).save();\n\t\t\t//... other database operation\n\t\t\treturn 0;\n\t\t}\n\t});\n```\n\n### Record\n\n```java\n\t//Dynamic model: Record\n\tRecord r=new Record(\"user\").use(TestDB.DB);\n\tr.set(\"name\", \"jjyy\").set(\"status\",1)\n\t .save();\n\t\t\n\t//SQL: SELECT * FROM `user` WHERE (`name` like 'jjyy%' AND `status` \u003e= 0)\n\t//                             OR (`name` = 'zzg' AND `status` \u003e 1) ORDER BY `status` ASC \n\tfor(Record x:r.WHERE()\n\t\t\t.field(\"name\").like(\"jjyy%\").field(\"status\").ge(0)\n\t\t\t.OR()\n\t\t\t.field(\"name\").eq(\"zzg\").field(\"status\").gt(1)\n\t\t\t.field(\"status\").asc()\n\t\t\t.SELECT().select()){\n\t\tSystem.out.println(x);\n\t} \n\t\t\n\t//SQL: DELETE FROM `user` WHERE `name` like 'jjyy%' AND `status` \u003e= 0\n\tr.WHERE()\n\t .field(\"name\").like(\"jjyy%\").field(\"status\").ge(0)\n\t .delete();\n```\t\t  \n\n### Sharding\n\n```java\n\tpublic class ShardingUser extends User{\n\t\t//Override\n\t\tpublic Table table(){\n\t\t\tString tableName= \"user_\"+( getId()%10 );\n\t\t\treturn ModelMeta.createTable(tableName);\n\t\t}\n\t\t\n\t\t//Override\n\t\tpublic DBConfig db(){\n\t\t\treturn getId()\u003c10 ? TestDB.DB1 : TestDB.DB2;\n\t\t}\n\t}\n\t\n\tShardingUser user1=new ShardingUser(1);\n\tuser1.save(); //Will be saved to table: user_1, database: TestDB.DB1\n\t\n\tShardingUser user2=new ShardingUser(15);\n\tuser2.save(); //Will be saved to table: user_5, database: TestDB.DB2\n```\t\n\n\n## Multi-line strings\n\nsee [Multiple-line-syntax](https://github.com/11039850/monalisa-orm/wiki/Multiple-line-syntax)\n\n```java\n\tpublic static void main(String[] args) {\n\t\tString name=\"zzg\";\n\t\t\n\t\tString lines = \"\"/**~!{\n\t\t\tSELECT * \n\t\t\t\tFROM user\n\t\t\t\tWHERE name=\"$name\"\n\t\t}*/;\n\t\t\n\t\tSystem.out.println(lines);\n\t}\n```\n\nOutput will be:\n\n```sql\n\tSELECT * \n\t\tFROM user\n\t\tWHERE name=\"zzg\"\n```\n\n\n[Details](https://github.com/11039850/monalisa-orm/wiki)\n\n# Maven: \n```xml\t\n\t\u003cdependency\u003e\n\t\t\u003cgroupId\u003ecom.tsc9526\u003c/groupId\u003e\n\t\t\u003cartifactId\u003emonalisa-orm\u003c/artifactId\u003e\n\t\t\u003cversion\u003e2.1.0\u003c/version\u003e\n\t\u003c/dependency\u003e\n``` \n\n# Change Log\n\n* 2.1.0  Add oracle dialect\n* 2.0.0  Only Mysql     \n    \n# TODO list\n\n* Other database's dialect\n* Automatic refresh the query cache in the background\n* ...\n\n\nIf you have any ideas or you want to help with the development just write me a message.\n\n**zzg zhou**, 11039850@qq.com\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F11039850%2Fmonalisa-orm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F11039850%2Fmonalisa-orm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F11039850%2Fmonalisa-orm/lists"}