HIbernate多表学习

news2025/2/26 13:22:42

一,表与表之间关系:

1.一对多:多的表用一个外键存一的表的主键id。
在这里插入图片描述

2.多对多:新建第三张表,两个外键分别存两个多的表的主键id。
在这里插入图片描述
3.一对一

二,Hibernate一对多练习:

一对多映射配置(以客户和联系人,客户是一,联系人是多为例子):
1,创建两个实体类,客户和联系人
2,让两个实体类之间互相表示
(1)在客户实体类里面表示多个联系人(一个客户里面有多个联系人)
Customer.java:
在这里插入图片描述

package com.myHibernate.entity;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

/**
 * 客户实体类
 * @author AUAS
 */
public class Customer {
    /**
     * Hibernate要求实体类要有一个属性是唯一的,类似与数据库表的主键
     */
    private Integer id;
    private String cusName;
    private String cusPhone;

    //在客户实体类里面表示多个联系人,一个客户有多个联系人
    //hibernate要求使用集合表示多的数据,使用set集合
    private Set<LinkUser> linkUser = new HashSet<LinkUser>();

    public Set<LinkUser> getLinkUser() {
        return linkUser;
    }

    public void setLinkUser(Set<LinkUser> linkUser) {
        this.linkUser = linkUser;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getCusName() {
        return cusName;
    }

    public void setCusName(String cusName) {
        this.cusName = cusName;
    }

    public String getCusPhone() {
        return cusPhone;
    }

}

(2)在联系人实体类里面表示所属客户(一个联系人只能属于一个客户)
LinkUser.java:
在这里插入图片描述

package com.myHibernate.entity;

import java.util.HashSet;
import java.util.Set;

/**
 * 客户实体类
 * @author AUAS
 */
public class LinkUser {
    /**
     * Hibernate要求实体类要有一个属性是唯一的,类似与数据库表的主键
     */
    private Integer id;
    private String linkName;
    private String linkPhone;

    //在联系人实体类里面表示所属客户,一个联系人只能属于一个客户
    private Customer customer;

    public Customer getCustomer() {
        return customer;
    }

    public void setCustomer(Customer customer) {
        this.customer = customer;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLinkName() {
        return linkName;
    }

    public void setLinkName(String linkName) {
        this.linkName = linkName;
    }

    public String getLinkPhone() {
        return linkPhone;
    }

    public void setLinkPhone(String linkPhone) {
        this.linkPhone = linkPhone;
    }
}

3,配置映射关系
(1)一般一个实体类对应一个映射文件
(2)把实体类最基本的配置完成
(3)在映射文件中,配置一对多关系
(3.1)在客户映射文件中,表示所有的联系人。
Costomer.hbm.xml:在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!-- 1 配置类和表对应
        class标签
        name属性:实体类全路径
        table属性:数据库表名称
    -->
    <class name="com.myHibernate.entity.Customer" table="t_customer">
        <!-- 2 配置实体类id和表id对应
            hibernate要求实体类有一个属性唯一值
            hibernate要求表有字段作为唯一值
        -->
        <!-- id标签
            name属性:实体类里面id属性名称
            column属性:生成的表字段名称
         -->
        <id name="id" column="id">
            <!-- 设置数据库表id增长策略
                native:生成表id值就是主键自动增长
            -->
            <generator class="native"></generator>
        </id>
        <!-- 配置其他属性和表字段对应
            name属性:实体类属性名称
            column属性:生成表字段名称
        -->
        <property name="cusName" column="cusName"></property>
        <property name="cusPhone" column="cusPhone"></property>

