8-19mybatis

1. Mybatis是什么;(了解)
2. Mybatis简单认识;(了解)
3. Mybatis crud;(掌握)
4. Mybatis crud-工具类(掌握)
5. Mybatis使用细节(掌握)
6. Mybatis批量操作(掌握)
7. MyBatis动态SQL(掌握)

MyBatis入门-简单实现

配置文件

<?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:配置(xml的一个根)-->
<configuration>
    <!--引入jdbc.properties配置-->
    <properties resource="jdbc.properties"/>
    <!--自定义别名-->
    <typeAliases>
        <!-- type:类型   alias:别名-->
        <!--<typeAlias type="cn.itsource.domain.Product" alias="Product" />-->
        <!--为这个包下面的所有类取别名(就是类名)-->
       <!-- <typeAlias type="cn.itsource.domain.Product" alias="product"/>-->
        <package name="cn.itsource.domain"/>
        <package name="cn.itsource.query"/>
        
    </typeAliases>
    <!--环境,有多个环境-->
    <environments default="development">
    <!--
        一个环境  id:为这个环境取唯一一个id名称
    -->
    <environment id="development">
        <!--
            事务管理   type:JDBC(支持事务)/MANAGED(什么都不做)
        -->
        <transactionManager type="JDBC" />
        <!-- 数据源, 连接池  type(POOLED):MyBatis自带的连接池 -->
        <dataSource type="POOLED">
            <!-- 连接数据库的参数 -->
            <property name="driver" value="com.mysql.jdbc.Driver" />
            <property name="url" value="jdbc:mysql:///mybatis" />
            <property name="username" value="root" />
            <property name="password" value="19970324" />
        </dataSource>
    </environment>
</environments>
    <!-- 这个mappers代表的是相应的ORM映射文件 -->
    <mappers>
        <!--引入(找到)写SQL的XML-->
        <mapper resource="cn/itsource/dao/ProductMapper.xml"/>
        <mapper resource="cn/itsource/dao/EmployeeMapper.xml"/>
    </mappers>
</configuration>

jdbc配置

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///mybatis
jdbc.username=root
jdbc.password=*******

Mybatis crud;(掌握)

package cn.itsource.dao.impl;

