{"id":17299750,"url":"https://github.com/threefish/nutz-sqltpl","last_synced_at":"2025-10-18T19:23:00.331Z","repository":{"id":44858590,"uuid":"171449672","full_name":"threefish/nutz-sqltpl","owner":"threefish","description":"nutz中使用xml管理sql模版（默认beetl引擎渲染，可自定义扩展为其他模版引擎）","archived":false,"fork":false,"pushed_at":"2022-01-21T23:23:43.000Z","size":84,"stargazers_count":10,"open_issues_count":2,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-28T01:50:40.804Z","etag":null,"topics":[],"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/threefish.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}},"created_at":"2019-02-19T10:00:31.000Z","updated_at":"2021-12-30T11:10:22.000Z","dependencies_parsed_at":"2022-08-29T22:50:16.047Z","dependency_job_id":null,"html_url":"https://github.com/threefish/nutz-sqltpl","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/threefish%2Fnutz-sqltpl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/threefish%2Fnutz-sqltpl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/threefish%2Fnutz-sqltpl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/threefish%2Fnutz-sqltpl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/threefish","download_url":"https://codeload.github.com/threefish/nutz-sqltpl/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248881978,"owners_count":21176950,"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":[],"created_at":"2024-10-15T11:23:32.815Z","updated_at":"2025-10-18T19:23:00.213Z","avatar_url":"https://github.com/threefish.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"nutz-sqltpl SQL模板实现\n==================================\n### 配合[NutzCodeInsight](https://plugins.jetbrains.com/plugin/10311-nutzcodeinsight)插件使用更香\n[源码](https://github.com/threefish/nutz-sqltpl)\n\n### 支持多种模板引擎\n\n默认采用beetl引擎（注意,这不是与BeetlSql的集成），其他模版引擎可以自己扩展，详情看源码\n\n\n### [spring 版本请看这里](https://gitee.com/threefish/spring-boot-sqltpl)\n\n### 用法\n- 然后在pom.xml中\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.github.threefish\u003c/groupId\u003e\n  \u003cartifactId\u003enutz-sqltpl\u003c/artifactId\u003e\n  \u003cversion\u003e最新版本\u003c/version\u003e\n\u003c/dependency\u003e\n```\nmaven坐标 [https://mvnrepository.com/artifact/com.github.threefish/nutz-sqltpl](https://mvnrepository.com/artifact/com.github.threefish/nutz-sqltpl)\n##### 然后在ioc.js中\n```javascript\nvar ioc = {\n   sqlTplIocEventListener: {\n           type: \"com.github.threefish.nutz.sqltpl.SqlTplIocEventListener\",\n           args: [{refer: '$ioc'}]\n       },\n       beetlSqlTemplteEngineImpl: {\n           type: \"com.github.threefish.nutz.sqltpl.templte.beetl.BeetlSqlTemplteEngineImpl\",\n           events: {\n               create: \"init\"\n           },\n           fields: {\n                statementStart : \"\u003cexp\u003e\",//可修改(如需要使用xmltag的只支持\u003cexp\u003e\u003c/exp\u003e xml tag,不支持其他xml tag)\n                statementEnd :\"\u003c/exp\u003e\"//可修改\n            }\n       }\n    }\n}\n```\n\n然后，在MainSetup.init内加入下面的语句, 启用热加载\n\n```java\nSqlsTplHolder.DEVELOPER_MODE = true;\n```\n\n#### 简单用法\n\n```java\n@SqlsXml(\"Bean1.xml\")\npublic class Bean1 implements ISqlTpl {\n\n    private SqlsTplHolder sqlsTplHolder;\n\n    @Override\n    public SqlsTplHolder getSqlTplHolder() {\n        return this.sqlsTplHolder;\n    }\n\n    @Override\n    public void setSqlTpl(SqlsTplHolder sqlsTplHolder) {\n        this.sqlsTplHolder = sqlsTplHolder;\n    }\n}\n```\n\n\n#### 复杂用法,你需要一个Service文件 实现 ISqlDaoExecuteService 接口\n\n```java\n@IocBean(args = {\"refer:dao\"}, name = \"companyService\")\n@SqlsXml(\"CompanyService.xml\")\npublic class CompanyServiceImpl extends BaseServiceImpl\u003cCompany\u003e implements ISqlTpl, CompanyService, ISqlDaoExecuteService {\n    /**\n    * 1、我是必须要有的\n    * 2、可以不实现 ISqlDaoExecuteService 接口，用 SqlsTplHolder 直接渲染sql自己再进行操作\n    */\n    private SqlsTplHolder sqlsTplHolder;\n\n    public CompanyServiceImpl(Dao dao) {\n        super(dao);\n    }\n\n    @Override\n    public SqlsTplHolder getSqlsTplHolder() {\n        return this.sqlsTplHolder;\n    }\n\n\n    @Override\n    public SqlsTplHolder getSqlTplHolder() {\n        return this.sqlsTplHolder;\n    }\n\n    @Override\n    public void setSqlTpl(SqlsTplHolder sqlsTplHolder) {\n        this.sqlsTplHolder = sqlsTplHolder;\n    }\n\n\n    @Override\n    public Dao getDao() {\n        return dao;\n    }\n\n    @Override\n    public Entity getEntity() {\n        return super.getEntity();\n    }\n\n    @Override\n    public Class getEntityClass() {\n        return super.getEntityClass();\n    }\n    /**\n     *  分页查询列表\n     * @param param\n     * @param pager\n     * @return \n     */\n    @Override\n    public List\u003cNutMap\u003e queryAllBySql(NutMap param, Pager pager) {\n        //此处queryAll对应\n        return queryMapBySql(\"queryAll\", param);\n    }\n}\n\n\n```\n你需要一个XML文件来管理当前service的Sql（请把我和CompanyServiceImpl放在一起，或采用相对路径自己摸索）\n#### 当模版语法 \u003cexp\u003e if()... for()...等等 \u003c/exp\u003e 取值表达式 ${}\n来看一下例子\n```xml\n   \u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n   \u003c!DOCTYPE Sqls PUBLIC \"nutz-sqltpl\"\n           \"https://threefish.gitee.io/nutz-sqltpl/nutz-sqltpl.dtd\"\u003e\n   \u003cSqls\u003e\n        \u003c!--var是当前文件的共享变量，var中不能有表达式--\u003e\n       \u003cvar name=\"tableName\"\u003elogistics_company\u003c/var\u003e\n       \u003c!--wrap=true 表示将会清除换行符\\n 默认不清除--\u003e\n       \u003csql id=\"queryAll\" wrap=\"true\"\u003e\n           SELECT * from ${tableName}\n           \u003cexp\u003e if(isNotEmpty(name)){ \u003c/exp\u003e\n           where name like @name\n           \u003cexp\u003e}\u003c/exp\u003e\n       \u003c/sql\u003e\n   \u003c/Sqls\u003e\n```\n![NutzCodeInsight](https://github.com/threefish/NutzCodeInsight/raw/master/image/NutzSqlTpl.gif)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthreefish%2Fnutz-sqltpl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthreefish%2Fnutz-sqltpl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthreefish%2Fnutz-sqltpl/lists"}