JAVA:SSM\Mybatis框架

Mybatis框架

什么是框架

  • 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。
  • 简而言之,框架其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统,或者说是使用别人搭好的舞台,你来做表演。框架一般是成熟的,不断升级的软件。

框架解决的问题

  • 把技术封装起来
  • 在开发阶段不应该考虑技术,更专注入逻辑开发
  • 框架是位于底层技术,和应用程序之间的代码

三层架构中常用框架

  • WEB:表现层:处理用户请求和响应
    servlet – struts(放弃) – struts2(放弃) --springMVC(流行)

  • service:业务层
    自己写业务 – ejb – spring(整合框架,业务)不可取代

  • dao:持久层
    jdbc – dbutils – BeanUtils – jdbcTemplate – hibernate(放弃) – mybatis(主流) – spring data jpa(趋势)
    主流:整合: springmvc + spring + mybatis = ssm
    趋势:整合:springmvc + spring +spring data = spring全家桶

原生JDBC概述

  • JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API。
  • JDBC是Java访问数据 库的标准规范,可以为不同的关系型数据库提供统一访问,它由一组用Java语言编写的接口和类组成。
  • JDBC需要连接驱动,驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提 供商为设备提供驱动软件,通过软件可以与该设备进行通信。

核心规范

  • DriverManager:用于注册驱动
  • Connection:表示与数据库创建的连接
  • Statement:表示数据库sql语句的对象
  • ResultSet:结果集或一张虚拟表

JDBC原理

  1. Java提供访问数据库规范称为JDBC,而生产厂商提供规范的实现类称为驱动.
  2. JDBC是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从而不能操作数据库!每个数据库厂商都需 要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商提供。
    在这里插入图片描述

原生JDBC:使用java程序执行sql语句,对数据库表进行增删改查(CRUD)
使用步骤固定

  1. 注册驱动,告之JVM我们使用的是哪种数据库驱动程序(mysql,oracle)
  2. 获取数据库连接对象Connection
    java程序:TCP客户端 数据库:TCP服务器
    使用客户端访问服务器,和服务器经过3次握手连接一个连接通路
    这个连接通路中有一个IO流对象,用于客户端和服务器交互数据
  3. 获取执行者对象Statement,用于执行sql语句:把sql语句发送到数据库执行
  4. 执行sql语句,获取结果集
    增删改: int affected(受影响的) 影响数据库的有效行数
    查询: ResultSet结果集 把查询的多行结果存储到一个结果集中
  5. 处理结果集
    增删改:不用处理,打印
    查询:遍历结果集
  6. 释放资源

public class DemoJDBC {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        /
            1.注册驱动
            使用java.sql.DriverManager类中的方法实现
            管理一组 JDBC 驱动程序的基本服务。
            static void registerDriver(Driver driver) 向 DriverManager 注册给定驱动程序。
            参数:
                java.sql.Driver driver:是一个接口,每个驱动程序类必须实现的接口。
                传递Driver接口的实现类对象,由mysql驱动提供
                com.mysql.jdbc.Driver
         */
        //DriverManager.registerDriver(new Driver());

        /*
            查询com.mysql.jdbc.Driver类的源码发现,有一个静态代码块,已经注册了驱动
            static {
                DriverManager.registerDriver(new Driver());
            }
            我们在注册一次驱动,就注册了两次,浪费
            解决方案:使用反射技术,获取class文件对象,会执行类中的静态代码块
            Class.forName("foo.bah.Driver")
         */
        Class.forName("com.mysql.jdbc.Driver");
    
        /*
            2.获取数据库连接对象Connection
            使用java.sql.DriverManager类中的方法实现
            static Connection getConnection(String url, String user, String password) 试图建立到给定数据库 URL 的连接。
            参数:
                String url:数据库服务器的地址,固定格式
                    jdbc:mysql://ip:端口号/数据库名称
                    jdbc:mysql://localhost:3306/ayyy:mysql://127.0.0.1:3306
                String user:数据库的用户名 root
                String password:数据库的密码 root
            返回值:
                java.sql.Connection是一个接口
                    返回的是Connection接口的实现类对象,由mysql驱动提供
                    我们可以使用Connection接口来接收这个实现类对象(多态)
         */
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ayyy", "root", "root");
        //System.out.println(conn);//com.mysql.jdbc.JDBC4Connection@3891771e

        /*
            3.获取执行者对象Statement
            使用Connection接口中提供的方法实现
            Statement createStatement() 创建一个 Statement 对象来将 SQL 语句发送到数据库。
            返回值:
                 java.sql.Statement是一个接口
                    返回的是Statement接口的实现类对象,由mysql驱动提供
                    我们可以使用Statement接口来接收这个实现类对象(多态)
         */
        Statement stat = conn.createStatement();
        //System.out.println(stat);//com.mysql.jdbc.StatementImpl@78ac1102
    
        /*
            4.执行sql语句,获取结果集
            使用Statement接口中的方法实现
                int executeUpdate(String sql) 执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句
                ResultSet executeQuery(String sql) 执行给定的 SQL 语句,该语句可能为SELECT
         */
        int row = stat.executeUpdate("INSERT INTO products (pid, pname,price,flag,category_cid) " +
                "VALUES('p011','鼠标',80,'1','c001');");
    
        //5.处理结果集
        System.out.println(row);
    
        //6.释放资源
        stat.close();
        conn.close();
    }

}

Mybatis框架介绍

  • Mybatis是一个优秀的基于Java的持久层框架,内部封装了Jdbc,使开发者只需要关注sql语句本身,而不需要花费经历去处理加载驱动,创建连接,创建statement等繁琐的过程;
  • Mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过Java对象和statement中sql动态参数进行映射生成最终执行的sql语句,最后由Mybatis框架执行sql并将结果映射为Java对象并返回;
  • 采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbcAPI底层访问细节,使我们不用和jdbc API打交道,就可以完成对数据库的持久化操作;
  • ORM:操作对象即是操作数据库

Mybatis框架配置
POM文件

 <!-- Mybatis -->
      <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>${mybatis.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>${mybatis.spring.version}</version>
      </dependency>
      <dependency>
        <groupId>com.github.miemiedev</groupId>
        <artifactId>mybatis-paginator</artifactId>
        <version>${mybatis.paginator.version}</version>
      </dependency>
      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
      </dependency>
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>${druid.version}</version>
      </dependency>
      <dependency>
        <groupId>org.csource.fastdfs</groupId>
        <artifactId>fastdfs</artifactId>
        <version>1.2</version>
      </dependency>
      <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>${commons-fileupload.version}</version>
      </dependency>

配置数据库属性文件,*.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ayyy?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

配置数据库类型,引入插件,SqlMapConfig.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>
	<plugins>
		<!-- com.github.pagehelper 为 PageHelper 类所在包名 -->
		<plugin interceptor="com.github.pagehelper.PageHelper">
			<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL 六种数据库-->
			<property name="dialect" value="mysql"/>
		</plugin>
	</plugins>
</configuration>

配置数据源,包扫描,applicationContext-dao.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd 
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
 
	<context:property-placeholder location="classpath*:properties/*.properties" />
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		destroy-method="close">
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="maxActive" value="10" />
		<property name="minIdle" value="5" />
	</bean>
	
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" />
	</bean>
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.ayy.core.dao" />
	</bean>
</beans>

实体类和映射文件使用Mybatis逆向生成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值