傳遞參數問題
List<String> selectNetworkByIdAndIp(@Param("networkId")int networkId, @Param("dIp")String dIp);
<select id="selectNetworkByIdAndIp" resultType="java.lang.String"> select raw_log from base_syslog_original_network where original_network_id > (#{networkId} - 40) and d_ip = #{dIp} ORDER BY original_network_id limit 40 </select>
<!-- 是否開啓自動駝峯命名規則(camel case)映射, -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
risk_grade -> riskGrade
mybatis配置文件設置了這項後,查詢出來的字段如果帶下劃線,那麼就會去掉下劃線,然後採用java駝峯規則
解決
要麼採用resultMap
要麼禁用掉駝峯規則(不建議禁用)。
改實體
分頁返回total爲0!!!
/**
* 不加入這個分頁攔截器,返回的total和pages都爲0
*/
@EnableTransactionManagement
@Configuration
@MapperScan("com.uestc.netsecurity.mapper")
public class MybatisPlusConfig {
/**
* mybatis-plus分頁插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor page = new PaginationInterceptor();
page.setDialectType("mysql");
return page;
}
/**
* SQL執行效率插件
* 性能分析攔截器,用於輸出每條 SQL 語句及其執行時間
*/
@Bean
//@Profile({"dev","test"})// 設置 dev test 環境開啓
public PerformanceInterceptor performanceInterceptor() {
return new PerformanceInterceptor();
}
}
foreach坑
<foreach collection="idList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
collection -------- 接收的數組(入參)
index -------- 循環體中的具體對象的序號 item -------- 循環體中的具體對象
open -------- 開始符號 close -------- 關閉符號 separator ------ 分割符號
對象中list paramPI.netStruct
where條件中
<if test="paramPI.netStruct != null">
<foreach collection="paramPI.netStruct" index="index" item="item" >
AND d_ip_num >= #{item.startIp}
AND #{item.endIp} >= d_ip_num
</foreach>
</if>
<insert id="insterSecurityPL" parameterType="java.util.List" >
insert into base_syslog_security(asset_id,type,d_ip,d_port,d_ip_num,s_ip,s_port,s_ip_num,url,account,method,common_des,operation_class,operation_result,operation_des,
raw_log,severity,risk_grade,risk_type,risk_des,happen_time,status,create_time) values
<foreach collection="list" index="index" item="item" separator=",">
(
#{item.asset_id}, #{item.type}, #{item.d_ip}, #{item.d_port},#{item.d_ip_num}, #{item.s_ip}, #{item.s_port}, #{item.s_ip_num},#{item.url}, #{item.account},
#{item.method},#{item.common_des}, #{item.operation_class}, #{item.operation_result}, #{item.operation_des}, #{item.raw_log}, #{item.severity},
#{item.risk_grade}, #{item.risk_type}, #{item.risk_des}, #{item.happen_time}, #{item.status},NOW()
)
</foreach>
</insert>
public boolean saveBatch(Collection<T> entityList, int batchSize) mybatisplus的批量操作,大於batchSize時。batchSqlSession.flushStatements()
<if test="paramPI.netStruct != null">
AND
<foreach collection="paramPI.netStruct" index="index" item="item" open="(" separator="OR" close=")">
(d_ip_num >= #{item.startIp} AND #{item.endIp} >= d_ip_num)
</foreach>
</if>
https://blog.csdn.net/coralime/article/details/90474297
1. 如果只有單個參數,使用#{}佔位符即可。
2. 如果多個參數可以使用Param註解傳遞參數。
3. 如果參數太多,可以使用JavaBean,#{key}的key對應Javabean的字段。
QueryWrapper<SyslogSecuritySystem> systemhighQueryWrapper = new QueryWrapper<>();
systemhighQueryWrapper.select(" COUNT(d_ip) as counts , d_ip , asset_id");
systemhighQueryWrapper.lambda().eq(SyslogSecuritySystem::getRiskGrade,2);
systemhighQueryWrapper.groupBy("d_ip");
systemhighQueryWrapper.last("limit 5");
Map<String, Object> systemlisthigh = iSyslogSecuritySystemService.getMap(systemhighQueryWrapper);
int counts = ((Long) systemlisthigh.get("counts")).intValue();