目录

1、JPA 和JDBC 的相同处和不同处

2、什么是JPA

3、Hibernate与JPA

4、mybatis和hibernate

5、Hibernate的CRUD操作案例

主结构:​编辑

springdata→pom.xml :

01-jpa-hibernate→pom.xml :

pojo→Customer实体类:

hibernate.cfg.xml 文件:

HibernateTest测试

6、JPA的CRUD操作案例

主结构:​编辑

springdata→pom.xml :

01-jpa-hibernate→pom.xml :

pojo→Customer实体类:

添加META-INF\persistence.xml

JpaTest测试


1、JPA 和JDBC 的相同处和不同处

相同处:
1.都跟数据∙库操作有关,JPA 是JDBC 的升华,升级版。
2.JDBC和JPA都是一组规范接口
3.都是由SUN官方推出的
不同处:
1.JDBC是由各个关系型数据库实现的, JPA 是由 ORM框架 实现
2.JDBC 使用SQL语句和数据库通信。 JPA用面向对象方式, 通过ORM框架来生成SQL,进行操作。

3.JPA在JDBC之上的, JPA也要依赖JDBC才能操作数据库。


2、什么是JPA

JPA全称Java Persistence API , 是Sun官方提出的 一种ORM规范。
O:Object R: Relational M:mapping
作用
1.简化持久化操作的开发工作:让 开发者从繁琐的 JDBC 和 SQL 代码中解脱出来,直接面向对象持久化操作。
2.Sun希望持久化技术能够统一,实现天下归一:如果你是基于JPA进行持久化你可以随意切换数据库。
该规范为我们提供了:
1) ORM映射元数据 :JPA支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对
象持久化到数据库表中;
如: @Entity 、 @Table 、 @Id 与 @Column 等注解。
2) JPA 的API :用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和
SQL代码中解脱出来。
如: entityManager.merge(T t) ;
3) JPQL查询语言 :通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
如: from Student s where s.name = ?
So: JPA仅仅是一种规范,也就是说JPA仅仅定义了一些接口,而接口是需要实现才能工作的。


3、Hibernate与JPA

JPA是一套ORM规范,Hibernate实现了JPA规范!


4、mybatis和hibernate

mybatis:小巧、方便?、高效、简单、直接、半自动
半自动的ORM框架,
小巧: mybatis就是jdbc封装
在国内更流行。
场景: 在业务比较复杂系统进行使用,
hibernate:强大、方便、高效、(简单)复杂、绕弯子、全自动
全自动的ORM框架,
强大:根据ORM映射生成不同SQL
在国外更流。
场景: 在业务相对简单的系统进行使用,随着微服务的流行。


5、Hibernate的CRUD操作案例

主结构:

springdatapom.xml :

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.tuling.springdata</groupId><artifactId>springdata</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><modules><module>01-jpa-hibernate</module><module>02-springdata-jpa</module><module>03-springdata-jpa</module><module>04-springdata-jpa</module></modules><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><!--统一管理SpringData子项目的版本--><dependencyManagement><dependencies><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-bom</artifactId><version>2021.1.0</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement></project>

01-jpa-hibernate→pom.xml :

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springdata</artifactId><groupId>com.tuling.springdata</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>01-jpa-hibernate</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><!-- junit4 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency><!-- hibernate对jpa的支持包 --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>5.4.32.Final</version></dependency><!-- Mysql and MariaDB --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.22</version></dependency><!--openjpa--><dependency><groupId>org.apache.openjpa</groupId><artifactId>openjpa-all</artifactId><version>3.2.0</version></dependency></dependencies></project>

pojo→Customer实体类:

package com.tuling.pojo;import javax.persistence.*;@Entity     // 作为hibernate 实体类
@Table(name = "tb_customer")       // 映射的表明
public class Customer {/*** @Id:声明主键的配置* @GeneratedValue:配置主键的生成策略*      strategy*          GenerationType.IDENTITY :自增,mysql*                 * 底层数据库必须支持自动增长(底层数据库支持的自动增长方式,对id自增)*          GenerationType.SEQUENCE : 序列,oracle*                  * 底层数据库必须支持序列*          GenerationType.TABLE : jpa提供的一种机制,通过一张数据库表的形式帮助我们完成主键自增*          GenerationType.AUTO : 由程序自动的帮助我们选择主键生成策略* @Column:配置属性和字段的映射关系*      name:数据库表中字段的名称*/@Id//声明主键的配置@GeneratedValue(strategy = GenerationType.IDENTITY)//配置主键的生成策略@Column(name = "id")//配置属性和字段的映射关系  name:数据库表中字段的名称private Long custId; //客户的主键@Column(name = "cust_name")private String custName;//客户名称@Column(name="cust_address")private String custAddress;//客户地址public Long getCustId() {return custId;}public void setCustId(Long custId) {this.custId = custId;}public String getCustName() {return custName;}public void setCustName(String custName) {this.custName = custName;}public String getCustAddress() {return custAddress;}public void setCustAddress(String custAddress) {this.custAddress = custAddress;}@Overridepublic String toString() {return "Customer{" +"custId=" + custId +", custName='" + custName + '\'' +", custAddress='" + custAddress + '\'' +"}\n";}}

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="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql://localhost:3306/springdata_jpa?characterEncoding=UTF-8</property><property name="connection.username">root</property><property name="connection.password">123456</property><!-- 会在日志中记录sql 默认false--><property name="show_sql">true</property><!--是否格式化sql 默认false,不格式化的话就会都在一行中显示,最好格式化一下--><property name="format_sql">true</property><!--表生成策略默认none   不自动生成update    如果没有表会创建,有会检查更新create    创建--><property name="hbm2ddl.auto">update</property><!-- 配置方言:选择数据库类型 --><property name="dialect">org.hibernate.dialect.MySQL57InnoDBDialect</property><!--指定哪些pojo 需要进行ORM映射--><mapping class="com.tuling.pojo.Customer"></mapping></session-factory>
</hibernate-configuration>

HibernateTest测试

package com.tuling.test;import com.tuling.pojo.Customer;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.junit.Before;
import org.junit.Test;import java.util.List;public class HibernateTest {// Session工厂  Session:数据库会话  代码和数据库的一个桥梁private SessionFactory sf;@Beforepublic void init() {StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("/hibernate.cfg.xml").build();//2. 根据服务注册类创建一个元数据资源集,同时构建元数据并生成应用一般唯一的的session工厂sf = new MetadataSources(registry).buildMetadata().buildSessionFactory();}//增@Testpublic void testC(){// session进行持久化操作//使用try意思就是他会帮我们自动关闭try(Session session = sf.openSession()){//开启事务Transaction tx = session.beginTransaction();Customer customer = new Customer();customer.setCustName("徐庶");session.save(customer);
//          session.remove(); //删除
//            session.update(); //更新
//            session.save();   //插入
//            session.find();   //查找tx.commit();}}//查@Testpublic void testR(){// session进行持久化操作try(Session session = sf.openSession()){Transaction tx = session.beginTransaction();Customer customer = session.find(Customer.class, 1L);System.out.println("=====================");System.out.println(customer);tx.commit();}}//查询,懒加载方式@Testpublic void testR_lazy(){// session进行持久化操作try(Session session = sf.openSession()){Transaction tx = session.beginTransaction();Customer customer = session.load(Customer.class, 1L);System.out.println("=====================");System.out.println(customer);tx.commit();}}//更新@Testpublic void testU(){// session进行持久化操作try(Session session = sf.openSession()){Transaction tx = session.beginTransaction();Customer customer = new Customer();//customer.setCustId(1L);customer.setCustName("徐庶");// 插入session.save()// 更新session.update();session.saveOrUpdate(customer);//如果不存在他会为你创建,如果存在他就会为你更新tx.commit();}}//删除@Testpublic void testD(){// session进行持久化操作try(Session session = sf.openSession()){Transaction tx = session.beginTransaction();Customer customer = new Customer();customer.setCustId(2L);session.remove(customer);tx.commit();}}//HQL查询全部@Testpublic void testR_HQL(){// session进行持久化操作try(Session session = sf.openSession()){Transaction tx = session.beginTransaction();String hql=" FROM Customer";List<Customer> resultList = session.createQuery(hql, Customer.class)
//                    .setParameter("id",1L).getResultList();//获取查询集合System.out.println(resultList);tx.commit();}}//HQL查询单个@Testpublic void testR_HQL2(){// session进行持久化操作try(Session session = sf.openSession()){Transaction tx = session.beginTransaction();String hql=" FROM Customer where custId=:id";List<Customer> resultList = session.createQuery(hql, Customer.class).setParameter("id",1L)//查询id为1l的人的信息,与上面HQL语句:where custId=:id 对应.getResultList();//获取查询集合System.out.println(resultList);tx.commit();}}
}

6、JPA的CRUD操作案例

(如果单独使用hibernate的API来进行持久化操作,则不能随意切换其他ORM框架 )

