Hibernate基本使用

2023-05-16

Hibrenate框架
一、Hibrenate
1、是一个持久层框架,实现jdbc的封装。是一个全自动的ORM框架
2、ORM:对象 关系(数据库表) 映射,orm致力于将数据库操作转换成Java程序熟悉的对象操作。
3、ORM主要体现在两个方面
a、java程序通过jdbc与数据库程序交互;类似于 请求—响应
b、orm在请求时,由java程序向数据库传递sql时,通过操作的对象 对于操作表,通过操作的对象属性 对应 操作的表字段
c、orm在响应是,一般就是查询操作,且返回结果,将ResultSet集合中装载的查询组装成对应的实体对象;根据查询时指定的对象,组装成与之对应的对象;根据表字段与对象属性名对应的关系实现数据赋值
二:全自动与半自动
1、 全自动orm:
a) 在请求和响应过程中,都是用orm机制自动进行处理的
2、 半自动orm
a) 在请求过程中,操作对此与对应的表的关系,依然需要使用手动编写的sql实现
b) 在响应过程中,将查询结果自动组成对象

三:hibernate基本使用
1、创建maven程序
2、引入hibernate 和mysql依赖

 <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>5.1.4.Final</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.29</version>
    </dependency>

3、创建hibernate.cfg.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration  PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
    <!-- 第一部分: 配置数据库信息 必须的 -->
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">root</property>
    <!-- 第二部分: 配置hibernate信息 可选的-->
    <!-- 输出底层sql语句 -->
    <property name="hibernate.show_sql">true</property>
    <!-- 输出底层sql语句格式 -->
    <property name="hibernate.format_sql">true</property>
    <!-- hibernate帮创建表,需要配置之后 update: 如果已经有表,更新,如果没有,创建 -->
    <property name="hibernate.hbm2ddl.auto">update</property>
    <!-- 配置数据库方言在mysql里面实现分页 关键字 limit,只能使用mysql里面在oracle数据库,实现分页rownum 让hibernate框架识别不同数据库的自己特有的语句 -->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
 	<!--第三部分:把映射文件放到核心配置文件中必须的-->
	<mapping resource="cn/itcast/entity/Car.hbm.xmL"/>

</session-factory>
</hibernate-configuration>

4、使用框架
4.1、创建实体类

package com.hibernate;

import javax.persistence.criteria.CriteriaBuilder;
import java.io.Serializable;

/**
 * @author pgg
 * @date 2022/4/6
 */
public class Car implements Serializable {
    private Integer cid;
    private String cname;
    private String color;

    public Car() {
    }

    public Car(Integer cid, String cname, String color) {
        this.cid = cid;
        this.cname = cname;
        this.color = color;
    }

    public Integer getCid() {
        return cid;
    }

    public void setCid(Integer cid) {
        this.cid = cid;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}

4.2、自定义orm配置文件

<?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>
    <class name="com.hibernate.Car" table="t_car">
        <id name="cid" column="cid"></id>
        <property name="cname" column="cname"/>
        <property name="color" column="color"/>
    </class>
 
</hibernate-mapping>

4.3、编写dao,使用hibernate实现语句库的交互
4.3.1、hiberante有一个Session对象,该对象提供了CRUD方法
4.3.1.1、每一个session对象内置connection连接
4.3.1.2、session.save/update/delete/get()…
4.3.2、hibernate有一个sessionFactory对象,创建session对象:sessionFactory.openSession()
4.3.3、hibernate有一个Configuration对象,创建sessionFactory对象

第一步 加载hibernate核心配置文件

第二步 创建SessionFactory对象

第三步 使用SessionFactory创建session对象

第四步 开启事务

第五步 写具体逻辑 crud操作

第六步 提交事务

第七步 关闭资源

