Mybatis

一、其他的配置

        1.开启驼峰转换

        2.具体指定需要使用的日志(存在多个日志)

           可以不指定,但是会按照下面的找,我们还是需要导入自己使用的日志依赖和日志配置文件

        MyBatis框架内置日志工厂。日志工厂负责自动加载项目中配置的日志。MyBatis支持以下日志,当存在多个日志工具时,严格按照从上往下顺序使用,且只会使用一个。

  • SLF4J

  • Apache Commons Logging

  • Log4j 2

  • Log4j (deprecated since 3.5.9)

  • JDK logging

        3.为实体类定义别名

        4.加载映射文件

<?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>
    <!--
        这些属性可以在外部进行配置,并可以进行动态替换。
        你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置
    -->
    <properties resource="config.properties" />
    <settings>
        <!-- 驼峰命名与下划线自动转换 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- log日志 -->
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <typeAliases>
        <!--
            别名
            type	类的完全限定名
            alias	别名
        -->
        <!--为某个类指定别名-->
        <!--<typeAlias alias="person" type="com.lihaozhe.pojo.Person"/>-->
        <!--为某个包下的所有类指定别名 别名默认为类的首字母小写之后的字符串-->
        <package name="com.lihaozhe.pojo"/>
    </typeAliases>
    <!--
        MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。
        例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。
    -->
    <!--默认使用的环境 ID(比如:default="development")。-->
    <environments default="development">
        <!--每个 environment 元素定义的环境 ID(比如:id="development")。-->
        <environment id="development">
            <!--事务管理器的配置(比如:type="JDBC")。-->
            <!--
                事务管理器(transactionManager)
                在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):
                JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
                MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。
                默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。
                如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。
                这两种事务管理器类型都不需要设置任何属性。它们其实是类型别名,换句话说,你可以用 TransactionFactory 接口实现类的全限定名或类型别名代替它们。
            -->
            <transactionManager type="JDBC"/>
            <!--数据源的配置(比如:type="POOLED")-->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>

    </environments>
    <mappers>
        <!-- 使用相对于类路径的资源引用 -->
        <!--单独加载某个映射配置文件-->
        <!--<mapper resource="mybatis/mapper/PersonMapper.xml"/>-->
        <!-- 使用完全限定资源定位符(URL) -->
        <!--<mapper url="file:///home/lhz/mybatis/src/main/resources/com/lihaozhe/mapper/PersonMapper.xml"/>-->
        <!--<mapper url="file:///D:/mybatis/src/main/resources/com/lihaozhe/mapper/PersonMapper.xml"/>-->
        <!--加载某包下所有的映射配置文件-->
        <package name="com.lihaozhe.mapper"/>
    </mappers>

</configuration>

二、接口绑定

1.技术介绍:

1.我们之前使用Mybatis,是直接使用sqlsession对象调用各种封装的方法,去拿到我们Mapper中sql去与数据库做交互。(缺点:需要用一次就创建一个sqlsession对象)

2.以前我们是创建一个dao层去数据库做交互,直接创建一个dao实现类对象就可以调用各种自己写的方去与数据库交互(优点:创建一个对象,多次调用)

3.Mybatis中则提供了一种技术

        通过SqlSession的getMapper方法产生接口的动态代理对象。然后通过对象调用接口中提供的功能。 在将接口中的方法与对应的Mapper.xml中的sql关联。

总之:1.我们先用sqlsession对象获得接口的代理对象mapper

           2.通过接口的代理对象mapper调用接口中写的方法

           3.就可以拿到方法关联mapper.xml中的sql,然后数据库交互。

2.技术实现:

 1.首先在mybatis-config.xml中

    <mappers>
        <!-- 此处换为package,里面写接口和映射文件所在的包 -->
        <package name="com.zqwl.mapper"/>
    </mappers>

