91 Star 525 Fork 225

kinbug / mybatis-dsc-generator

 / 详情

关于mapper.ftl里自定义sql语句

待办的
创建于  
2022-11-24 16:23

我想在mapper.ftl自定义生成sql语句,然后发现使用#{字段}会报错,有什么解决方法吗

mapper.ftl里添加的内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${daoUrl}.${entityName}Dao">

	<resultMap id="BaseResultMap" type="${entityUrl}.${entityName}">
	<#list cis as ci>
		<id column="${ci.column}" property="${ci.property}" />
	</#list>
	</resultMap>
	<sql id="Base_Column_List">
		${agile}
	</sql>

	<select id="countByName" resultType="java.lang.Integer">
		select count(id) from ${table} where is_delete = 0 and bind_userid=#{userId} and name = #{name}
	</select>

</mapper>

控制台报错

十一月 24, 2022 4:22:19 下午 freemarker.log._JULLoggerFactory$JULLogger error
严重: Error executing FreeMarker template
FreeMarker template error:
The following has evaluated to null or missing:
==> userId  [in template "mapper.ftl" at line 15, column 86]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #{userId}  [in template "mapper.ftl" at line 15, column 84]
----

Java stack trace (for programmers):
----
freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...]
	at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134)
	at freemarker.core.UnexpectedTypeException.newDesciptionBuilder(UnexpectedTypeException.java:85)
	at freemarker.core.UnexpectedTypeException.<init>(UnexpectedTypeException.java:48)
	at freemarker.core.NonNumericalException.<init>(NonNumericalException.java:47)
	at freemarker.core.Expression.modelToNumber(Expression.java:142)
	at freemarker.core.Expression.evalToNumber(Expression.java:135)
	at freemarker.core.NumericalOutput.calculateInterpolatedStringOrMarkup(NumericalOutput.java:78)
	at freemarker.core.NumericalOutput.accept(NumericalOutput.java:66)
	at freemarker.core.Environment.visit(Environment.java:330)
	at freemarker.core.Environment.visit(Environment.java:336)
	at freemarker.core.Environment.process(Environment.java:309)
	at freemarker.template.Template.process(Template.java:384)
	at com.gitee.flying.cattle.mdg.util.FreemarkerUtil.createFile(FreemarkerUtil.java:61)
	at com.gitee.flying.cattle.mdg.util.Generator.createDaoImpl(Generator.java:59)
	at com.flying.cattle.mdg.MyGenerator.main(MyGenerator.java:61)

FreeMarker template error:
The following has evaluated to null or missing:
==> userId  [in template "mapper.ftl" at line 15, column 86]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #{userId}  [in template "mapper.ftl" at line 15, column 84]
----

Java stack trace (for programmers):
----
freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...]
	at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134)
	at freemarker.core.UnexpectedTypeException.newDesciptionBuilder(UnexpectedTypeException.java:85)
	at freemarker.core.UnexpectedTypeException.<init>(UnexpectedTypeException.java:48)
	at freemarker.core.NonNumericalException.<init>(NonNumericalException.java:47)
	at freemarker.core.Expression.modelToNumber(Expression.java:142)
	at freemarker.core.Expression.evalToNumber(Expression.java:135)
	at freemarker.core.NumericalOutput.calculateInterpolatedStringOrMarkup(NumericalOutput.java:78)
	at freemarker.core.NumericalOutput.accept(NumericalOutput.java:66)
	at freemarker.core.Environment.visit(Environment.java:330)
	at freemarker.core.Environment.visit(Environment.java:336)
	at freemarker.core.Environment.process(Environment.java:309)
	at freemarker.template.Template.process(Template.java:384)
	at com.gitee.flying.cattle.mdg.util.FreemarkerUtil.createFile(FreemarkerUtil.java:61)
	at com.gitee.flying.cattle.mdg.util.Generator.createDaoImpl(Generator.java:59)
	at com.flying.cattle.mdg.MyGenerator.main(MyGenerator.java:61)