        <!-- 在客户映射文件中,表示所有联系人
             使用set标签表示所有联系人
             set标签里面有name属性:name属性值与客户实体类里面表示联系人的集合名称一样-->
        <set name="linkUser">
            <!--    一对多建表,有外键
                    hibernate机制:双向维护外键,在一和多那一方都配置外键
                    column属性值:外键名称(即customer表存对应的LinkUser表的id)
             -->
            <key column="cusId"></key>
            <!--     客户所有的联系人,class里面写联系人实体类的全路径       -->
            <one-to-many class="com.myHibernate.entity.LinkUser"></one-to-many>
        </set>
    </class>
</hibernate-mapping>

(3.2)在联系人映射文件中,表示所属客户
LinkUser.hbm.xml:
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!-- 1 配置类和表对应
        class标签
        name属性:实体类全路径
        table属性:数据库表名称
    -->
    <class name="com.myHibernate.entity.LinkUser" table="t_link_user">
        <!-- 2 配置实体类id和表id对应
            hibernate要求实体类有一个属性唯一值
            hibernate要求表有字段作为唯一值
        -->
        <!-- id标签
            name属性:实体类里面id属性名称
            column属性:生成的表字段名称
         -->
        <id name="id" column="id">
            <!-- 设置数据库表id增长策略
                native:生成表id值就是主键自动增长
            -->
            <generator class="native"></generator>
        </id>
        <!-- 配置其他属性和表字段对应
            name属性:实体类属性名称
            column属性:生成表字段名称
        -->
        <property name="linkName" column="linkName"></property>
        <property name="linkPhone" column="linkPhone"></property>

        <!--   表示联系人所属客户
                names属性:属性值与联系人LinkUser实体类表示客户的名称一致
                class属性:customer实体类全路径
                column属性:外键名称-->
        <many-to-one name="customer" class="com.myHibernate.entity.Customer" column="cusId"></many-to-one>
    </class>
</hibernate-mapping>

4.创建核心配置文件,把映射文件引入到核心配置文件中
hibernate.cfg.xml:
在这里插入图片描述
5.一对多级联保存:

三,HIbernate多对多操作:

多对多映射配置:
以用户和角色为例(一个用户可以有多个角色,一个角色可以有多个用户)
1.创建实体类,用户实体类和角色实体类
2.两个实体类之间互相表示
(1)一个用户里面有多个角色,使用set集合
(2)一个角色有多个用户,使用set集合

四,Hibernate查询方式:

1.对象导航查询:
(1)根据id查询某个客户,再查询这个客户里面所有联系人
2.OID查询:
(1)根据id查询某一条记录,返回对象
3.hql查询:
(1)Query对象,写hql语句实现查询
4.QBC查询:
(1)Criteria对象
5.本地sql查询:
(1)SQLQuery对象,使用普通sql实现查询
对象导航查询:
1.查询某个客户里面所有联系人过程,使用对象导航实现
在这里插入图片描述

package cn.itcast.hibernatetest;

import com.myHibernate.entity.Customer;
import com.myHibernate.entity.LinkUser;
import com.myHibernate.entity.User;
import com.myHibernate.utils.HibernateUtils;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test;

import java.util.List;
import java.util.Set;

public class HibernateDemo {

