Cenyol Jekyll

A blog-orientation theme for Jekyll

Vno Jekyll is a port of my Ghost theme vno.


Download the theme

MyBatis常用的一些XML元素

Driver中的Url配置

如果需要update操作返回的受影响的行数,那么需要在url后面加个useAffectedRows=true参数,如:

jdbc:mysql://${db.host}:${db.port}/${db.database}?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useAffectedRows=true

不然默认情况下,update返回表示的是匹配的行数,不管有没有记录发生变化。

传入到dao里面不过是object还是map都可以直接使用其中的字段名或者key来引用

List<GoodsOperationRecordPO> getByIds(SearchHistoryParams params);
<select id="getByIds" parameterType="list" resultType="GoodsOperationRecordPO">
    SELECT * FROM tb_goods_operation WHERE id in
    <foreach item="item" index="index" collection="opIds" open="(" separator="," close=")">
        #{item}
    </foreach>
    ORDER BY id DESC LIMIT #{pageSize} OFFSET #{offset}
</select>

上述#{}中和foreach的collection中都是直接使用了object的字段名来引用的,不需要写明其实例名,如#{params.pageSize}等价于#{pageSize},map类似。

动态XML SQL语法

这三个标签的作用同Java里面的switch语句,等价于switch case default,用于多个取其中一个条件的情况下。 的作用是用于多个可选的情况下,可全要、可部分也可都不要。这个组合比上述switch的组合有个优点就是,它可以自动去除and关键字。比如: ``` ``` 虽然第一个if里面有个and,当所有的if都成立时,where标签会自动去除第一个条件前面的and,因为它懂得,而switch组合就不懂了。它往往需要在前面加个没有and的查询条件,比如下: ``` ``` ### #{}和${}的区别 引用Stack Overflow上的一个回答 > By default, using the #{} syntax will cause MyBatis to generate PreparedStatement properties and set the values safely against the PreparedStatement parameters (e.g. ?). While this is safer, faster and almost always preferred, sometimes you just want to directly inject a string unmodified into the SQL Statement. For example, for ORDER BY, you might use something like this: > ORDER BY ${columnName} > Here MyBatis won't modify or escape the string. > NOTE It's not safe to accept input from a user and supply it to a statement unmodified in this way. This leads to potential SQL Injection attacks and therefore you should either disallow user input in these fields, or always perform your own escapes and checks. 通俗的讲就是#{}等价于Java中的PreparedStatement所产生的效果,它具有更快、更安全的效果,但是有时候,可能需要直接插入,不经过任何通配符或者预处理。就可以直接使用${},这种方式存在被注入的风险。 ### 参考 - [Dynamic SQL](http://www.mybatis.org/mybatis-3/dynamic-sql.html) - [mybatis 多参数 list和String](https://blog.csdn.net/u010913106/article/details/50538379) - [When to use $ vs #?](https://stackoverflow.com/questions/39954300/when-to-use-vs)
最近的文章

一些不错的技术博客收藏

Java 提高篇 文集 系列文章是小编原创的第一个系列文章,熟悉小编的人都知道,小编最喜欢写系列文章了。这个系列为 Java 基础入门的最佳系列文章,一共 38 篇,如果认真、仔细读一定会有收获!!Java优质系列博客Tomcat相关 Tomcat 是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP...…

继续阅读
更早的文章

再说Swagger - 接口文档神器

问题对我来说是第一次接触到Swagger,之前的几个项目接口文档要么直接写在README.md里面,要么使用GitBook来共享,也挺方便的,但是当到了联调测试阶段,接口难免会更改比较频繁,所以不得不每次修改完代码,还要在README或者GitBook里面找到对应的地方在改一遍,一两次还好,次数多了就不爱了。解决相比之下,Swagger将接口的说明信息通过注解的形式与接口代码仅仅耦合在一起,改代码的时候可以一并改相关的说明信息,省去了翻阅README文档的麻烦,改起来较为省力,而且还能随便...…

继续阅读