# nutz-sqltpl **Repository Path**: threefish/nutz-sqltpl ## Basic Information - **Project Name**: nutz-sqltpl - **Description**: 类似MyBatais方式的SqlXML模板管理渲染插件,不含ORM - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 2 - **Created**: 2019-02-22 - **Last Updated**: 2022-11-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README nutz-sqltpl SQL模板实现 ================================== ### 配合[NutzCodeInsight](https://plugins.jetbrains.com/plugin/10311-nutzcodeinsight)插件使用更香 [源码](https://github.com/threefish/nutz-sqltpl) ### 支持多种模板引擎 默认采用beetl引擎(注意,这不是与BeetlSql的集成),其他模版引擎可以自己扩展,详情看源码 ### [spring 版本请看这里](https://gitee.com/threefish/spring-boot-sqltpl) ### 用法 - 然后在pom.xml中 ```xml com.github.threefish nutz-sqltpl 最新版本 ``` maven坐标 [https://mvnrepository.com/artifact/com.github.threefish/nutz-sqltpl](https://mvnrepository.com/artifact/com.github.threefish/nutz-sqltpl) ##### 然后在ioc.js中 ```javascript var ioc = { sqlTplIocEventListener: { type: "com.github.threefish.nutz.sqltpl.SqlTplIocEventListener", args: [{refer: '$ioc'}] }, beetlSqlTemplteEngineImpl: { type: "com.github.threefish.nutz.sqltpl.templte.beetl.BeetlSqlTemplteEngineImpl", events: { create: "init" }, fields: { statementStart : "",//可修改(如需要使用xmltag的只支持 xml tag,不支持其他xml tag) statementEnd :""//可修改 } } } } ``` 然后,在MainSetup.init内加入下面的语句, 启用热加载 ```java SqlsTplHolder.DEVELOPER_MODE = true; ``` #### 简单用法 ```java @SqlsXml("Bean1.xml") public class Bean1 implements ISqlTpl { private SqlsTplHolder sqlsTplHolder; @Override public SqlsTplHolder getSqlTplHolder() { return this.sqlsTplHolder; } @Override public void setSqlTpl(SqlsTplHolder sqlsTplHolder) { this.sqlsTplHolder = sqlsTplHolder; } } ``` #### 复杂用法,你需要一个Service文件 实现 ISqlDaoExecuteService 接口 ```java @IocBean(args = {"refer:dao"}, name = "companyService") @SqlsXml("CompanyService.xml") public class CompanyServiceImpl extends BaseServiceImpl implements ISqlTpl, CompanyService, ISqlDaoExecuteService { /** * 1、我是必须要有的 * 2、可以不实现 ISqlDaoExecuteService 接口,用 SqlsTplHolder 直接渲染sql自己再进行操作 */ private SqlsTplHolder sqlsTplHolder; public CompanyServiceImpl(Dao dao) { super(dao); } @Override public SqlsTplHolder getSqlsTplHolder() { return this.sqlsTplHolder; } @Override public SqlsTplHolder getSqlTplHolder() { return this.sqlsTplHolder; } @Override public void setSqlTpl(SqlsTplHolder sqlsTplHolder) { this.sqlsTplHolder = sqlsTplHolder; } @Override public Dao getDao() { return dao; } @Override public Entity getEntity() { return super.getEntity(); } @Override public Class getEntityClass() { return super.getEntityClass(); } /** * 分页查询列表 * @param param * @param pager * @return */ @Override public List queryAllBySql(NutMap param, Pager pager) { //此处queryAll对应 return queryMapBySql("queryAll", param); } } ``` 你需要一个XML文件来管理当前service的Sql(请把我和CompanyServiceImpl放在一起,或采用相对路径自己摸索) #### 当模版语法 if()... for()...等等 取值表达式 ${} 来看一下例子 ```xml logistics_company SELECT * from ${tableName} if(isNotEmpty(name)){ where name like @name } ``` ![NutzCodeInsight](https://github.com/threefish/NutzCodeInsight/raw/master/image/NutzSqlTpl.gif)