	@Test
	public void testAdd() {
//		第一步 加载hibernate核心配置文件
		// 到src下面找到名称是hibernate.cfg.xml
		//在hibernate里面封装对象
		Configuration cfg = new Configuration();
		cfg.configure();
		
//		第二步 创建SessionFactory对象
		//读取hibernate核心配置文件内容,创建sessionFactory
		//在过程中,根据映射关系,在配置数据库里面把表创建
		SessionFactory sessionFactory = cfg.buildSessionFactory();
		
//		第三步 使用SessionFactory创建session对象
		// 类似于连接
		Session session = sessionFactory.openSession();
		
//		第四步 开启事务
		Transaction tx = session.beginTransaction();

//		第五步 写具体逻辑 crud操作
		//添加功能
		User user = new User();
		user.setUsername("小王");
		user.setPassword("250");
		user.setAddress("日本");
		//调用session的方法实现添加
		session.save(user);
		
//		第六步 提交事务
		tx.commit();

//		第七步 关闭资源
		session.close();
		sessionFactory.close();
	}

四:hibernate操作对象状态
瞬时态:刚刚创建的对象属于瞬时态,在jvm中存在,在数据库和session对象中部存在
持久态:jvm中存在,数据库中存在,session缓存中存在,操作jvm中对象,就会通过session,自动更新数据库中的数据
save()、update() 是将瞬时态对象 转换成持久态
get() 直接获取一个持久态
注意:delete 删除的对象必须是持久态,删除后属于瞬时态
游离态:jvm中存在,数据库中存在,session缓存中不存在
session.close()、session.clear()

五:hibernate的crud
1、hiberante有一个Session对象,该对象提供了CRUD方法,其直接提供的方法只能实现但记录的CRUD

一:session提供的单条记录的查询

  1. session.get()/session.load()
  2. session.get(类名.class,id): 根据主键值,查找单条记录,通过类名.class对象类型,找到对应的orm,从而找到操作的表;id值即为orm配置时字段的值
    如:
package com.hibernate.dao;

import com.hibernate.domain.Car;
import com.hibernate.util.HibernateUtil;
import org.hibernate.Session;

public class CarDao {
    public void find1(){
        Session session= HibernateUtil.getSession();
        Car car=session.get(Car.class,1);
        System.out.println(car.getCname());
    }

    public void find2(){
        Session session=HibernateUtil.getSession();
        Car car=session.load(Car.class,1);
        System.out.println(car);
    }
}

六:get和load的特点
懒加载:懒加载不是不加载,只加载id主键,当需要使用数据再通过id去与数据库交互查询
相同点:都是根据主键查找单条记录
不同点:
get方法会从数据库直接获取数据对象,如果没有数据,返回null
load方法会先获得一个代理对象,再需要使用数据时再从数据库中获取数据(懒加载),如果数据不存在,则在获取时抛出异常
load方法查询时,默认是懒加载查询,可以通过设置,关闭懒加载(2中方式)
方式一:在orm文件中通过懒加载属性关闭

<hibernate-mapping>
    <class name="com.hibernate.domain.Car" table="t_car"  lazy="false">
        <id name="cid" column="cid"></id>
        <property name="cname" column="cname"/>
        <property name="color" column="color"/>
    </class>

</hibernate-mapping>

方式二:将实体类Car,使用final关键字修饰
load方法懒加载的体现是先获得代理,然后需要数据时代理再查数据;代理实现有两种方式:1、基于父类 2、实现接口 确保代理对象与目标实体对象有相同的api(方法),final修饰的类不能被继承,即不能产生代理,即关闭懒加载


public final class Car implements Serializable {
    private Integer cid;
    private String cname;
    private String color;

    public Car() {
    }
 }

关闭懒加载后,数据存在,直接获得数据对象,数据不存在,依然会抛出异常
七:hibernate增删改查操作
注意:增删改时需要开启事务,提交事务
1、保存:session.save(对象);

    /**
     * 保存
     */
    public void save1(){
        Car car=new Car(1,"bm3","蓝色");
        Session session=HibernateUtil.getSession();
        session.beginTransaction();//开始事务
        session.save(car);
        session.getTransaction().commit();//提交事务
    }

2、修改:session.update(对象);
扩展:对于持久态对象,修改对象就相当于修改数据,而不需要执行修改方法

