MyBatis中的${}和#{}

#{}:其作用相当于占位符,MyBatis会将里面的参数解析成一个字符串,比如,select * from table where name = #{name},当传入的name为小李,则执行的SQL为select * from table where name = '小李'。预编译,和JDBC的prepareStatement一样,无法进行SQL注入。

${}:其作用是直接拼接参数的值到SQL语句中,而不对其加上单引号,比如,order by ${argu},当传入的argu为age时,执行的SQL为order by age。

 

${}、#{}的使用举例:

示例一:获取用户在一段时间内某种设备的登录时间

后端Controller

@RequestMapping(value = "/getStatisticsData", method = RequestMethod.GET, produces = "application/json;charset=utf8")
public List getStatisticsData(Long startTime, Long endTime, String argu) {
    List result = mapper.getSum(getTableName(), startTime, endTime, argu);
    return result;
}

Mapper接口:

List getSum(@Param("table") String table,
                        @Param("start") String startTime,
                        @Param("end") String endTime,
                        @Param("tpType") String argu);

Mapper.xml:

tpType可以是使用移动设备(平板/手机)登录的时间,也可以是使用电脑登录的时间

 

 

示例二:获取用户一段时间内每天(可能有几条数据)使用某种设备的登录时间

 

注意:如果某个分组不只一条数据,即时不使用avg等函数,得到的各个分组中依然只有一条数据,并且其字段是该分组所有数据中的一条的值。

 

示例三:带有过滤条件的查询

 

    
        
            
        
        
            = #{start}
            ]]>
        
        
            
        
    


    order by `time` asc limit #{start}, #{count}

 

示例四:单条插入&批量插入

单条插入


    insert into ${table}(
        username, `time`, line90, line95, line99
    )
    values(
        #{data.username}, #{data.time}, #{data.line90}, #{data.line95}, #{data.line99}
    )
 

批量插入


    insert into ${table}(
        username, `time`, line90, line95, line99
    )
    values
    
        (
        #{data.username}, #{data.time}, #{data.line90}, #{data.line95}, #{data.line99}
        )
    
 

 

示例五:单条删除&批量删除

单条删除


    delete from ${table} where id=#{id}
 

批量删除


    delete from ${table} where id in 
    
        #{id}
    
 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(MyBatis,mybatis,mysql,java)