ResultJson(code=-1, message=已经存在MonitorInfo.java, data=null)
ResultJson(code=-1, message=已经存在MonitorInfoMapper.java, data=null)
ResultJson(code=-1, message=创建MonitorInfoMapper.xml失败, data=null)
ResultJson(code=-1, message=已经存在MonitorInfoService.java, data=null)
ResultJson(code=-1, message=已经存在MonitorInfoServiceImpl.java, data=null)
ResultJson(code=-1, message=已经存在MonitorInfoController.java, data=null)
ResultJson(code=-1, message=已经存在MonitorInfoSwaggerConfig.ftl, data=null)

Process finished with exit code 0

生成的xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yh.tg.tg.mapper.MonitorInfoDao">

	<resultMap id="BaseResultMap" type="com.yh.tg.tg.model.MonitorInfo">
		<id column="id" property="id" />
		<id column="create_time" property="createTime" />
		<id column="create_user_id" property="createUserId" />
		<id column="update_time" property="updateTime" />
		<id column="update_user_id" property="updateUserId" />
		<id column="is_enable" property="isEnable" />
		<id column="is_delete" property="isDelete" />
		<id column="uid" property="uid" />
		<id column="queue_name" property="queueName" />
		<id column="container_id" property="containerId" />
		<id column="status" property="status" />
		<id column="stop_url" property="stopUrl" />
		<id column="start_url" property="startUrl" />
		<id column="active_consumer_count" property="activeConsumerCount" />
		<id column="get_thread_pool" property="getThreadPool" />
		<id column="edit_thread_pool" property="editThreadPool" />
	</resultMap>
	<sql id="Base_Column_List">
		id, create_time, create_user_id, update_time, update_user_id, is_enable, is_delete, uid, queue_name, container_id, status, stop_url, start_url, active_consumer_count, get_thread_pool, edit_thread_pool
	</sql>

	<select id="countByName" resultType="java.lang.Integer">
		select count(id) from monitor_info where is_delete = 0 and bind_userid=FreeMarker template error (DEBUG mode; use RETHROW in production!):
The following has evaluated to null or missing:
==> userId  [in template "mapper.ftl" at line 15, column 86]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #{userId}  [in template "mapper.ftl" at line 15, column 84]
----

Java stack trace (for programmers):
----
freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...]
	at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134)
	at freemarker.core.UnexpectedTypeException.newDesciptionBuilder(UnexpectedTypeException.java:85)
	at freemarker.core.UnexpectedTypeException.<init>(UnexpectedTypeException.java:48)
	at freemarker.core.NonNumericalException.<init>(NonNumericalException.java:47)
	at freemarker.core.Expression.modelToNumber(Expression.java:142)
	at freemarker.core.Expression.evalToNumber(Expression.java:135)
	at freemarker.core.NumericalOutput.calculateInterpolatedStringOrMarkup(NumericalOutput.java:78)
	at freemarker.core.NumericalOutput.accept(NumericalOutput.java:66)
	at freemarker.core.Environment.visit(Environment.java:330)
	at freemarker.core.Environment.visit(Environment.java:336)
	at freemarker.core.Environment.process(Environment.java:309)
	at freemarker.template.Template.process(Template.java:384)
	at com.gitee.flying.cattle.mdg.util.FreemarkerUtil.createFile(FreemarkerUtil.java:61)
	at com.gitee.flying.cattle.mdg.util.Generator.createDaoImpl(Generator.java:59)
	at com.flying.cattle.mdg.MyGenerator.main(MyGenerator.java:61)

评论 (0)

鱼刺 创建了任务

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
Java
1
https://gitee.com/flying-cattle/mybatis-dsc-generator.git
git@gitee.com:flying-cattle/mybatis-dsc-generator.git
flying-cattle
mybatis-dsc-generator
mybatis-dsc-generator

搜索帮助