	/**
	 *修改的方法
	 */
	public void update1(){
        Car car=new Car(1,"bm2","白色");
        Session session=HibernateUtil.getSession();
        session.beginTransaction();//开始事务
        session.update(car);
        session.getTransaction().commit();//提交事务

    }
    /**
     * 扩展修改的方法 只针对持久态对象
     */
    public void update(){
        Session session=HibernateUtil.getSession();
        Car car=session.get(Car.class,1);//持久态
        car.setColor("红色");
        session.beginTransaction();//开始事务
        session.getTransaction().commit();//提交事务
    }

3.删除:session.delete(对象);不能通过主键删除
尽管从删除逻辑而言,通过主键数据就可以删除整体记录,但Hibernate对数据库的操作都是一对象的操作体现的,所以删除时也必须删除对象(1、对象可以只包含主键 2、对象必须时持久态才能删除)


    /**
     * 方式一:删除操作
     */
    public void delete1(){
        Session session=HibernateUtil.getSession();
        Car car=new Car();
        car.setCid(1);
        session.beginTransaction();//开始事务
        session.delete(car);
        session.getTransaction().commit();//提交事务
    }

    /**
     * 方式二:删除操作
     */
    public void delete2(){
        Session session=HibernateUtil.getSession();
        Car car=new Car();
        car.setCid(1);
        session.beginTransaction();//开始事务
        session.delete(car);
        session.getTransaction().commit();//提交事务
    }

    /**
     * 方式三:删除操作
     */
    public void delete3() throws InterruptedException {
        Session session=HibernateUtil.getSession();
        Car car=new Car(1,"bmw","red");
        session.beginTransaction();//开始事务
        session.save(car);
        session.getTransaction().commit();//提交事务
        Thread.sleep(20000);
        session.beginTransaction();//开始事务
        session.delete(car);
        session.getTransaction().commit();//提交事务
    }

4、扩展:
保存或修改:session.saveOrUpdate(对象);先根据主键值做查询,数据存在执行修改,数据不存在,执行保存

/**
     * 保存或修改
     */
    public void saveOrUpdate1(){
        Session session=HibernateUtil.getSession();
        Car car=new Car(1,"bmw","blue");
        session.beginTransaction();//开始事务
        session.saveOrUpdate(car);
        session.getTransaction().commit();//提交事务
    }

5、扩展
保存或修改:session.merge(对象) ;先根据主键值做查询,数据存在执行修改,数据不存在,执行保存

/**
     * 保存或修改
     */
    public void merge(){
        Session session=HibernateUtil.getSession();
        Car car=new Car(1,"bmw","blue");
        session.beginTransaction();//开始事务
        session.merge(car);
        session.getTransaction().commit();//提交事务
    }

saveOrUpdate和merge区别:
1、区别体现再修改时,
2、无论哪个方法实现修改,都可以将瞬时态对象转换成持久态对象,如果再session缓存中,之前已经存在了一个相同的id的持久态对象,那么saveOrUpdate方法会抛出异常(有两个不同的对象却有相同的id),但是merge方法会修改成功,因为merge会将两个相同的对象数据合并
merge修改的对象并没有变成持久态,而是将对象的数据覆盖到原持久态对象中

扩展:保存时的主键生成机制
只需要在orm配置文件中,使用id的子标签《generator》标签指定生成机制
HIbernate提供了多种主键生成机制,常用的有:
1、uuid varchar主键 32位16进制唯一数
2、identity 一般时mysql等 int类型的主键 自增,需要在建表时也设置主键自增
3、sequence 是oracle int类型的主键,序列自增,因为Oracle的序列是一个独立的数据库对象,拥有自己的名字,所以在设置sequence序列生成机制时需要通过传递指定序列的名,如果没有传递,则默认使用hibernate_sequence名字的 序列
4、foregin 一对一关联时,有关联表外键值充当主键值
5、assigned 默认 手动提供主键值
6、native:使用当前数据库默认支持的主键生成方式,如果是mysql则相当于identity,如果是Oracle,则相当于是sequence

<?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>
    <class name="com.hibernate.domain.Book" table="t_book"  lazy="false">
        <id name="bno" column="bno">
        	 <!--指定主键生成机制-->
            <generator class="uuid"></generator>
        </id>
        <property name="bname" column="bname"/>
        <property name="author" column="author"/>
    </class>

</hibernate-mapping>

注意:使用主键生成机制时,save方法执行保存后,会以返回值的形式将生成的主键返回

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate基本使用 的相关文章

  • Snipaste常用快捷键(详细总结)

