动力节点Mybatis (5)

本文介绍了如何使用dom4j解析XML配置文件来实现MyBatis框架的基本功能,包括引入依赖,编写Mybatis-config.xml和CarMapper.xml,然后通过SAXReader进行XML解析,获取数据库连接信息及SQL映射语句。
摘要由CSDN通过智能技术生成

五、⼿写MyBatis框架(掌握原理)

5.1 dom4j解析XML⽂件

模块名:parse-xml-by-dom 4 j(普通的Java Maven模块)
第⼀步:引⼊dom 4 j的依赖
    <packaging>jar</packaging>
    <dependencies>
        <!--  dom4j的依赖      -->
        <dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>2.1.3</version>
        </dependency>

        <!--jaxen依赖-->
        <dependency>
            <groupId>jaxen</groupId>
            <artifactId>jaxen</artifactId>
            <version>1.2.0</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
第⼆步:编写配置⽂件Mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="powernodeDB">
        <environment id="powernodeDB">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <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="r38153"/>
            </dataSource>
        </environment>

        <!--  这是Mybatis的另一个环境,连接的数据库是mybatis      -->
        <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="r38153"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- 加载前面编写的SQL语句的文件 -->
        <mapper resource="CarMapper.xml"/>
    </mappers>

</configuration>
第三步:解析mybatis-config.xml
@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);  //根节点的名字:configuration

        //获取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);    //默认环境的id:powernodeDB

        //获取具体的环境environment
        xpath = "/configuration/environments/environment[@id='" + defaultEnvironmentId + "']";
        Element environment = (Element) document.selectSingleNode(xpath);
        //获取属性的值
        String id = environment.attributeValue("id");
        System.out.println(id); //powernodeDB

        //获取environment节点下的transactionManager节点 (element()方法用来获取孩子节点)
        Element transactionManager = environment.element("transactionManager");
        String transactionType = transactionManager.attributeValue("type");
        System.out.println("事物管理器类型:"+transactionType); //事物管理器类型:JDBC

        //获取datasource节点
        Element dataSource = environment.element("dataSource");
        String dataSourceType = dataSource.attributeValue("type");
        System.out.println("数据源的类型:"+dataSourceType);  //数据资源的类型:POOLED

        //获取dataSource节点下的所有子节点
        List<Element> propertyElts = dataSource.elements();
        propertyElts.forEach(propertyElt ->{
            String name = propertyElt.attributeValue("name");
            String value = propertyElt.attributeValue("value");
            System.out.println(name + ":" + value);//username:root   password:r38153
        });

        //获取所有的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);   //CarMapper.xml
        });
    }
第四步:编写配置⽂件Carmapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!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.powenode.mybatis.bean.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>
第五步:解析Carmapper.xml
  @Test
    public void testParseSqlMapperXML() throws Exception{
        //创建SAXReader对象
        SAXReader reader = new SAXReader();
        //获取输入流
        InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("CarMapper.xml");
        //读XML文件,返回document对象,document对象是文档对象,代表了整个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);  //car

        //获取mapper节点下的所有的子节点
        List<Element> elements = mapper.elements();
        elements.forEach(element -> {
            //获取sqlId
            String id = element.attributeValue("id");
            System.out.println(id);
//            insertCar
//            selectById

            //获取resultType
            String resultType = element.attributeValue("resultType");   //没有这个属性的话,会返回"null"
            System.out.println(resultType);
            //null
            //com.powenode.mybatis.bean.Car

            //获取标签中的sql语句(表示获取标签中的文本内容,而且去除前后空白)
            String sql = element.getTextTrim();
            System.out.println(sql);
            //insert into t_car values (null,#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType})
            //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}

            //想直接转成insert into t_car values (null,?,?,?,?,?)
            String newSql = sql.replaceAll("#\\{[0-9A-Za-z_$]*}", "?");
            System.out.println(newSql); //insert into t_car values (null,?,?,?,?,?)

        });
    }

5.2 GodBatis

基于MMSkeleton工具包中的ST-GCN模型实现一种基于动态拓扑图的人体骨架动作识别算法python源码+使用说明.zip 改进ST-GCN模型的骨架拓扑图构建部分,使用持续学习思想动态构建人体骨架拓扑图. 将具有多关系特性的人体骨架序列数据重新编码为关系三元组, 并基于长短期记忆网络, 通过解耦合的方式学习特征嵌入. 当处理新骨架关系三元组时, 使用部分更新机制 动态构建人体骨架拓扑图, 将拓扑图送入ST-GCN进行动作识别。 运行MMSKeleton工具包参考[GETTING_STARTED.md](./doc/GETTING_STARTED.md) - 单独使用ST-GCN模型进行人体动作识别参考[START_RECOGNITION.md](./doc/START_RECOGNITION.md) - 训练基于动态拓扑图的人体骨架动作识别算法 ``` shell cd DTG-SHR python ./mmskeleton/fewrel/test_lifelong_model.py ``` - 测试基于动态拓扑图的人体骨架动作识别算法 ``` shell cd DTG-SHR python ./mmskeleton/fewrel/train_lifelong_model.py ``` - 可视化算法运行结果 基于web server搭建前端 [[参考]](https://blog.csdn.net/gzq0723/article/details/113488110) 1、前端模块:包含 'static与'templates'文件夹为界面展示相关的代码。 templates里面包含了两个html的结构文档,用来定义浏览器的显示界面。 static里面的css和img用来修饰界面。 2、服务模块: servel.py里面是web服务的一个业务逻辑。 运行算法性能可视化web服务 ``` shell cd DTG-SHR python ./server.py ``` 【备注】 1、该资源内项目代码百分百可运行,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值