• 使用dom4j解析mybatis核心配置文件、SqlMapper配置文件_学习笔记


    笔记来自动力节点 课程。

    1. 解析mybatis核心配置文件“mybatis-config.xml”
    
    DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
    <configuration>
        <environments default="mybatisDB">
            <environment id="powernodeDB">
                <transactionManager type="MANAGED"/>
                <dataSource type="UNPOOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
                    <property name="username" value="root"/>
                    <property name="password" value="root"/>
                dataSource>
            environment>
            <environment id="mybatisDB">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                    <property name="username" value="root"/>
                    <property name="password" value="root"/>
                dataSource>
            environment>
        environments>
        <mappers>
            <mapper resource="CarMapper.xml"/>
        mappers>
    configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    java代码

     @Test
        public void testParseMyBatisConfigXML() throws Exception{
            // 创建SAXReader对象
            SAXReader reader = new SAXReader();
            // 获取输入流
            InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("mybatis-config.xml");
            // 读XML文件,返回document对象。document对象是文档对象,代表了整个XML文件。
            Document document = reader.read(is);
            // 获取文档当中的根标签
            //Element rootElt = document.getRootElement();
            //String rootEltName = rootElt.getName();
            //System.out.println("根节点的名字:" + rootEltName);
    
            //获取default默认的环境id
            // xpath是做标签路径匹配的。能够让我们快速定位XML文件中的元素。
            // 以下的xpath代表了:从根下开始找configuration标签,然后找configuration标签下的子标签environments
            String xpath = "/configuration/environments";
            Element environments = (Element) document.selectSingleNode(xpath); // Element是Node类的子类,方法更多,使用更便捷。
            // 获取属性的值
            String defaultEnvironmentId = environments.attributeValue("default");
            //System.out.println("默认环境的id:" + defaultEnvironmentId);
            // 获取具体的环境environment
            xpath = "/configuration/environments/environment[@id='"+defaultEnvironmentId+"']";
            //System.out.println(xpath);
            Element environment = (Element) document.selectSingleNode(xpath);
            // 获取environment节点下的transactionManager节点(Element的element()方法用来获取孩子节点)
            Element transactionManager = environment.element("transactionManager");
            String transactionType = transactionManager.attributeValue("type");
            System.out.println("事务管理器的类型:" + transactionType);
            // 获取dataSource节点
            Element dataSource = environment.element("dataSource");
            String dataSourceType = dataSource.attributeValue("type");
            System.out.println("数据源的类型:" + dataSourceType);
            // 获取dataSource节点下的所有子节点
            List<Element> propertyElts = dataSource.elements();
            // 遍历
            propertyElts.forEach(propertyElt -> {
                String name = propertyElt.attributeValue("name");
                String value = propertyElt.attributeValue("value");
                System.out.println(name + "=" + value);
            });
            // 获取所有的mapper标签
            // 不想从根下开始获取,你想从任意位置开始,获取所有的某个标签,xpath该这样写
            xpath = "//mapper";
            List<Node> mappers = document.selectNodes(xpath);
            // 遍历
            mappers.forEach(mapper -> {
                Element mapperElt = (Element) mapper;
                String resource = mapperElt.attributeValue("resource");
                System.out.println(resource);
            });
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    1. 解析SqlMapper配置文件“CarMapper.xml”
    
    DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="car">
        <insert id="insertCar">
            insert into t_car values(null,#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType})
        insert>
        <select id="selectById" resultType="com.powernode.mybatis.pojo.Car">
            select
                id,car_num as carNum,brand,guide_price as guidePrice,
                produce_time as produceTime,
                car_type as carType
            from
                t_car
            where
                id = #{id}
        select>
    mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    java代码

        @Test
        public void testParseSqlMapperXML() throws Exception{
            SAXReader reader = new SAXReader();
            InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("CarMapper.xml");
            Document document = reader.read(is);
            // 获取namespace
            String xpath = "/mapper";
            Element mapper = (Element) document.selectSingleNode(xpath);
            String namespace = mapper.attributeValue("namespace");
            System.out.println(namespace);
            // 获取mapper节点下所有的子节点
            List<Element> elements = mapper.elements();
            // 遍历
            elements.forEach(element -> {
                // 获取sqlId
                String id = element.attributeValue("id");
                System.out.println(id);
                // 获取resultType
                String resultType = element.attributeValue("resultType"); // 没有这个属性的话,会自动返回"null"
                System.out.println(resultType);
                // 获取标签中的sql语句(表示获取标签中的文本内容,而且去除前后空白)
                String sql = element.getTextTrim();
                System.out.println(sql);
                // insert into t_car values(null,#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType})
                // insert into t_car values(null,?,?,?,?,?)
                // mybaits封装了jdbc。早晚要执行带有?的sql语句。
                // 转换
                String newSql = sql.replaceAll("#\\{[0-9A-Za-z_$]*}", "?");
                System.out.println(newSql);
            });
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
  • 相关阅读:
    Springboot 之整合(全局异常、响应式封装类、JSR303验证、自定义注解)效验登录状态
    SSM整合
    Casein-PEG-N3 络蛋白-聚乙二醇-叠氮 Casein-azide,供应BSA/HSA/Transferrin修饰叠氮
    windows安装yarn 详细教程
    13个Webpack 优化技巧
    【手写Mybatis】step04:数据源的解析、事务和sql执行
    MySQL中binlog备份脚本分享
    Unity渲染顺序相关学习
    python tempfile 模块使用
    jdbc 数据源(DruidDataSourceFactory)连接池 —— druid
  • 原文地址:https://blog.csdn.net/qq_40084325/article/details/126908620