    @Test
    public void testSelect() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction transaction = null;
        try {
            sessionFactory = HibernateUtils.getSessionFactory();
            //提供返回与本地线程的session的方法
            session = HibernateUtils.getSessionObject();
            //开启事务
            transaction = session.beginTransaction();

            //演示对象导航查询
            //查询cid=1客户,再查询这个客户的所有联系人
            Customer customer = session.get(Customer.class,1);
            //再查询这个客户里面所有联系人(直接得到客户里面联系人的set集合)
            Set<LinkUser> linkUsers = customer.getLinkUser();

            System.out.println(linkUsers.size());

            //提交事务
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //回滚事务
            transaction.rollback();
        } finally {
            //关闭操作
//            session.close();
//            sessionFactory.close();
        }
    }
}

OID查询:
1.根据id查询记录
(1)调用session里面的get方法实现
在这里插入图片描述
HQL查询:
1.hql:hibernate query language ,是hibernate提供的一种查询语言,hql语言喝普通sql很相似。
区别:普通sql操作数据库表喝字段;hql操作实体类和属性
2.常用的hql语句(使用hql查询操作时候,使用Query对象)
(1)查询所有数据( from 实体类名称
(1.1)创建Query对象,写hql语句
(1.2)调用Query对象里面的方法得到结果
在这里插入图片描述
(2)条件查询
(2.1)hql条件查询语句写法:
from 实体类名称 where 实体类属性名称 = ? and 实体类属性名称 = ?
from 实体类名称 where 实体类属性名称 like ?
在这里插入图片描述
在这里插入图片描述
(3)排序查询
(3.1)hql排序语句写法
from 实体类名称 order by 实体类属性名称 asc / desc
在这里插入图片描述

(4)分页查询
(4.1)mysql实现分页(使用关键字limit实现)
在这里插入图片描述
(4.2)在hql中实现分页(在hql中的语句不能写limit。hibernate的Query对象封装两个方法实现分页操作)
在这里插入图片描述
(5)投影查询
(5.1)投影查询(即查表中的某个(某些)字段,不是查询所有字段
sql语句:
在这里插入图片描述
(5.2)投影查询的hql语句写法:
select 实体类属性名称1,实体类属性名称2 from 实体类名称
注意:hql语句的select 后面不能像sql语句一下写 * 查所有。
在这里插入图片描述
(6)聚集函数使用
(6.1)常用的聚集函数(count ,sum, avg ,max ,min)
(6.2)hql聚集函数的写法
在这里插入图片描述

package cn.itcast.hibernatetest;

import com.myHibernate.entity.Customer;
import com.myHibernate.entity.LinkUser;
import com.myHibernate.entity.User;
import com.myHibernate.utils.HibernateUtils;
import org.hibernate.*;
import org.junit.Test;

import java.util.List;
import java.util.Set;

public class HibernateDemo {

    @Test
    public void testSelect() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction transaction = null;
        try {
            sessionFactory = HibernateUtils.getSessionFactory();
            //提供返回与本地线程的session的方法
            session = HibernateUtils.getSessionObject();
            //开启事务
            transaction = session.beginTransaction();

            //演示hql 条件查询
            //创建Query对象
//            Query query = session.createQuery("FROM Customer As c Where c.cusName like ?");
//            //设置条件值,向?里面设置值
//            //setParameter方法两个参数(第一个参数:int类型是?位置,?位置从0开始。第二个参数:具体参数值)
//            query.setParameter(0,"%小%");//设置第一个问号的值为2
//            //调用方法得到结果
//            List<Customer> customerList = query.list();
//            for (Customer customer : customerList) {
//                System.out.println(customer.getCusName()+":"+customer.getCusPhone());
//            }

//            //演示hql 排序查询
//            //创建Query对象
//            Query query = session.createQuery("FROM Customer ORDER BY id DESC");
//            //设置条件值,向?里面设置值
//            //调用方法得到结果
//            List<Customer> customerList = query.list();
//            for (Customer customer : customerList) {
//                System.out.println(customer.getCusName()+":"+customer.getCusPhone());
//            }

//            //演示分页查询
//            //创建Query对象
//            Query query = session.createQuery("FROM Customer");
//            //设置分页数据
//            query.setFirstResult(0); //设置分页开始位置
//            query.setMaxResults(2); //设置每页记录数
//            //调用方法得到结果
//            List<Customer> customerList = query.list();
//            for (Customer customer : customerList) {
//                System.out.println(customer.getCusName()+":"+customer.getCusPhone());
//            }

//            //演示投影查询
//            //创建Query对象
//            Query query = session.createQuery("SELECT cusName FROM Customer");
//            //调用方法得到结果
//            List<Object> cusNameList = query.list();
//            for (Object cusName: cusNameList) {
//                System.out.println(cusName);
//            }

            //演示聚集函数
            //创建Query对象
            Query query = session.createQuery("SELECT COUNT(*) FROM Customer");
            //调用方法得到结果
            //query对象里面有方法,直接返回对象形式
            Object number = query.uniqueResult();
            //放回int类型
            //首先吧Object变成long类型,再变成int类型
            Long longNumber = (Long)number;
            int count = longNumber.intValue();
            System.out.println(count);

            //提交事务
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //回滚事务
            transaction.rollback();
        } finally {
            //关闭操作
//            session.close();
//            sessionFactory.close();
        }
    }
}

QBC查询:

1.使用hql查询需要写hql语句实现,但是使用qbc时候,不需要写语句了,使用方法实现。
2.使用qbc时候,操作实体类和属性。
3.使用qbc,使用Criteria对象实现
(1)查询所有:
(1.1)创建Criteria对象(session.createCriteria(Customer.class))
(1.2)调用方法得到结果
在这里插入图片描述
(2) 条件查询:
没有语句,使用封装的方法实现(criteria.add(Restrictions.eq(“id”,2));
在这里插入图片描述
在这里插入图片描述

(3)排序查询:
在这里插入图片描述
在这里插入图片描述
(4) 分页查询
开始位置计算公式:(当前页-1)* 每页记录数
在这里插入图片描述
(5)统计查询:
在这里插入图片描述
(6)离线查询:
(6.1)servlet调用service,service调用dao
(6.11)在dao里面对数据库crud操作
(6.12)在dao里面使用hibernate框架,使用hibernate框架时候,调用session里面的方法实现功能
在这里插入图片描述

HQL多表查询:

mysql里面多表查询:
在这里插入图片描述
1.HQL内连接查询:
(1)内连接查询hql语句写法 from Customer c inner join c.linkUser
在这里插入图片描述
返回list,list里面每部分是数组形式
在这里插入图片描述
(2)迫切内连接
(2.1)迫切内连接和内连接底层实现是一样的
(2.2)区别:使用内连接返回list中每部分是数组,迫切内连接返回list每部分是对象
(2.3)hql语句写法 from Customer c inner join fetch c.linkUser
在这里插入图片描述
返回list,list里面每部分是对象形式
在这里插入图片描述

2.HQL左外连接查询:
(1)左外连接hql语句: from Customer c left outer join c.linkUser
在这里插入图片描述
在这里插入图片描述
(2)迫切左外连接hql语句: from Customer c left outer join fetch c.linkUser
在这里插入图片描述
在这里插入图片描述

注意:左外连接返回list中每部分是数组,迫切左外连接返回list每部分是对象

3.右外连接hql语句:
from CUstomer c right outer join c.linkUser

HIbernate检索策略:

检索策略的概念:
1.hibernate检索策略分为两类:
(1)立即查询:根据id查询,调用get方法,一调用get方法马上发送语句查询数据库
在这里插入图片描述

(2)延迟查询:根据id查询,还有load方法,调用load方法不会马上发送语句查询数据,只有得到对象里面的值的时候才会发送语句查询数据库。

在这里插入图片描述

    @Test
    public void testSelect1() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction transaction = null;
        try {
            sessionFactory = HibernateUtils.getSessionFactory();
            //提供返回与本地线程的session的方法
            session = HibernateUtils.getSessionObject();
            //开启事务
            transaction = session.beginTransaction();

//            //1.演示hibernate检索策略(立即查询)
//            //查询id=1的客户信息(执行get方法之后,是否发送sql语句)
//            //调用get方法马上发送sql语句查询数据库
//            Customer customer = session.get(Customer.class,1);
//            System.out.println(customer.getId());

            //2.演示hibernate检索策略(延迟查询)
            //查询id=1的客户信息(执行loda方法之后,是否发送sql语句)
            //调用load方法不会马上发送sql语句查询数据库
            //返回对象里面只有id值
            //得到对象里面不是id的其它值时候才会发送语句
            Customer customer = session.load(Customer.class,2);
            System.out.println(customer.getId());
            System.out.println(customer.getCusName());

            //提交事务
            transaction.commit();
        } catch (Exception e) {
            e.printStackTrace();
            //回滚事务
            transaction.rollback();
        } finally {
            //关闭操作
//            session.close();
//            sessionFactory.close();
        }
    }

延迟查询分成两类:
(1)类级别延迟:根据id查询返回实体类对象,调用load方法不会马上发送语句
在这里插入图片描述
(2)关联级别延迟:查询某个客户,再查询客户的所有联系人,查询客户的所有联系人的过程是否需要延迟,这个过程成为关联级别延迟。
在这里插入图片描述
关联级别延迟操作:
1.在映射文件中进行配置实现(根据客户得到所有的联系人,在客户映射文件中配置)
2.在set标签上使用属性(具体如下)
在这里插入图片描述
立即查询配置如下:
在这里插入图片描述
及其懒惰(需要什么查什么),延迟检索配置如下:
在这里插入图片描述
批量抓取:
1.查询所有客户,返回list集合,遍历list集合,得到每个客户,得到每个客户的所有联系人。
方法一:会查询多次数据库,性能不好
在这里插入图片描述
方法二:配置了批量抓取,性能好
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/24917.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国际通用回收标准-GRS、RCS的答疑

【国际通用回收标准-GRS、RCS的答疑】 GRS & RCS 国际通用回收标准 GRS和 RCS是目前现行国际公认的回收材料标准。许多国际知名品牌如 ADDIDAS、3M、PUMA、H&M、NIKE等都是此标准的会员。GRS与 RCS最早开始于纺织产业&#xff0c;用以证明其产品或原料含有一定的回收材…

yolov5剪枝实战4: 正常训练和稀疏化训练

1. 准备自己的数据集 1.1 下载项目文件 准备好备注的数据集进行训练,我这里给出了标注好的足球的数据集。从百度网盘下载到项目目录下并解压,网盘地址见文末 VOCdevkit_ball.ziptestfiles.zipprepare_data.py1.2 解压建立或自行建立数据集 使用PASCAL VOC数据集的目录结构,…

怎么批量把图片转文字?教你几招轻松完成

工作中我们经常要与图片、文字打交道&#xff0c;特别是做资料收集的小伙伴&#xff0c;当收到图片资料的时候&#xff0c;就需要将其输出为文字进行保存&#xff0c;如果是单张的时候我们还可以使用手机或者微信直接拍照识别转&#xff0c;但是图片不止一张的时候&#xff0c;…

nvcc编译器之GPU代码编译(chapter 5)

目录 5. GPU编译 5.1 GPU多代架构 5.2 GPU特性列表 5.3 应用兼容性 5.4 虚拟架构 5.5 虚拟架构特性列表 5.6 兼容性补全机制 5.7 nvcc示例 5. GPU编译 本章描述了由nvcc与CUDA驱动协同维护的GPU编译模型。本文介绍了一些技术部分&#xff0c;并在最后给出了具体的示例…

100家!第一批5G应用解决方案供应商推荐名录

近日&#xff0c;5G应用产业方阵&#xff08;5G AIA&#xff09;在“2022年中国5G发展大会5G应用产业发展论坛”发布了“5G应用解决方案供应商推荐名录&#xff08;第一批&#xff09;”入库名单&#xff0c;旨在强化5G应用供需对接&#xff0c;推动5G应用解决方案成熟&#xf…

RDD缓存机制及持久化技术

文章目录RDD缓存RDD缓存API介绍RDD缓存代码演示示例RDD缓存执行原理RDD CheckPointCheckPoint代码演示示例CheckPoint与Cache对比RDD缓存 RDD之间进行Transformation计算&#xff0c;当执行开启之后&#xff0c;就会有新的RDD生成&#xff0c;而之前老的RDD就会消失&#xff0…

js逆向基础篇-某音乐网站-xx音乐

提示!本文章仅供学习交流,严禁用于任何商业和非法用途,如有侵权,可联系本文作者删除! 网站链接:aHR0cHM6Ly9tdXNpYy4xNjMuY29tLyMvc2VhcmNoL20vP3M9JUU1JUE0JUE5JUU0JUI4JThCJnR5cGU9MQ== 案例分析: 搜索歌曲名称,找到列表接口,如上图能看到列表数据的,之后看下传参,…

249 h221 最大岛屿面积

方式1 错误的动态规划 递归公式为 if (matrix[i][j]‘1’&&matrix[i-1][j-1]‘1’){ int edge(int) Math.pow(dp[i][j],0.5); // 边长 int addCount addCount(matrix, i, j, edge); dp[i][j]dp[i-1][j-1]addCount; maxMath.max(max,dp[i][j]); } 只根据 dp[i-1][j-1]…

Dev C++开发环境的配置及使用

标题Dev C开发环境的配置及使用 本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载&#xff0c;但需要注明原作者"海洋饼干叔 叔"&#xff1b;本文不允许以纸质及电子出版为目的进行抄摘或改编。 1.《Python编程基础及应用》&#xff0…

免费题库接口

免费题库接口 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳转&a…

[SUCTF 2019]Pythonginx

源码&#xff1a; app.route(/getUrl, methods[GET, POST]) def getUrl():url request.args.get("url")host parse.urlparse(url).hostnameif host suctf.cc:return "我扌 your problem? 111"parts list(urlsplit(url))host parts[1]if host suctf…

[论文评析]Densely Connected Convolutional Networks,CVPR,2017

Densely Connected Convolutional Networks&#xff0c; 文章信息背景与动机DenseNetDense blockDenseNetDenseNet的集中经典配置总结文章信息 题目&#xff1a;Densely Connected Convolutional Networks&#xff0c; 发表&#xff1a;CVPR,2017 作者&#xff1a;Gao Huang, …

【TWVRP】遗传算法求解带时间窗的含充电站车辆路径规划问题【含Matlab源码 1177期】

⛄一、VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem&#xff0c;VRP)是运筹学里重要的研究问题之一。VRP关注有一个供货商与K个销售点的路径规划的情况&#xff0c;可以简述为&#xff1a;对一系列发货点和收货点&#xff0c;组织调用一定的车辆&#xff…

【密码学篇】虚拟专用网技术原理与应用(商密)

【密码学篇】虚拟专用网技术原理与应用&#xff08;商密&#xff09; VPN技术不是洪水猛兽&#xff0c;其普遍应用于网络通信安全和网络接入控制&#xff0c;可通过服务器、硬件、软件等多种方式实现。—【蘇小沐】 文章目录【密码学篇】虚拟专用网技术原理与应用&#xff08;…

JAVA多线程并发(一):线程的创建

JAVA多线程并发——创建线程 第一章&#xff1a;线程的创建与实现 文章目录JAVA多线程并发——创建线程一、继承Thread类二、实现runnable接口三、简单匿名内部类写法四、实现Callable接口五、线程池一、继承Thread类 代码示例&#xff1a; public class ExtendThread {publ…

SPARKSQL3.0-Unresolved[Parsed]阶段源码剖析

一、前言 上两节介绍了Antlr4的简单使用以及spark中如何构建SessionState&#xff0c;如果没有看过建议先了解上两节的使用&#xff0c;否则看本节会比较吃力 [SPARKSQL3.0-Antlr4由浅入深&SparkSQL语法解析] [SPARKSQL3.0-SessionState构建源码剖析] 那么在Unresolved…

MySql查询的生命周期和性能优化思路

目录 前言 1. 为什么查询性能差 2. 一次查询的生命周期 2.1 客户端与服务端通信 2.2 查询缓存 2.3 解析器 2.4 预处理器 2.5 优化器 2.6 查询引擎 2.7 存储引擎 3. 查询性能优化的思路 4.总结 前言 一说到mysql的查询性能优化&#xff0c;相信很多人能说出来很多的技…

AT32F407/437使用FreeRTOS并实现ping客户端

示例目的 基于以太网络&#xff0c;实现ping客户端已检测网络联机。 支持型号 AT32F407xx AT32F437xx 主要使用外设 EMAC GPIO USART 快速使用方法硬件资源 1) 指示灯LED2/LED3 2) USART1(PA9/PA10) 3) AT-START-F407/ AT-START-F437实验板 4) 以太网连接线软件资源 1) SourceC…

sql函数coalesce和parse_url

学习函数系列&#xff1a; coalesce coalesce函数可以用来排除null值。 coalesce(a, b,c,d) 参数的个数没有限制 返回第一个参数中非null的值。 select help coalesce\G; [ 1. row ] name | COALESCE description | Syntax: COALESCE(value,…) Returns the first non-NUL…

15-JavaSE基础巩固练习:多态、接口、抽象类的综合练习

多态的综合练习 1、需求 狗类 属性&#xff1a;年龄&#xff0c;颜色行为&#xff1a; eat(String something)&#xff1a;表示吃东西lookHome()&#xff1a;看家 猫类 属性&#xff1a;年龄&#xff0c;颜色行为&#xff1a; eat(String something)&#xff1a;吃东西catch…