使用Mybatis注解的方式操作数据库

469 阅读1分钟

导读


由于项目需要,这里面使用注解的方式操作数据库。但是在一个对象里面有hashMap时(这里面存放的kay,value分别是数据库的字段名和该字段对应的值),用来更新数据库。

使用


操作

标签操作CODE

  • model层
public class User{
	//*****
    private String userName;
    private HashMap<String,String> dbColumns;
    
    //....get-set

}
  • server层
 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);

  • 普通没有判断的就不需要加标签了

END


chaohen : www.yuque.com/heioky

搞定~