mybatis主要流程和高阶用法简介

这里是引用

一、主要流程

1、通过解析两个xml文件,将他们共同变成一个configuration对象。不同的mapper.xml生成不同的configuration对象

2、通过configuration创建sessionFactory对象

3、再由sessionFactory生成sqlsession对象。它包含一组statement,可以理解为一个方法就是一个会话

4、statement是核心,一次sql语句的执行就是一个statement

5、通过两个handler将参数和结果封装进statement

二、高阶用法

(一)动态sql

主要利用@SelectProvider等注解

1、Dao类

java 复制代码
package com.anmining.truck.dispatch.modules.report.dao;

import com.anmining.truck.dispatch.modules.report.entity.TruckReportData;
import com.anmining.truck.dispatch.modules.report.utils.MapperSql;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;

import java.sql.Timestamp;
import java.util.List;
import java.util.Map;

@Mapper
public interface ReportDao {

   @SelectProvider(type = MapperSql.class, method = "getUnloadAndExcavator")
    List<Map<String, Object>> getUnloadAndExcavator(Map s);
}

2、MapperSql类

java 复制代码
package com.anmining.truck.dispatch.modules.report.utils;



import java.util.List;
import java.util.Map;

public class MapperSql {



    public String getUnloadAndExcavator(Map map) throws IllegalAccessException {
        StringBuilder sql = new StringBuilder();
        List<Map<String,String>> unloadList = (List) map.get("allUnloadName");
        String startTime = map.get("startTime").toString();
        String endTime = map.get("endTime").toString();
        sql.append("select tb.excavator_name,tb.excavator_code,");

        for (int i=0;i<unloadList.size();i++){
            Map unload = unloadList.get(i);
            sql.append("MAX ( CASE tb.unloading_name WHEN '"+unload.get("unloading_name")+"' THEN tb.yield ELSE 0 END ) \""+unload.get("unloading_name")+"\",");
            if (i==unloadList.size()-1){
                //去掉最后的,
                sql.deleteCharAt(sql.length()-1);
            }
        }
        sql.append(" FROM\n" +
                "\t(\n" +
                "\tSELECT\n" +
                "\t\te.excavator_name,\n" +
                "\t\tu.unloading_name,e.excavator_code,\n" +
                "\t\tcount ( w.yield ) yield \n" +
                "\tFROM\n" +
                "\t\tp_workflow_statistical_table w\n" +
                "\t\tLEFT JOIN b_excavator_base_info e ON w.excavator_code = e.excavator_code\n" +
                "\t\tLEFT JOIN b_unloading_base_info u ON w.unloading_code = u.unloading_code\n" +
                "\t\tLEFT JOIN b_truck_base_info T ON w.truck_code = T.truck_code \n" +
                "\tWHERE\n" +
                "\t\tcreate_time >= '" +startTime+"' "+
                "\t\tAND create_time <= '" +endTime+"' "+
                "\tGROUP BY\n" +
                "\t\te.excavator_name,\n" +
                "\t\tu.unloading_name,e.excavator_code \n" +
                "\t) tb \n" +
                "GROUP BY\n" +
                "\ttb.excavator_name,tb.excavator_code  ORDER BY tb.excavator_name");

        return sql.toString();
    }
}

(二)mybatis拦截器

https://blog.csdn.net/qq_36881887/article/details/111589294

相关推荐
风景的人生13 小时前
mybatis映射时候的注意点
java·mybatis
玄〤13 小时前
MyBatis-Plus 核心功能详解:条件构造器、Service 封装与批量优化实践(黑马springcloud微服务课程)(day2)
spring cloud·微服务·mybatis
loading小马18 小时前
Mybatis-Plus超级实用的多种功能用法
java·spring boot·后端·maven·mybatis
高山上有一只小老虎1 天前
mybatisplus分页查询版本 3.5.8 以下和版本 3.5.9及以上的区别
java·spring boot·mybatis
人道领域1 天前
javaWeb从入门到进阶(MyBatis拓展)
java·tomcat·mybatis
J2虾虾1 天前
SpringBoot和mybatis Plus不兼容报错的问题
java·spring boot·mybatis
pp起床2 天前
【苍穹外卖】Day03 菜品管理
java·数据库·mybatis
九皇叔叔2 天前
【01】SpringBoot3 MybatisPlus 工程创建
java·mybatis·springboot3·mybatis plus
BD_Marathon2 天前
MyBatis逆向工程之清晰简洁版
mybatis
九皇叔叔2 天前
【02】SpringBoot3 MybatisPlus 加入日志功能
java·mysql·mybatis·日志·mybatisplus