    Snipaste快捷键 xff08 详细总结 xff09 全局快捷键 全局操作截屏F1贴图F3退出当前截图Esc截屏并自动复制Ctrl 43 F1隐藏 显示所有贴图Shift 43 F3切换到另一组贴图Ctrl 43 F3 鼠标贴图相关操作
  • 4位数值比较器电路

    4位数值比较器电路 题目描述 xff1a 使用门级描述方式 xff0c 实现4位数值比较器 某4位数值比较器的功能如下表 96 timescale 1ns 1ns module comparator 4 input 3 0 A input
  • Maven项目pom.xml project标签爆红解决方法

    今天在打开项目的时候 xff0c 发现了一个Maven项目的问题 xff0c 在Maven项目的pom xml文件中 xff0c project标签爆出了一个错误 parent relativePath of POM com hrp spr
  • 人工智能学习笔记五——孪生神经网络

    本文将用孪生神经网络模型 xff0c 对手写数字集minist进行相似度比较 xff0c 用的框架是keras 如果还不清楚神经网络 xff0c 可以看一下这篇文章 神经网络 caodong0225 github io MNIST 是一个手
  • Docker Swarm实战初探

    声明 xff1a 本文CSDN作者原创投稿文章 xff0c 未经许可禁止任何形式的转载 xff0c 原文链接 环境 宿主机 xff1a macOS 10 15 7虚拟机平台 xff1a Parallels Desktop 15 1 2虚拟机
  • 零基础DIY四轴飞行器超级详细保姆级教程(STM32F407ZGT6主控、WIFI图传、陀螺仪平衡、气压计/超声波定高、手机蓝牙控制等功能)

    前言 大四毕业后暑假没事做就花了一点DIY了一个四轴飞行器 xff0c 是比较大的那种F450机架 xff0c 不是那种PCB板做机架的小四轴 xff0c 因为我也是从零基础开始做的四轴 xff0c 现在就想把自己的过程写成博客分享在网上
  • shell教程

    shell 简介 Shell是一种脚本语言 xff0c 通常用于在Unix和类Unix操作系统上进行命令行交互 它是用户与操作系统内核之间的接口 xff0c 允许用户通过命令行或脚本文件来控制计算机上的操作 Shell程序通常用于执行复杂的
  • matlab画图常用函数image、imagesc、imshow区别

    1 image函数 从数组显示图像 xff0c 直接把矩阵中的值当作索引值 xff08 称为直接映射 xff09 xff0c 即数值1对应RGB1 xff0c 数值2对应于RGB2 xff0c 当小于1或大于64时表现为两端的颜色 语法1
  • 树莓派WiFi连接问题及网页打开问题的解决

    树莓派WiFi连接问题及网页打开问题的解决 一 问题描述 前一段时间在网上买了一个树莓派 4b计划做一个人脸识别的智能锁 xff0c 前一段时间整赶上期末考试 xff0c 挤时间做了做人脸识别以及人体红外感知模块 xff0c 大致能简单实现
  • C++11之正则表达式(regex_match、regex_search、regex_replace)

    在C 43 43 11中引入了正则表达式 字符规则 先来了解一下这个字符的含义吧 字符描述 转义字符 匹配字符行尾 匹配前面的子表达式任意多次 43 匹配前面的子表达式一次或多次 xff1f 匹配前面的子表达式零次或一次 m 匹配确定的m次
  • Java中Lambda表达式使用及详解

    Java中Lambda表达式使用及详解 前言 一 Lambda表达式的简介 Lambda表达式 xff08 闭包 xff09 xff1a java8的新特性 xff0c lambda运行将函数作为一个方法的参数 xff0c 也就是函数作为参
  • 栈的出栈次序及次序种类

    学过数据结构的程序猿应该都清楚 xff0c 栈是一种先入后出 xff0c 后入先出 xff08 LIFO xff09 的表 即插入和删除都只能在一个位置上进行 xff0c 即栈顶位置 对栈的基本操作有Push xff08 入栈 xff09
  • ANO匿名飞控时间片调度移植至普通STM32工程

    工程结构 时间片调度相关的代码位于SCHEDULER目录下的Scheduler和Task文件中 xff0c 匿名飞控原本的时钟由传感器输出的1ms脉冲实现的外部中断提供 xff0c 为使时间片调度算法可以用于一般的工程 xff0c 此处改为
  • for(let i in arr) for(let i of arr )与普通for循环的区别