2.接口和映射文件

        首先接口和映射文件必须处于同一个输出目录(即编译后的输出目录下的同一个目录下)

 注意:

  1. 映射文件和接口需要在同一个包中

  2. 映射文件名称要和接口名称相同

  3. namespace取值必须是接口的全限定路径

  4. id属性值必须和方法名对应

  5. resultType必须和方法返回值类型对应。如果方法返回值是集合类型,resultType中写泛型的类型

 

实现方式一:深度拷贝(需要在Pom.xml中加入插件)

        那么可以直接将接口和mapper.xml 两直接放入编译前的同一包下编写(dao包)

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

实现方式二:

自己创建一个同样的目录结构(注意上面是创建是可以com.zqwl.mapper  下面是目录创建是com/zqwl/mapper)

(这儿可以下在idea中下一个插件mybatisX实现 快速生成接口方法对应的sql外部结构)

3.接口绑定下参数传递

//传入某个接口的类对象,就可以得到具体某个接口的代理对象
PeopleMapper peopleMapper = session.getMapper(PeopleMapper.class);

        // 底层:session.selectList("selectByNameAddress",map对象)
//调用方法时传入参数
        List<People> list = peopleMapper.selectByNameAddress("韩梅梅","北京海淀");
/* 底层解析时把方法参数放入到Map map中。
    map.put("arg0",name);
    map.put("arg1",address);
    map.put("param1",name);
    map.put("param2",address);
    */
   

   1.原始传参

 List<People> selectByNameAddress(String name,String address);
 select * from people where name=#{arg0} and address=#{arg1}

 mapper.xml中拿参数#{key},key为arg 、param。arg0和param1这两种方式可以混合使用。

2.使用注解@Param

 List<People> selectByInput(@Param("id") Integer id, @Param("name") String name);

那么sql中#{key} 可以直接根据注解后的字符串拿到value

select * from people where id=#{id} and name=#{name}

三、动态SQL

·具体使用查看每日案例

1.if标签
    语法格式:<if test="条件"> </if>
    特点:相当于java中的if,存在多个if多个if都会判断
    作用:
        1.条件为true,if标签中的内容参与执行
        2.条件为false,if标签中的内容不参与执行


2.choose标签
    语法格式:
        <choose>
            <when test=""> </when>
            ...
            <otherwise></otherwise>
        </choose>
    特点:
        1.相当于java中的if else if else
        2.最终只有一个when或otherwise中的内容参与执行
    作用:
        1.条件为true,when | otherwise 标签中的内容参与执行
        2.条件为false,when | otherwise 标签中的内容不参与执行

3.trim标签
    语法格式:
        <trim prefix="where" prefixOverrides="and"></trim>
    特点:
        1.trim为辅助标签
        2.子串内容不为null,添加where
        3.子串以and开头去掉and
        4.说明:
            prefix:只要子内容不是空字符串(""),就在子内容前面添加特定字符串。
        ​    prefixOverrides:如果子内容是以某个内容开头,去掉这个内容。
        ​    suffix:只要内容不是空字符串(""),就在子内容后面添加特定字符串。
        ​    suffixOverrides:如果里面内容以某个内容结尾,就去掉这个内容
    作用:配合 if,choose 等使用

4.where标签
    语法格式:<where></where>
    作用:简化<trim prefix="where" prefixOverrides="and"></trim>

5.set标签
    语法格式:<set></set>
    作用:简化<trim prefix="set" suffixOverrides=","></trim>

6.foreach标签
    语法格式:<foreach collection="数组|集合" item="数组|集合中每一个元素存储的变量"> </foreach>
             open:以什么开始
             close:以什么结束
             separator:以什么分割
    作用:遍历

7.bind标签
    语法格式:<bind name="自定义" value="例如 '%'+name+'%'"/>
    作用:字符串拼接

8.sql,include标签
    sql:sql片段
    include:引入sql片段

 

 四、注解

1.注解定义传参名

2.注解写sql(写一些简单的sql,复杂的还是mapper.xml中写)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值