 主结构:

springdatapom.xml :

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.tuling.springdata</groupId><artifactId>springdata</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><modules><module>01-jpa-hibernate</module><module>02-springdata-jpa</module><module>03-springdata-jpa</module><module>04-springdata-jpa</module></modules><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><!--统一管理SpringData子项目的版本--><dependencyManagement><dependencies><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-bom</artifactId><version>2021.1.0</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement></project>

01-jpa-hibernate→pom.xml :

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springdata</artifactId><groupId>com.tuling.springdata</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>01-jpa-hibernate</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><!-- junit4 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency><!-- hibernate对jpa的支持包 --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>5.4.32.Final</version></dependency><!-- Mysql and MariaDB --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.22</version></dependency><!--openjpa--><dependency><groupId>org.apache.openjpa</groupId><artifactId>openjpa-all</artifactId><version>3.2.0</version></dependency></dependencies></project>

pojo→Customer实体类:

package com.tuling.pojo;import javax.persistence.*;@Entity     // 作为hibernate 实体类
@Table(name = "tb_customer")       // 映射的表明
public class Customer {/*** @Id:声明主键的配置* @GeneratedValue:配置主键的生成策略*      strategy*          GenerationType.IDENTITY :自增,mysql*                 * 底层数据库必须支持自动增长(底层数据库支持的自动增长方式,对id自增)*          GenerationType.SEQUENCE : 序列,oracle*                  * 底层数据库必须支持序列*          GenerationType.TABLE : jpa提供的一种机制,通过一张数据库表的形式帮助我们完成主键自增*          GenerationType.AUTO : 由程序自动的帮助我们选择主键生成策略* @Column:配置属性和字段的映射关系*      name:数据库表中字段的名称*/@Id//声明主键的配置@GeneratedValue(strategy = GenerationType.IDENTITY)//配置主键的生成策略@Column(name = "id")//配置属性和字段的映射关系  name:数据库表中字段的名称private Long custId; //客户的主键@Column(name = "cust_name")private String custName;//客户名称@Column(name="cust_address")private String custAddress;//客户地址public Long getCustId() {return custId;}public void setCustId(Long custId) {this.custId = custId;}public String getCustName() {return custName;}public void setCustName(String custName) {this.custName = custName;}public String getCustAddress() {return custAddress;}public void setCustAddress(String custAddress) {this.custAddress = custAddress;}@Overridepublic String toString() {return "Customer{" +"custId=" + custId +", custName='" + custName + '\'' +", custAddress='" + custAddress + '\'' +"}\n";}}

添加META-INF\persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"><!--需要配置persistence-unit节点持久化单元:name:持久化单元名称transaction-type:事务管理的方式JTA:分布式事务管理RESOURCE_LOCAL:本地事务管理--><persistence-unit name="hibernateJPA" transaction-type="RESOURCE_LOCAL"><!--jpa的实现方式 --><provider>org.hibernate.jpa.HibernatePersistenceProvider</provider><!--需要进行ORM的POJO类--><class>com.tuling.pojo.Customer</class><!--可选配置:配置jpa实现方的配置信息--><properties><!-- 数据库信息用户名,javax.persistence.jdbc.user密码,  javax.persistence.jdbc.password驱动,  javax.persistence.jdbc.driver数据库地址   javax.persistence.jdbc.url--><property name="javax.persistence.jdbc.user" value="root"/><property name="javax.persistence.jdbc.password" value="123456"/><property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/><property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/springdata_jpa?characterEncoding=UTF-8"/><!--配置jpa实现方(hibernate)的配置信息显示sql           :   false|true自动创建数据库表    :  hibernate.hbm2ddl.autocreate      : 程序运行时创建数据库表(如果有表,先删除表再创建)update      :程序运行时创建表(如果有表,不会创建表)none        :不会创建表--><property name="hibernate.show_sql" value="true" /><property name="hibernate.hbm2ddl.auto" value="update" /><property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /></properties></persistence-unit><persistence-unit name="openJpa" transaction-type="RESOURCE_LOCAL"><!--jpa的实现方式 --><provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider><!-- 指定哪些实体需要持久化 --><class>com.tuling.pojo.Customer</class><!--可选配置:配置jpa实现方的配置信息--><properties><!-- 数据库信息用户名,javax.persistence.jdbc.user密码,  javax.persistence.jdbc.password驱动,  javax.persistence.jdbc.driver数据库地址   javax.persistence.jdbc.url--><property name="javax.persistence.jdbc.user" value="root"/><property name="javax.persistence.jdbc.password" value="123456"/><property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/><property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/springdata_jpa?characterEncoding=UTF-8"/><!--配置jpa实现方(openjpa)的配置信息--><!-- 可以自动生成数据库表 --><property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/></properties></persistence-unit></persistence>

JpaTest测试

package com.tuling.test;import com.tuling.pojo.Customer;
import org.junit.Before;
import org.junit.Test;import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;public class JpaTest {EntityManagerFactory factory;@Beforepublic void before(){factory= Persistence.createEntityManagerFactory("hibernateJPA");//括号里面是持久化单元的名称}//增@Testpublic void testC(){EntityManager em = factory.createEntityManager();//这里生成的 em ,就相当于Hibernate里面生成的 sessionEntityTransaction tx = em.getTransaction();tx.begin();//开启事务Customer customer = new Customer();customer.setCustName("张三");em.persist(customer);//插入tx.commit();//提交}// 立即查询@Testpublic void testR(){EntityManager em = factory.createEntityManager();EntityTransaction tx = em.getTransaction();tx.begin();Customer customer = em.find(Customer.class, 1L);System.out.println("========================");System.out.println(customer);tx.commit();}// 延迟查询@Testpublic void testR_lazy(){EntityManager em = factory.createEntityManager();EntityTransaction tx = em.getTransaction();tx.begin();Customer customer = em.getReference(Customer.class, 1L);System.out.println("========================");System.out.println(customer);tx.commit();}//修改@Testpublic void testU(){EntityManager em = factory.createEntityManager();EntityTransaction tx = em.getTransaction();tx.begin();Customer customer = new Customer();customer.setCustId(3L);customer.setCustName("王五");/**// 如果指定了主键:更新: 1.先查询  看是否有变化如果有变化 更新     如果没有变化就不更新**   如果没有指定了主键:*          插入* */em.merge(customer);tx.commit();}//JPQL更新语句@Testpublic void testU_JPQL(){EntityManager em = factory.createEntityManager();EntityTransaction tx = em.getTransaction();tx.begin();String jpql="UPDATE Customer set custName=:name where custId=:id";em.createQuery(jpql).setParameter("name","李四").setParameter("id",3L).executeUpdate();tx.commit();}//使用SQL更新语句@Testpublic void testU_SQL(){EntityManager em = factory.createEntityManager();EntityTransaction tx = em.getTransaction();tx.begin();String sql="UPDATE tb_customer set cust_name=:name where id=:id";em.createNativeQuery(sql).setParameter("name","王五").setParameter("id",3L).executeUpdate();tx.commit();}//删除@Testpublic void testD(){EntityManager em = factory.createEntityManager();EntityTransaction tx = em.getTransaction();tx.begin();Customer customer = em.find(Customer.class,3L);//先查持久化状态的,然后再删
//        jpa的对象4种状态
//    临时状态:刚创建出来,∙没有与entityManager发生关系,没有被持久化,不处于entityManager中的对象
//    持久状态:∙与entityManager发生关系,已经被持久化,您可以把持久化状态当做实实在在的数据库记录。
//    删除状态:执行remove方法,事物提交之前
//    游离状态:游离状态就是提交到数据库后,事务commit后实体的状态,因为事务已经提交了,此时实体的属 性任你如何改变,也不会同步到数据库,
//            因为游离是没人管的孩子,不在持久化上下文中。em.remove(customer);tx.commit();}
}

JPA-Hibernate快速入门图文教程相关推荐

  1. Allegro Design Entry HDL(OrCAD Capture HDL)原理图是设计快速入门图文教程

      ⏪<上一篇>   

  2. 阿里云服务器购买及使用流程(新手入门图文教程)

    阿里云服务器购买及使用流程(新手入门图文教程) 一.登录及密码重置 二.远程连接 三.网络安全组设置 进入 https://www.aliyun.com/,选择所需ESC的配置并购买(选择时可参考购买 ...

  3. Axure rp9入门图文教程——基操及介绍(看完就能上手,人人都是产品经理)

    Axure rp9入门图文教程-基操及介绍 免费版安装包请点击此处(避免审查,请点击这)[^这里] 一.界面介绍 1. 复制.剪切及粘贴区域 2. 选择模式 3. 插入形状 4. 控点(编辑控点) 5 ...

  4. 扫掠两条引导线_NX10 入门图文教程——异形台架(扫掠或者沿引导线扫掠)

    NX10 入门图文教程--异形台架(扫掠或者沿引导线扫掠) 块,长方体,由于这个体不是对称的,所以选择长方体完成,原点开始,设置参数 长方体,选择棱边端点,这个地方用长方体目的是上方的这个块与下面的块 ...

  5. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 4. 函数

    什么样的程序员才是优秀的程序员?咪博士认为"慵懒"的程序员才是真正优秀的程序员.听起来不合逻辑?真正优秀的程序员知道如何高效地工作,而不是用不止境的加班来完成工作任务.函数便是程序 ...

  6. (转)Hibernate快速入门

    http://blog.csdn.net/yerenyuan_pku/article/details/64209343 Hibernate框架介绍 什么是Hibernate 我们可以从度娘上摘抄这样有 ...

  7. python海龟教程_Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 7. 条件循环...

    条件循环能够让程序在条件成立时(即为真时)重复执行循环体中的语句.如果条件一直成立(即永远不会为假),则循环会一直进行下去,不会停止.如果初始时,条件不成立,则循环 1 次也不会执行.Python 中 ...

  8. 计算机进入休眠状态如何唤醒,电脑进入睡眠状态怎么快速唤醒图文教程

    你是否遇到过电脑睡眠后无法唤醒的情况,电脑进入睡眠状态怎么快速唤醒?此类现象一般是因为系统设置导致,或者系统固件比支持此功能,今天小编就和大家一起来学习鼠标无法唤醒睡眠中的电脑的解决方法. 电脑进入睡 ...

  9. 真正从零开始,TensorFlow详细安装入门图文教程!(linux)

    读懂智能&未来 首页 专栏 专题 公开课 AI慕课学院 爱搞机 极客购 申请专栏作者 业界人工智能智能驾驶AI+Fintech未来医疗网络安全AR/VR机器人开发者智能硬件物联网GAIR 业界 ...

最新文章

  1. 彩色图像到灰度转换 常见方法汇总与对比
  2. python字符串应用
  3. 代码与html混合,自定义的标签与html的标签混合应用_css
  4. 十万个为什么儿童版_《虹猫蓝兔十万个为什么》上架爱奇艺奇巴布绘本馆
  5. PuppeteerSharp: 更友好的 Headless Chrome C# API
  6. 投篮c语言程序设计,教师招聘笔试体育之篮球必做20题(一)
  7. jq常用过滤器_JQuery的常用选择器、过滤器、方法全面介绍
  8. EasyUI中取的DataGrid中选中行数据
  9. socket和URLConnection
  10. C语言学生信息管理系统源代码
  11. android多音字转拼音工具分装
  12. Python 字符串 循环
  13. 激光雷达在自动驾驶中的应用
  14. 常用英语前缀和全部英语前缀——138个
  15. 启动Kylin出现的问题
  16. 一个开源的 Markdown 在线编辑器
  17. 网易花19亿买地,要在上海建总部大楼,团队至少2000人
  18. 上周热点回顾(4.9-4.15)
  19. Ubuntu 16.04 查看软件包的命令技巧
  20. 【Mathematica】三种画爱心的方法

热门文章

  1. 微信小程序实现两数相加
  2. oCPC实践录 | 广告算法工程师的自我修养
  3. java.beans 包_JavaBeans的介绍与使用
  4. 荣联科技集团获“2022中国数字生态最具号召力奖”
  5. Word - Word快速去水印的 3 大绝招,再忙也要看
  6. antd Mobile Tabs 垂直布局 后台传入数据
  7. Juniper设备审计
  8. QT--警告libpng warning: iCCP: known incorrect sRGB profile
  9. Qt去除libpng warning: iCCP: known incorrect sRGB profile
  10. Mac OSX中设置路由