    span class token keyword let span arr span class token operator 61 span span class token punctuation span span class tok
  • 执行webpack命令出错:无法识别webpack && Can‘t resolve ‘./src‘ in xxx

    一 webpack 无法将 webpack 项识别为 cmdlet 函数 脚本文件或可运行程序的名称 解决方案 xff1a 全局安装webpack 和webpack cli 命令 xff1a cnpm install webpack cli
  • 豆瓣API获取的图片不显示

    一 问题 xff1a 使用豆瓣API获取到的数据不能正常显示 二 解决方法 从控制台中查看图片的url地址发现 xff1a 同为一个网站提供的数据但是提供的url地址的域名却不同 这是不符合情理的 xff0c 因为为了使数据有规律 xff0
  • 使用 vue cli 的 vue serve命令单独运行.vue文件报错: Error: Cannot find module ‘@vue/compiler-sfc/package.json‘

    目录 一 问题 二 无需配置直接运行 vue文件 三 解决 1 详细错误 四 总结 一 问题 根据vue cli官方文档 https cli vuejs org zh guide prototyping html学习无需配置直接运行 vue
  • sass文件中使用深度选择器 /deep/不起作用

    目录 一 问题 二 原因 三 解决 使用deep深度选择器的基本步骤 四 总结 一 问题 1 想在当前的 vue文件中使用 deep 深度选择器修改第三库引入的组件或自定义组件的样式 xff0c 但是修改不成功 二 原因 1 自定义组件my
  • IconFont使用方式简介

    一 在线引入方式 1 iconfont中选择需要的图标 xff0c 加入购物车 图1 2 点击图1所示的购物车 xff0c 弹出如图2所示的弹框 依次点击 添加至项目 选择需要添加的项目 再点击确定 跳转到如图3所示的页面 图2 3 点击图
  • el-select下拉框没有数据

    目录 一 问题 二 问题详细描述 三 解决方法 四 总结 一 问题 1 突然发现给options赋值了 xff0c 但是下拉框没有数据 xff0c 就很奇怪 二 问题详细描述 1 直接用假数据 手动添加的数据 xff09 赋值给option

随机推荐

  • vue在html标签 {{}} 中调用函数的方法

    目录 一 问题 1 xff09 实现上述需求 xff1a 有两种方式 2 xff09 两种实现方式对比 xff1a 二 解决方法 xff08 在html渲染时调用函数 xff09 三 总结 注 xff1a 不想仔细看的 xff0c 可以直接
  • vue watch报错:Error in callback for watcher “xxx“: “TypeError: Cannot read properties of undefined ...

    目录 一 问题 二 解决方法 三 总结 一 问题 1 监听了一个data里面的对象竟然报错了 xff0c 错误还奇奇怪怪的 xff1a 不能在 undefined上使用 apply方法 1 xff09 详细错误如下 xff1a vue es
  • toFixed()*100保留的小数位数和预想的不一致

    目录 一 问题 二 原因及解决方法 三 总结 一 问题 1 因为演示需要 xff0c 要造一些假数据 xff0c 一些数据要求保留2位小数 这需求真的不难 xff0c 不就是parseFloat toFixed 不就完了 2 所以很快就写了
  • scss、css样式中使用变量的方法;Vue动态改变css等样式文件中的变量

    目录 一 问题 二 原因及解决方法 三 总结 一 问题 1 遇到一些样式 设置的值都是重复的不想重复写 xff0c 想和js一样定义一个常量 xff0c 然后直接引用这个常量 2 想要在js中动态设置样式中的值 xff0c 在 css sc
  • fengMap报错 :Uncaught TypeError: Cannot read properties of undefined (reading ‘Q‘)

    目录 一 问题 二 原因 三 总结 tips 如嫌繁琐 xff0c 直接看总结即可 xff01 一 问题 详细错误 xff1a fengmap map min js 8d2c 47451 Uncaught TypeError Cannot
  • docker-compose启动并使用MongoDB

    声明 xff1a 本文CSDN作者原创投稿文章 xff0c 未经许可禁止任何形式的转载 xff0c 原文链接 创建docker compose yml文件 span class token key atrule version span s
  • c++实现文本输入输出