import cn.itsource.dao.IProductDao;
import cn.itsource.domain.Product;
import cn.itsource.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class ProductDaoImpl implements IProductDao {
    private final String NAMESPACE = "cn.itsource.dao.ProductMapper.";
    @Override
    public void save(Product product) {
        SqlSession session =null;
        //获取session
        try {
            session= MyBatisUtil.openSession();
            //调用添加方法
            session.insert(NAMESPACE+"save",product);
            //提交事务
            session.commit();
        } catch (Exception e) {
            //回滚事务
            session.rollback();
            e.printStackTrace();
        } finally {
          //关闭
            session.close();
        }


    }

    @Override
    public void update(Product product) {
        SqlSession session =null;
        //获取session
        try {
            session= MyBatisUtil.openSession();
            //调用添加方法
            session.update(NAMESPACE+"update",product);
            //提交事务
            session.commit();
        } catch (Exception e) {
            //回滚事务
            session.rollback();
            e.printStackTrace();
        } finally {
            //关闭
            session.close();
        }
    }

    @Override
    public void delete(Long id) {
        SqlSession session =null;
        try {
            session=MyBatisUtil.openSession();
            session.delete(NAMESPACE+"delete",id);
            session.commit();
        } catch (Exception e) {
            //事务回滚
            session.rollback();
            e.printStackTrace();
        } finally {
            //关闭事务
            session.close();
        }
    }

    @Override
    public Product getOne(Long id) {
        SqlSession session =null;
        try {
            session =MyBatisUtil.openSession();
            return session.selectOne(NAMESPACE+"getOne",id);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }

        return null;
    }

    @Override
    public List<Product> getAll() {
        SqlSession session = null;
        try {
            session = MyBatisUtil.openSession();
            return session.selectList(NAMESPACE+"getAll");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
        return null;

    }
}

Mybatis crud-工具类(掌握)

//mybatis工具类
public class MyBatisUtil {
    //定义一个SqlSessionFactory对象
    private static SqlSessionFactory factory =null;
    /**
     * SqlSessionFactoryBuilder:唯一的作用就是创建SqlSessionFactory
     *      一旦用完就可以把它把抛弃了
     * 1.类加载的时候就会执行
     * 2.只会执行一次
     */
    //静态代码块,
    static {
        try {
            factory= new SqlSessionFactoryBuilder().build(
                    Resources.getResourceAsReader("mybatis-config.xml")
            );
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static SqlSession openSession(){
        return factory.openSession();
    }
}

Mybatis使用细节(掌握)

<?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:根(每个xml都得有,不用管它的含义)
        namespace:命名空间(随便取个名称)
-->
<mapper namespace="cn.itsource.dao.ProductMapper">

    <!--
         根据查询条件获取数据
         There is no getter for property named 'id' in 'class java.lang.Long'
         #与$的区别:
            获取值的区别:
              $:拿到的是传过来的对象的某一个属性
              #:即可以单独拿对象,可以拿到传过来的对象的属性
            对SQL的影响
               #是使用预编译的方案(防sql注入,安全性更高,性能也会更强一些)
            结论:能用#都使用#(优先使用#)
    -->
    <select id="queryOne" parameterType="ProductQuery" resultType="product">
        select * from product where productName = #{productName}
    </select>

    <!--
        select:代表这是一个查询语句
            id:代表这个查询语句的唯一命名
                以后你要找到这条SQL: namespace+id
                例:cn.itsource.dao.ProductMapper.getOne
            parameterType:参数类型
                long -> Long  _long -> long
            resultType:返回的每一条结果的类型
                注:返回类型的全限定名
    -->
    <select id="getOne" parameterType="long" resultType="product">
        select * from product where id = #{id}
    </select>

    <!--resultType:返回的每一条结果的类型-->
    <select id="getAll" resultType="product" >
        select * from product
    </select>

    <!--
        添加一条数据
            useGeneratedKeys:是否要主键
            keyColumn="id":在数据库中名称叫id
            keyProperty="id":在类中也叫id
            主键会放到你传过来的对象中
    -->
    <insert id="save" parameterType="product"
            useGeneratedKeys="true" keyColumn="id" keyProperty="id">
      insert into product
      (productName,dir_id,salePrice,supplier,brand,cutoff,costPrice) values
      (#{productName},#{dir_id},#{salePrice},#{supplier},#{brand},#{cutoff},#{costPrice})
    </insert>

    <!--修改功能-->
    <update id="update" parameterType="product">
        update product set
            productName=#{productName},
            dir_id=#{dir_id},
            salePrice=#{salePrice},
            supplier=#{supplier},
            brand=#{brand},
            cutoff=#{cutoff},
            costPrice=#{costPrice}
            where id=#{id}
    </update>

    <!-- 删除功能 -->
    <delete id="delete" parameterType="long">
        delete from product where id=#{id}
    </delete>
</mapper>

Mybatis批量操作(掌握)

<!--
        批量添加
         insert into employee (name,age,sex) values
	             ("小小良",45,false),("大二良",45,true)
	    foreach:循环
	        collection:遍历的集合
	        item:每次遍历拿到的对象
	        separator:分隔符(每个值都使用,隔开)
    -->
    <insert id="batchSave" parameterType="list">
        insert into employee (name,age,sex) values
        <foreach collection="list" item="e" separator=",">
            (#{e.name},#{e.age},#{e.sex})
        </foreach>
    </insert>

    <!--
        批量删除:DELETE FROM employee WHERE id in (?,?,?,...)
        传 : List<Long> ids
         foreach:循环
	        collection:遍历的集合
	        item:每次遍历拿到的对象
	        separator:分隔符(每个值都使用,隔开)
	        open:以什么开头
	        close:以什么结尾
	        index:遍历的索引
    -->
    <delete id="batchDelete" parameterType="list">
      delete from employee where  id in
      <foreach collection="list" item="id" separator="," open="(" close=")">
          #{id}
      </foreach>
    </delete>

    <!--
        动态修改:只修改有值的数据
    -->
    <update id="dynamicUpdate" parameterType="employee">
        update employee
        <set>
            <if test="name!=null">
                name=#{name},
            </if>
            <if test="age!=null">
                age=#{age},
            </if>
            <if test="sex!=null">
                sex=#{sex},
            </if>
        </set>
        where id=#{id}
    </update>

MyBatis动态SQL(掌握)

 <!--
        动态修改:只修改有值的数据
    -->
    <update id="dynamicUpdate" parameterType="employee">
        update employee
        <set>
            <if test="name!=null">
                name=#{name}
            </if>
            <if test="age!=null">
                age=#{age}
            </if>
        </set>
        where id=#{id}
    </update>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
,发送类别,概率,以及物体在相机坐标系下的xyz.zip目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值