导读
由于项目需要,这里面使用注解的方式操作数据库。但是在一个对象里面有hashMap时(这里面存放的kay,value分别是数据库的字段名和该字段对应的值),用来更新数据库。
使用
操作
标签操作CODE
model层 ```java public class User{ //* private String userName; private HashMap
dbColumns; //….get-set
}
- server层
```java
userMapper.updateUserByParams(tableName, partitionName, user);
dao层
@Update(" <script> update ${tableName} partition(${partitionName})" +
"<set>" +
" address=#{user.address}" +
" <if test=\"user.dbColumns!=null and user.dbColumns.size()>0\">" + "," +
" <foreach collection=\"user.dbColumns.entrySet()\" item=\"val\" index= \"key\" separator=\",\">" +
" ${key}=${val}" +
" </foreach>" +
" </if>" +
"</set>" +
"where phone=#{user.phone} and username=#{user.username} and user_email=#{user.email} " +
"</script>")
int updateUserByParams(@Param("tableName") String tableName, @Param("partitionName") String partitionName,
@Param("user") User user);
使用注解的方式做数据操作的时候,如果进行代码标签查询,比如
<if></if>
,<foreach> </foreach>
等,必须加上<script></script>
标签,不然无法识别,并且在进行遍历的时候,特别要注意注入的是#
还是$
。
普通操作CODE
@Select(" select * from ${tableName} partition(${partitionName}) WHERE inserTime >=to_date(#{inserTime},'yyyy-mm-dd hh24:mi:ss') and age >=#{age}")
List<User> queryUserByInsertTime(@Param("tableName") String tableName, @Param("partitionName") String partitionName,
@Param("age") String age, @Param("inserTime") String inserTime);
搞定~