    介绍一种我喜欢的c 43 43 文本输入输出方式 这种方式我经常用来写代码调试 c 43 43 文本输入输出 xff0c 需要用到freopen函数 xff0c 它包含在头文件 lt cstdio gt 不过我在使用c 43 43 的时候
  • Halcon 第五章『模板匹配Matching』◆第4节:基于形状的模板匹配|Shape-Based

    一 介绍 基于形状的模板匹配 xff0c 也称为基于边缘方向梯度的匹配 xff0c 是一种最常用也最前沿的模板匹配算法 该算法以物体边缘的梯度相关性作为匹配标准 xff0c 原理是提取ROI中的边缘特征 xff0c 结合灰度信息创建模板 x
  • python与SUMO连接报错Error: tcpip::Socket::accept() Unable to create listening socket: Address already in

    Error tcpip Socket accept Unable to create listening socket Address already in use 原因 xff0c 端口号被占用 xff0c 把端口号改掉 xff08 1
  • 超详细VMware CentOS7(有可视化界面版)安装教程

    前言 xff1a 在我们使用虚拟机的时候 xff0c 不要去担心我们的一些操作会使虚拟机损坏或者有没有可能会使我们的电脑本身出现一些问题 xff0c 要记住无论我们把我们的虚拟机如何都不会影响我们本身的机器 xff0c 因为它只是虚拟的 x
  • 使用ESP8266驱动TFT显示屏

    1 准备工作 材料 xff1a ESP8266开发板 1 54寸IPS显示屏 开发环境 xff1a Arduino 驱动库 xff1a TFT eSPI 连线 xff1a SCK GPIO14D5MOSIGPIO13D7RESGPIO2D4
  • PX4学习笔记(3)

    1 编译PX4 1 1 编译对应的代码 教程链接 xff1a https docs px4 io main zh dev setup building px4 html 由于我使用的是pixhawk 2 4 8 xff0c 应该使用以下命令
  • VDO---虚拟数据优化

    学习目标 xff1a 理解什么是VDO xff0c VDO有什么作用 学会使用VDO 内容前导 xff1a VDO xff08 Virtual Data Optimize xff0c 虚拟数据优化 xff09 是一种通过压缩或删除存储设备上
  • 阿里云轻量应用服务器centos7搭建hadoop伪分布式集群

    centos7上hadoop伪分布式集群配置 写在前面 云计算实验 xff0c hadoop完全式分布集群 xff0c 没那么多服务器就搞了个伪分布式 纯粹为了应付老师 xff0c 教程是一边查一遍弄的 xff0c 重复装了一次 xff0c
  • Eigen/Sparse稀疏矩阵SparseMatrix

    关于Eigen的稀疏矩阵的介绍 xff1a 原文链接 1 SparseMatrix的格式 SparseMatrix主要包含以下4个数组 xff1a Values stores the coefficient values of the no
  • SpringBoot事件监听器的四种方式

    Java事件监听 事件监听的概念 xff1a 事件监听就是让电脑通过你的操作得到一些数据并对这些数据做出反应 xff0c 反馈相应的行为或者指令的操作 java中的事件机制的参与者有3种角色 xff1b event object 事件状态对
  • OAI搭建步骤(EPC+eNB)

    声明 xff1a 本文CSDN作者原创投稿文章 xff0c 未经许可禁止任何形式的转载 xff0c 原文链接 文章目录 一 系统概述二 搭建核心网EPC openair cn 2 1 准备主机2 2 更换内核2 3 获取openair cn
  • Layui网址

    http laizhefa com layer index html
  • Spring Security

    Spring Security简介 Spring Security是一个高度自定义的安全框架 利用Spring IOC DI和AOP功能 xff0c 为系统提供了声明式安全访问控制功能 xff0c 减少了为系统安全而编写大量重复代码的工作
  • Hibernate基本使用

    Hibrenate框架 一 Hibrenate 1 是一个持久层框架 xff0c 实现jdbc的封装 是一个全自动的ORM框架 2 ORM xff1a 对象 关系 数据库表 映射 xff0c orm致力于将数据库操作转换成Java程序熟悉的