Closed zhangxk-ocean closed 1 year ago
有个ng.join的函数可以用
可以这个举个例子吗,不会用欸
@for ( entry in p ) {
@if ( isNotEmpty( entry.value ) ) {
AND n.person.${ entry.key }
== $p.${ entry.key }
@}
@}
可以看看这个https://graph-cn.github.io/ngbatis-docs/dev-example/built-in-function.html
可以这个举个例子吗,不会用欸 @for ( entry in p ) { @if ( isNotEmpty( entry.value ) ) { AND n.person.
${ entry.key }
== p.{ entry.key } @} @}
dao.java
List<Person> selectByPerson(@Param("p") Person a);
<select id="selectByPerson" resultType="ye.weicheng.ngbatis.demo.pojo.Person">
MATCH (n: person)
WHERE 1 == 1
@for ( entry in p ) {
@if ( isNotEmpty( entry.value ) ) {
AND n.person.${ entry.key } == $p.${ entry.key }
@}
@}
RETURN n
</select>
test.java
Person p = new Person();
p.setName("叶小南");
p.setAge(18);
List<Person> persons = repository.selectByPerson(p);
最终执行的效果等价于:
:param p => {"name":"叶小南","age":18};
MATCH (n: person)
WHERE 1 == 1
AND n.person.name == $p.name
AND n.person.age == $p.age
RETURN n
不同位置的 p 虽然都代表传入的参数,但是意义不同:
两个$
符号的意义也不同,
$p
是数据库的参数标识符,代表从这里开始从参数读取,是 nGQL 语法的一部分${ entry.key }
,${ }
是字符串模板的参数定界符,不是 nGQL 语法的一部分在这个例子中,$p.${ entry.key }
的最终结果是 $p.name
共同组成 nGQL 语法的一部分,执行到数据库中。
如果参数是 Map,这么用就很合适,但如果是实体类做参数,可以考虑使用 基类的 selectBySelective
https://github.com/nebula-contrib/ngbatis/blob/master/src/main/resources/NebulaDaoBasic.xml
基类的实现方式,跟日常开发编写的 xml 几乎是一致的,这里的用法,日常开发也都能用
如果有其他想固化下来的基类操作,欢迎来提 PR。 顺带提下,也可以来给文档PR一下 SpringCloud 的配置例子
@for 怎么实现循环之间加一个逗号呢 类似这种:(), (), ()