mybatis坑 和 mybatisplus

傳遞參數問題

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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章