Hibernate一对一映射示例注释
Hibernate一对一映射示例注释
今天我们将研究Hibernate中的一对一映射。我们将使用Annotation和XML配置来研究Hibernate One To One Mapping示例。
目录[ 隐藏 ]
- 1 Hibernate中的一对一映射
- 1.1 Hibernate一对一映射示例数据库设置
- 1.2 Hibernate一对一映射示例项目结构
- 1.3 Hibernate Maven依赖项
- 1.4 Hibernate一对一映射模型类
- 1.5 Hibernate一对一映射配置
- 1.6休眠配置文件
- 1.7 Hibernate SessionFactory实用程序
- 1.8 Hibernate一对一映射XML配置测试程序
- 2 Hibernate一对一映射注释
- 2.1休眠配置文件
- 2.2 Hibernate一对一映射注释示例模型类
- 2.3 Hibernate SessionFactory实用工具类
- 2.4 Hibernate一对一映射注释示例测试程序
Hibernate中的一对一映射
大多数情况下,数据库表彼此相关联。有许多形式的关联 - 一对一,一对多和多对多在广泛的层面。这些可以进一步分为单向和双向映射。今天,我们将研究使用XML配置以及使用注释配置实现Hibernate一对一映射。
Hibernate一对一映射示例数据库设置
首先,我们需要在数据库表中设置一对一映射。我们将为我们的示例创建两个表 - Transaction和Customer。这两个表都将具有一对一的映射。Transaction将是主表,我们将使用Customer表中的Foreign Key进行一对一映射。
我正在提供MySQL脚本,这是我在本教程中使用的数据库。如果您正在使用任何其他数据库,请确保相应地更改脚本。
-- Create Transaction Table
CREATE TABLE `Transaction` (`txn_id` int(11) unsigned NOT NULL AUTO_INCREMENT,`txn_date` date NOT NULL,`txn_total` decimal(10,0) NOT NULL,PRIMARY KEY (`txn_id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;-- Create Customer table
CREATE TABLE `Customer` (`txn_id` int(11) unsigned NOT NULL,`cust_name` varchar(20) NOT NULL DEFAULT '',`cust_email` varchar(20) DEFAULT NULL,`cust_address` varchar(50) NOT NULL DEFAULT '',PRIMARY KEY (`txn_id`),CONSTRAINT `customer_ibfk_1` FOREIGN KEY (`txn_id`) REFERENCES `Transaction` (`txn_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
表之间的上述一对一映射的实体关系图(ERD)如下图所示。
我们的数据库设置准备就绪,现在让我们继续进行Hibernate One to One示例项目。
Hibernate一对一映射示例项目结构
在Java IDE中创建一个简单的Maven项目,我正在使用Eclipse。我们的最终项目结构如下图所示。
首先,我们将研究基于XML的Hibernate一对一映射示例,然后我们将使用注释实现相同的功能。
Hibernate Maven依赖项
我们的最终pom.xml文件如下所示。
<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.journaldev.hibernate</groupId><artifactId>HibernateOneToOneMapping</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>4.3.5.Final</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.0.5</version></dependency></dependencies>
</project>
依赖关系只适用于hibernate和mysql java驱动程序。请注意,我正在使用基于我的MySQL数据库服务器版本(5.0.5)的Hibernate最新版本4.3.5.Final和MySQL java驱动程序。
Hibernate 4使用JBoss日志记录,它作为传递依赖项自动导入。您可以在项目的maven依赖项中确认它。如果您使用的是Hibernate旧版本,则可能必须添加slf4j依赖项。
Hibernate一对一映射模型类
用于反映数据库表的Hibernate One to One映射的模型类如下所示。
package com.journaldev.hibernate.model;import java.util.Date;public class Txn {private long id;private Date date;private double total;private Customer customer;@Overridepublic String toString(){return id+", "+total+", "+customer.getName()+", "+customer.getEmail()+", "+customer.getAddress();}public long getId() {return id;}public void setId(long id) {this.id = id;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}public double getTotal() {return total;}public void setTotal(double total) {this.total = total;}public Customer getCustomer() {return customer;}public void setCustomer(Customer customer) {this.customer = customer;}}
package com.journaldev.hibernate.model;public class Customer {private long id;private String name;private String email;private String address;private Txn txn;public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public Txn getTxn() {return txn;}public void setTxn(Txn txn) {this.txn = txn;}}
由于我们使用基于XML的配置进行映射,因此上面的模型类是简单的POJO类或带有getter-setter方法的Java Bean。我使用类名Txn
来避免混淆,因为Hibernate API有一个类名Transaction
。
Hibernate一对一映射配置
让我们为Txn和Customer表创建一对一的hibernate映射配置文件。
txn.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping><class name="com.journaldev.hibernate.model.Txn" table="TRANSACTION" ><id name="id" type="long"><column name="txn_id" /><generator class="identity" /></id><property name="date" type="date"><column name="txn_date" /></property><property name="total" type="double"><column name="txn_total" /></property><one-to-one name="customer" class="com.journaldev.hibernate.model.Customer"cascade="save-update" /></class></hibernate-mapping>
上面要注意的重点是one-to-one
客户属性的hibernate 元素。
customer.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
<hibernate-mapping><class name="com.journaldev.hibernate.model.Customer" table="CUSTOMER"><id name="id" type="long"><column name="txn_id" /><generator class="foreign"><param name="property">txn</param></generator></id><one-to-one name="txn" class="com.journaldev.hibernate.model.Txn"constrained="true"></one-to-one><property name="name" type="string"><column name="cust_name"></column></property><property name="email" type="string"><column name="cust_email"></column></property><property name="address" type="string"><column name="cust_address"></column></property></class></hibernate-mapping>
generator class =“foreign”是用于hibernate 外键实现的重要部分。
休眠配置文件
这是基于XML的hibernate映射配置的hibernate配置文件。
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://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.password">pankaj123</property><property name="hibernate.connection.url">jdbc:mysql://localhost/TestDB</property><property name="hibernate.connection.username">pankaj</property><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><property name="hibernate.current_session_context_class">thread</property><property name="hibernate.show_sql">true</property><mapping resource="txn.hbm.xml"/><mapping resource="customer.hbm.xml"/></session-factory>
</hibernate-configuration>
Hibernate配置文件很简单,它具有数据库连接属性和hibernate映射资源。
Hibernate SessionFactory实用程序
这是创建hibernate SessionFactory实例的实用程序类。
package com.journaldev.hibernate.util;import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;public class HibernateUtil {private static SessionFactory sessionFactory;private static SessionFactory buildSessionFactory() {try {// Create the SessionFactory from hibernate.cfg.xmlConfiguration configuration = new Configuration();configuration.configure("hibernate.cfg.xml");System.out.println("Hibernate Configuration loaded");ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();System.out.println("Hibernate serviceRegistry created");SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);return sessionFactory;}catch (Throwable ex) {System.err.println("Initial SessionFactory creation failed." + ex);ex.printStackTrace();throw new ExceptionInInitializerError(ex);}}public static SessionFactory getSessionFactory() {if(sessionFactory == null) sessionFactory = buildSessionFactory();return sessionFactory;}
}
就是这样,让我们编写一个测试程序来测试hibernate一对一映射基于xml的配置。
Hibernate一对一映射XML配置测试程序
在hibernate一对一映射示例测试程序中,首先我们将创建Txn对象并保存它。一旦将其保存到数据库中,我们将使用生成的id来检索Txn对象并将其打印出来。
package com.journaldev.hibernate.main;import java.util.Date;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;import com.journaldev.hibernate.model.Customer;
import com.journaldev.hibernate.model.Txn;
import com.journaldev.hibernate.util.HibernateUtil;public class HibernateOneToOneMain {public static void main(String[] args) {Txn txn = buildDemoTransaction();SessionFactory sessionFactory = null;Session session = null;Transaction tx = null;try{//Get SessionsessionFactory = HibernateUtil.getSessionFactory();session = sessionFactory.getCurrentSession();System.out.println("Session created");//start transactiontx = session.beginTransaction();//Save the Model objectsession.save(txn);//Commit transactiontx.commit();System.out.println("Transaction ID="+txn.getId());//Get Saved Trasaction DataprintTransactionData(txn.getId(), sessionFactory);}catch(Exception e){System.out.println("Exception occured. "+e.getMessage());e.printStackTrace();}finally{if(!sessionFactory.isClosed()){System.out.println("Closing SessionFactory");sessionFactory.close();}}}private static void printTransactionData(long id, SessionFactory sessionFactory) {Session session = null;Transaction tx = null;try{//Get SessionsessionFactory = HibernateUtil.getSessionFactory();session = sessionFactory.getCurrentSession();//start transactiontx = session.beginTransaction();//Save the Model objectTxn txn = (Txn) session.get(Txn.class, id);//Commit transactiontx.commit();System.out.println("Transaction Details=\n"+txn);}catch(Exception e){System.out.println("Exception occured. "+e.getMessage());e.printStackTrace();}}private static Txn buildDemoTransaction() {Txn txn = new Txn();txn.setDate(new Date());txn.setTotal(100);Customer cust = new Customer();cust.setAddress("Bangalore, India");cust.setEmail("pankaj@gmail.com");cust.setName("Pankaj Kumar");txn.setCustomer(cust);cust.setTxn(txn);return txn;}}
现在,当我们在hibernate测试程序中运行一对一映射时,我们得到以下输出。
Hibernate Configuration loaded
Hibernate serviceRegistry created
Session created
Hibernate: insert into TRANSACTION (txn_date, txn_total) values (?, ?)
Hibernate: insert into CUSTOMER (cust_name, cust_email, cust_address, txn_id) values (?, ?, ?, ?)
Transaction ID=19
Hibernate: select txn0_.txn_id as txn_id1_1_0_, txn0_.txn_date as txn_date2_1_0_, txn0_.txn_total as txn_tota3_1_0_,
customer1_.txn_id as txn_id1_0_1_, customer1_.cust_name as cust_nam2_0_1_, customer1_.cust_email as cust_ema3_0_1_,
customer1_.cust_address as cust_add4_0_1_ from TRANSACTION txn0_ left outer join CUSTOMER customer1_ on
txn0_.txn_id=customer1_.txn_id where txn0_.txn_id=?
Transaction Details=
19, 100.0, Pankaj Kumar, pankaj@gmail.com, Bangalore, India
Closing SessionFactory
正如您所看到的那样,它工作正常,我们可以使用事务ID从两个表中检索数据。检查Hibernate内部使用的SQL来获取数据,使用连接从两个表中获取数据。
Hibernate一对一映射注释
在上一节中,我们看到了如何使用基于XML的配置进行hibernate一对一映射,现在让我们看看如何使用JPA和Hibernate注释来实现相同的功能。
休眠配置文件
hibernate-annotation.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://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.password">pankaj123</property><property name="hibernate.connection.url">jdbc:mysql://localhost/TestDB</property><property name="hibernate.connection.username">pankaj</property><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><property name="hibernate.current_session_context_class">thread</property><property name="hibernate.show_sql">true</property><mapping class="com.journaldev.hibernate.model.Txn1"/><mapping class="com.journaldev.hibernate.model.Customer1"/></session-factory>
</hibernate-configuration>
Hibernate配置很简单,你可以看到我有两个我们将用于注释的模型类 - Txn1
和Customer1
。
Hibernate一对一映射注释示例模型类
对于hibernate一对一映射注释配置,模型类是最重要的部分。让我们看看我们的模型类看起来如何。
package com.journaldev.hibernate.model;import java.util.Date;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;import org.hibernate.annotations.Cascade;@Entity
@Table(name="TRANSACTION")
public class Txn1 {@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name="txn_id")private long id;@Column(name="txn_date")private Date date;@Column(name="txn_total")private double total;@OneToOne(mappedBy="txn")@Cascade(value=org.hibernate.annotations.CascadeType.SAVE_UPDATE)private Customer1 customer;@Overridepublic String toString(){return id+", "+total+", "+customer.getName()+", "+customer.getEmail()+", "+customer.getAddress();}//Getter-Setter methods, omitted for clarity
}
请注意,大多数注释都来自Java Persistence API,因为Hibernate提供了它的实现。但是对于级联,我们需要使用Hibernate注释org.hibernate.annotations.Cascade
和枚举org.hibernate.annotations.CascadeType
。
package com.journaldev.hibernate.model;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;@Entity
@Table(name="CUSTOMER")
public class Customer1 {@Id@Column(name="txn_id", unique=true, nullable=false)@GeneratedValue(generator="gen")@GenericGenerator(name="gen", strategy="foreign", parameters={@Parameter(name="property", value="txn")})private long id;@Column(name="cust_name")private String name;@Column(name="cust_email")private String email;@Column(name="cust_address")private String address;@OneToOne@PrimaryKeyJoinColumnprivate Txn1 txn;//Getter-Setter methods
}
请注意,我们需要@GenericGenerator
从txn中使用id而不是生成它。
Hibernate SessionFactory实用工具类
创建SessionFactory与我们提供hibernate映射的方式无关。我们用于创建SessionFactory的实用程序类如下所示。
package com.journaldev.hibernate.util;import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;public class HibernateAnnotationUtil {private static SessionFactory sessionFactory;private static SessionFactory buildSessionFactory() {try {// Create the SessionFactory from hibernate-annotation.cfg.xmlConfiguration configuration = new Configuration();configuration.configure("hibernate-annotation.cfg.xml");System.out.println("Hibernate Annotation Configuration loaded");ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();System.out.println("Hibernate Annotation serviceRegistry created");SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);return sessionFactory;}catch (Throwable ex) {System.err.println("Initial SessionFactory creation failed." + ex);ex.printStackTrace();throw new ExceptionInInitializerError(ex);}}public static SessionFactory getSessionFactory() {if(sessionFactory == null) sessionFactory = buildSessionFactory();return sessionFactory;}
}
Hibernate一对一映射注释示例测试程序
这是一个简单的测试程序,用于我们的hibernate一对一映射注释示例。
package com.journaldev.hibernate.main;import java.util.Date;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;import com.journaldev.hibernate.model.Customer1;
import com.journaldev.hibernate.model.Txn1;
import com.journaldev.hibernate.util.HibernateAnnotationUtil;public class HibernateOneToOneAnnotationMain {public static void main(String[] args) {Txn1 txn = buildDemoTransaction();SessionFactory sessionFactory = null;Session session = null;Transaction tx = null;try{//Get SessionsessionFactory = HibernateAnnotationUtil.getSessionFactory();session = sessionFactory.getCurrentSession();System.out.println("Session created using annotations configuration");//start transactiontx = session.beginTransaction();//Save the Model objectsession.save(txn);//Commit transactiontx.commit();System.out.println("Annotation Example. Transaction ID="+txn.getId());//Get Saved Trasaction DataprintTransactionData(txn.getId(), sessionFactory);}catch(Exception e){System.out.println("Exception occured. "+e.getMessage());e.printStackTrace();}finally{if(sessionFactory != null && !sessionFactory.isClosed()){System.out.println("Closing SessionFactory");sessionFactory.close();}}}private static void printTransactionData(long id, SessionFactory sessionFactory) {Session session = null;Transaction tx = null;try{//Get SessionsessionFactory = HibernateAnnotationUtil.getSessionFactory();session = sessionFactory.getCurrentSession();//start transactiontx = session.beginTransaction();//Save the Model objectTxn1 txn = (Txn1) session.get(Txn1.class, id);//Commit transactiontx.commit();System.out.println("Annotation Example. Transaction Details=\n"+txn);}catch(Exception e){System.out.println("Exception occured. "+e.getMessage());e.printStackTrace();}}private static Txn1 buildDemoTransaction() {Txn1 txn = new Txn1();txn.setDate(new Date());txn.setTotal(100);Customer1 cust = new Customer1();cust.setAddress("San Jose, USA");cust.setEmail("pankaj@yahoo.com");cust.setName("Pankaj Kr");txn.setCustomer(cust);cust.setTxn(txn);return txn;}}
这是我们执行上述程序时的输出片段。
Hibernate Annotation Configuration loaded
Hibernate Annotation serviceRegistry created
Session created using annotations configuration
Hibernate: insert into TRANSACTION (txn_date, txn_total) values (?, ?)
Hibernate: insert into CUSTOMER (cust_address, cust_email, cust_name, txn_id) values (?, ?, ?, ?)
Annotation Example. Transaction ID=20
Hibernate: select txn1x0_.txn_id as txn_id1_1_0_, txn1x0_.txn_date as txn_date2_1_0_, txn1x0_.txn_total as txn_tota3_1_0_,
customer1x1_.txn_id as txn_id1_0_1_, customer1x1_.cust_address as cust_add2_0_1_, customer1x1_.cust_email as cust_ema3_0_1_,
customer1x1_.cust_name as cust_nam4_0_1_ from TRANSACTION txn1x0_ left outer join CUSTOMER customer1x1_ on
txn1x0_.txn_id=customer1x1_.txn_id where txn1x0_.txn_id=?
Annotation Example. Transaction Details=
20, 100.0, Pankaj Kr, pankaj@yahoo.com, San Jose, USA
Closing SessionFactory
请注意,输出类似于hibernate一对一的基于XML的配置。
这就是Hibernate One to One映射示例,您可以从下面的链接下载最终项目并使用它来了解更多信息。
下载Hibernate OneToOne映射项目
转载来源:https://www.journaldev.com/2916/hibernate-one-to-one-mapping-example-annotation
Hibernate一对一映射示例注释相关推荐
- hibernate注释映射_Hibernate一对一映射示例注释
hibernate注释映射 Today we will look into One to One Mapping in Hibernate. We will look into Hibernate O ...
- hibernate注释映射_Hibernate一对多映射示例注释
hibernate注释映射 Today we will look into One To Many Mapping in Hibernate. We will look into Hibernate ...
- Hibernate一对多映射示例注释
Hibernate一对多映射示例注释 今天我们将研究Hibernate中的One To Many Mapping.我们将使用Annotation和XML配置来研究Hibernate One To Ma ...
- Java程序员从笨鸟到菜鸟之(五十八)细谈Hibernate(九)hibernate一对一关系映射...
一对一关系映射即为关系双方都含有对方一个引用,其实在生活中一对一关系也很常见,比如人和×××,学生和学号等,都是一对一的关系映射,一对一映射分为单向的和双向的,没种关系映射又可以分为主键关联映射,唯一 ...
- 【Hibernate步步为营】--双向关联一对一映射具体解释(一)
一对一的映射在对象模型中是常常见到的,为了将对象模型转换为关系模型就必须在映射文件里进行配置,上篇文章讨论了一对一映射的单向关联的情况,重点是<one-to-one>标签的使用,须要在映射 ...
- Hibernate关联关系映射之一对一关联关系
人和身份证之间就是一个典型的一对一关联关系.实现一对一关联关系映射的方式有两种一种是基于外键,一种是基于主键,下面我们先看基于外键的关联方式 首先看他们的实体类 Person类 ? 1 2 3 4 5 ...
- Hibernate中的一对一映射
1.需求 用户和身份证是一一对应的关系. 有两种对应方式: 用户id作为身份证表的外键,身份证号作为主键: 用户id作为身份证表的主键: 2.实体Bean设计 User: public class U ...
- hibernate一对一主键关联映射(一)---单向关联
1.新建工程项目hibernate_one2one_pk_1,添加hibernate所需Jar包和mysql驱动Jar包. 2.建立工具类HihernateUtils.java和ExportDB.ja ...
- Hibernate 一对一关系映射总结篇
在Hibernate 关系映射中一对一是比较常见也常用的一种,一对一的关系映射类型中又可分为:一对一外键单向映射.一对一外键双向映射.一对一主键单向映射和一对一主键双向映射. 下面就简单的说下自己对这 ...
最新文章
- 小强的HTML5移动开发之路(6)——Canvas图形绘制基础
- 06-typeAliases标签和package标签
- 微商谋定重整纠正错误走路-经信研究:李玉庭谈微商营销
- Ubuntu 16.04 设置MySQL远程访问权限
- 【数学】十万个为什么(一) —— 为什么乘法会分为左乘和右乘,除法会分为左除和右除?
- netstat命令---Linux查看网络和socket信息
- python爬虫百度文库_百度文库爬虫,Python爬取百度文库内容输出word文档low版
- matlab2014a如何画电机效率云图,maxwell电机转矩扫描与使用MTPA策略绘制效率map图...
- 条件与循环Phython
- form表单回车会自动提交
- docker创建CentOS云主机(docker实践)
- 粉丝经济大爆发居然真的来了
- Oracle EBS专业术语与名词解释
- 吴恩达机器学习系列课程笔记——第十六章:推荐系统(Recommender Systems)
- 计算机保研-上岸华中科技大学(武汉光电国家研究中心)
- Node.js 前世今生
- excel2003函数应用完全手册
- 2021中科院计算机博士,北京:中国科学院大学2021年秋季入学博士招生考试初试进入复试基本分数线要求的通知...
- mac下mysql安装,忘记初始临时密码怎么破。
- Mac下Android的Eclipse开发环境的搭建