国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

詳解Java的Hibernate框架中的set映射集與SortedSet映射

2019-11-26 14:45:01
字體:
供稿:網(wǎng)友

Set
集合Set是一個(gè)java集合不包含任何重復(fù)的元素。更正式地說,Set不包含任何元素對e1和e2,使得e1.equals(e2),和至多一個(gè)空元素。所以被添加到一組對象必須實(shí)現(xiàn)equals()和hashCode()方法,使Java可以判斷任何兩個(gè)元素/對象是否是相同的。

集被映射到與映射表中<set>元素,并在java.util.HashSet中初始化。可以使用Set集合在類時(shí),有一個(gè)集合中不需要重復(fù)的元素。

定義RDBMS表:
考慮一個(gè)情況下,我們需要我們的員工記錄存儲在EMPLOYEE表,有以下結(jié)構(gòu):

create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VARCHAR(20) default NULL, last_name VARCHAR(20) default NULL, salary  INT default NULL, PRIMARY KEY (id));

此外,假設(shè)每個(gè)員工都可以有一個(gè)或多個(gè)與他/她相關(guān)的證書。因此,我們將存儲證書的相關(guān)信息在一個(gè)單獨(dú)的表,該表具有以下結(jié)構(gòu):

create table CERTIFICATE ( id INT NOT NULL auto_increment, certificate_name VARCHAR(30) default NULL, employee_id INT default NULL, PRIMARY KEY (id));

將有一個(gè)對多EMPLOYEE和證書對象之間的關(guān)系:

定義POJO類:
讓我們實(shí)現(xiàn)我們的POJO類員工將被用于保存與EMPLOYEE表中的對象和有憑證的設(shè)置變量的集合。

import java.util.*;public class Employee { private int id; private String firstName;  private String lastName;  private int salary; private Set certificates; public Employee() {} public Employee(String fname, String lname, int salary) {  this.firstName = fname;  this.lastName = lname;  this.salary = salary; } public int getId() {  return id; } public void setId( int id ) {  this.id = id; } public String getFirstName() {  return firstName; } public void setFirstName( String first_name ) {  this.firstName = first_name; } public String getLastName() {  return lastName; } public void setLastName( String last_name ) {  this.lastName = last_name; } public int getSalary() {  return salary; } public void setSalary( int salary ) {  this.salary = salary; } public Set getCertificates() {  return certificates; } public void setCertificates( Set certificates ) {  this.certificates = certificates; }}

現(xiàn)在讓我們定義另一個(gè)POJO類對應(yīng)的表的證書,這樣的證書對象可以存儲和檢索到的CERTIFICATE表。這個(gè)類還應(yīng)該同時(shí)實(shí)現(xiàn)了equals()和hashCode()方法,使Java可以判斷任意兩個(gè)元素/對象是否相同。

public class Certificate { private int id; private String name;  public Certificate() {} public Certificate(String name) {  this.name = name; } public int getId() {  return id; } public void setId( int id ) {  this.id = id; } public String getName() {  return name; } public void setName( String name ) {  this.name = name; } public boolean equals(Object obj) {  if (obj == null) return false;  if (!this.getClass().equals(obj.getClass())) return false;  Certificate obj2 = (Certificate)obj;  if((this.id == obj2.getId()) && (this.name.equals(obj2.getName())))  {   return true;  }  return false; } public int hashCode() {  int tmp = 0;  tmp = ( id + name ).hashCode();  return tmp; }}

定義Hibernate映射文件:
讓我們開發(fā)指定Hibernate如何定義的類映射到數(shù)據(jù)庫表的映射文件。<SET>元素將被用來定義用于設(shè)置集合的規(guī)則。

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC  "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Employee" table="EMPLOYEE">  <meta attribute="class-description">   This class contains the employee detail.   </meta>  <id name="id" type="int" column="id">   <generator class="native"/>  </id>  <set name="certificates" cascade="all">   <key column="employee_id"/>   <one-to-many class="Certificate"/>  </set>  <property name="firstName" column="first_name" type="string"/>  <property name="lastName" column="last_name" type="string"/>  <property name="salary" column="salary" type="int"/> </class> <class name="Certificate" table="CERTIFICATE">  <meta attribute="class-description">   This class contains the certificate records.   </meta>  <id name="id" type="int" column="id">   <generator class="native"/>  </id>  <property name="name" column="certificate_name" type="string"/> </class></hibernate-mapping>

應(yīng)該保存的映射文件中的格式<classname>.hbm.xml。保存映射文件中的文件Employee.hbm.xml。已經(jīng)熟悉了大部分的映射細(xì)節(jié),映射文件中的所有元素:

映射文檔是具有<hibernate-mapping>為對應(yīng)于每個(gè)類包含2個(gè)<class>元素的根元素的XML文檔。

在<class>元素被用于定義數(shù)據(jù)庫表從一個(gè)Java類特定的映射。 Java類名指定使用class元素的name屬性和使用表屬性數(shù)據(jù)庫表名指定。

<meta>元素是可選元素,可以用來創(chuàng)建類的描述。

<id>元素映射在類中的唯一ID屬性到數(shù)據(jù)庫表的主鍵。 id元素的name屬性是指屬性的類和column屬性是指在數(shù)據(jù)庫表中的列。 type屬性保存了Hibernate映射類型,這種類型的映射將會從Java轉(zhuǎn)換為SQL數(shù)據(jù)類型。

id元素內(nèi)的<generator>元素被用來自動生成的主鍵值。將生成元素的class屬性設(shè)置為原始的讓Hibernate拾取,無論是identity,sequence或者h(yuǎn)ilo的算法來創(chuàng)建主鍵根據(jù)底層數(shù)據(jù)庫的支持能力。

<property>元素用于一個(gè)Java類的屬性映射到數(shù)據(jù)庫表中的列。元素的name屬性是指屬性的類和column屬性是指在數(shù)據(jù)庫表中的列。 type屬性保存了Hibernate映射類型,這種類型的映射將會從Java轉(zhuǎn)換為SQL數(shù)據(jù)類型。

<SET>元素是新的,已被引入到設(shè)置CERTIFICATE 和Employee類之間的關(guān)系。我們使用cascade屬性中的<set>元素來告訴Hibernate來保存CERTIFICATE 對象,同時(shí)為Employee對象。name屬性被設(shè)置為在父類中的定義設(shè)置變量,在我們的情況下,它是CERTIFICATE 。對于每一組變量,我們需要定義在映射文件中單獨(dú)的一組元素。

<key>元素是包含外鍵的父對象,即在certificate表中的列。表EMPLOYEE。

<one-to-many>元素表示一個(gè)Employee對象涉及到很多證書的對象,并因此,證書對象必須有與父Employee有關(guān)。可以根據(jù)需要使用任何和<one-to-one>,<many-to-one>進(jìn)行或<many-to-many>這個(gè)元素。

創(chuàng)建應(yīng)用程序類:
最后,我們將創(chuàng)建應(yīng)用程序類的main()方法來運(yùn)行應(yīng)用程序。我們將使用這個(gè)應(yīng)用程序,以節(jié)省一些員工的記錄地連同憑證,然后我們將申請CRUD操作上的記錄。

import java.util.*; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.Transaction;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class ManageEmployee { private static SessionFactory factory;  public static void main(String[] args) {  try{   factory = new Configuration().configure().buildSessionFactory();  }catch (Throwable ex) {    System.err.println("Failed to create sessionFactory object." + ex);   throw new ExceptionInInitializerError(ex);   }  ManageEmployee ME = new ManageEmployee();  /* Let us have a set of certificates for the first employee */  HashSet set1 = new HashSet();  set1.add(new Certificate("MCA"));  set1.add(new Certificate("MBA"));  set1.add(new Certificate("PMP"));    /* Add employee records in the database */  Integer empID1 = ME.addEmployee("Manoj", "Kumar", 4000, set1);  /* Another set of certificates for the second employee */  HashSet set2 = new HashSet();  set2.add(new Certificate("BCA"));  set2.add(new Certificate("BA"));  /* Add another employee record in the database */  Integer empID2 = ME.addEmployee("Dilip", "Kumar", 3000, set2);  /* List down all the employees */  ME.listEmployees();  /* Update employee's salary records */  ME.updateEmployee(empID1, 5000);  /* Delete an employee from the database */  ME.deleteEmployee(empID2);  /* List down all the employees */  ME.listEmployees(); } /* Method to add an employee record in the database */ public Integer addEmployee(String fname, String lname,            int salary, Set cert){  Session session = factory.openSession();  Transaction tx = null;  Integer employeeID = null;  try{   tx = session.beginTransaction();   Employee employee = new Employee(fname, lname, salary);   employee.setCertificates(cert);   employeeID = (Integer) session.save(employee);    tx.commit();  }catch (HibernateException e) {   if (tx!=null) tx.rollback();   e.printStackTrace();   }finally {   session.close();   }  return employeeID; } /* Method to list all the employees detail */ public void listEmployees( ){  Session session = factory.openSession();  Transaction tx = null;  try{   tx = session.beginTransaction();   List employees = session.createQuery("FROM Employee").list();    for (Iterator iterator1 =        employees.iterator(); iterator1.hasNext();){   Employee employee = (Employee) iterator1.next();    System.out.print("First Name: " + employee.getFirstName());    System.out.print(" Last Name: " + employee.getLastName());    System.out.println(" Salary: " + employee.getSalary());   Set certificates = employee.getCertificates();   for (Iterator iterator2 =        certificates.iterator(); iterator2.hasNext();){     Certificate certName = (Certificate) iterator2.next();      System.out.println("Certificate: " + certName.getName());    }   }   tx.commit();  }catch (HibernateException e) {   if (tx!=null) tx.rollback();   e.printStackTrace();   }finally {   session.close();   } } /* Method to update salary for an employee */ public void updateEmployee(Integer EmployeeID, int salary ){  Session session = factory.openSession();  Transaction tx = null;  try{   tx = session.beginTransaction();   Employee employee =      (Employee)session.get(Employee.class, EmployeeID);    employee.setSalary( salary );   session.update(employee);   tx.commit();  }catch (HibernateException e) {   if (tx!=null) tx.rollback();   e.printStackTrace();   }finally {   session.close();   } } /* Method to delete an employee from the records */ public void deleteEmployee(Integer EmployeeID){  Session session = factory.openSession();  Transaction tx = null;  try{   tx = session.beginTransaction();   Employee employee =      (Employee)session.get(Employee.class, EmployeeID);    session.delete(employee);    tx.commit();  }catch (HibernateException e) {   if (tx!=null) tx.rollback();   e.printStackTrace();   }finally {   session.close();   } }}

編譯和執(zhí)行:
下面是步驟來編譯并運(yùn)行上述應(yīng)用程序。請確保已在進(jìn)行的編譯和執(zhí)行之前,適當(dāng)?shù)卦O(shè)置PATH和CLASSPATH。

  • 創(chuàng)建hibernate.cfg.xml配置文件中配置章節(jié)解釋。
  • 創(chuàng)建Employee.hbm.xml映射文件,如上圖所示。
  • 創(chuàng)建Employee.java源文件,如上圖所示,并編譯它。
  • 創(chuàng)建Certificate.java源文件,如上圖所示,并編譯它。
  • 創(chuàng)建ManageEmployee.java源文件,如上圖所示,并編譯它。
  • 執(zhí)行ManageEmployee二進(jìn)制文件來運(yùn)行程序。

會在屏幕上獲得以下結(jié)果,并同時(shí)記錄會在員工和證書表被創(chuàng)建。

$java ManageEmployee

.......VARIOUS LOG MESSAGES WILL DISPLAY HERE........First Name: Manoj Last Name: Kumar Salary: 4000Certificate: MBACertificate: PMPCertificate: MCAFirst Name: Dilip Last Name: Kumar Salary: 3000Certificate: BCACertificate: BAFirst Name: Manoj Last Name: Kumar Salary: 5000Certificate: MBACertificate: PMPCertificate: MCA

如果檢查員工和證書表,就應(yīng)該記錄下了:

mysql> select * from employee;
+----+------------+-----------+--------+| id | first_name | last_name | salary |+----+------------+-----------+--------+| 1 | Manoj  | Kumar  | 5000 |+----+------------+-----------+--------+1 row in set (0.00 sec)
mysql> select * from certificate;
+----+------------------+-------------+| id | certificate_name | employee_id |+----+------------------+-------------+| 1 | MBA    |   1 || 2 | PMP    |   1 || 3 | MCA    |   1 |+----+------------------+-------------+3 rows in set (0.00 sec)
mysql>

SortedSet
SortedSet是java集合,該集合不包含任何重復(fù)的元素和元素使用提供他們的自然順序,或由一個(gè)比較器進(jìn)行排序。

一個(gè)SortedSet映射,在映射表<set>元素和java.util.TreeSet中初始化。排序?qū)傩钥梢员辉O(shè)置為一個(gè)比較器或自然順序。如果使用自然順序,那么它的迭代器遍歷的集合元素升序排列。

我們依然使用上面示例中所定義的RDBMS表,將有一個(gè)對多EMPLOYEE和證書對象之間的關(guān)系,POJO類也是如上定義。

讓我們實(shí)現(xiàn)POJO類員工將被用于保存EMPLOYEE表中的對象和有證書的SortedSet變量的集合。

現(xiàn)在讓我們定義另一個(gè)POJO類對應(yīng)的表的證書,這樣的證書對象可以存儲和檢索到的證書表。這個(gè)類還應(yīng)該實(shí)現(xiàn)Comparable接口和compareTo方法將被用來設(shè)置sort="natural" 在映射文件(見下面的映射文件)的情況下,元素進(jìn)行排序。

public class Certificate implements Comparable <Certificate>{ private int id; private String name;  public Certificate() {} public Certificate(String name) {  this.name = name; } public int getId() {  return id; } public void setId( int id ) {  this.id = id; } public String getName() {  return name; } public void setName( String name ) {  this.name = name; } public int compareTo(Certificate that){  final int BEFORE = -1;  final int AFTER = 1;  if (that == null) {   return BEFORE;  }  Comparable thisCertificate = this.getName();  Comparable thatCertificate = that.getName();  if(thisCertificate == null) {   return AFTER;  } else if(thatCertificate == null) {   return BEFORE;  } else {   return thisCertificate.compareTo(thatCertificate);  } }}

定義Hibernate映射文件:
讓我們開發(fā)指定Hibernate如何定義的類映射到數(shù)據(jù)庫表的映射文件。該<set>元素將被用來定義所使用的SortedSet集合的規(guī)則。

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC  "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Employee" table="EMPLOYEE">  <meta attribute="class-description">   This class contains the employee detail.   </meta>  <id name="id" type="int" column="id">   <generator class="native"/>  </id>  <set name="certificates" cascade="all" sort="MyClass">   <key column="employee_id"/>   <one-to-many class="Certificate"/>  </set>  <property name="firstName" column="first_name" type="string"/>  <property name="lastName" column="last_name" type="string"/>  <property name="salary" column="salary" type="int"/> </class> <class name="Certificate" table="CERTIFICATE">  <meta attribute="class-description">   This class contains the certificate records.   </meta>  <id name="id" type="int" column="id">   <generator class="native"/>  </id>  <property name="name" column="certificate_name" type="string"/> </class></hibernate-mapping>

映射文件中的格式<classname>.hbm.xml,保存映射文件中的文件Employee.hbm.xml。前面已經(jīng)熟悉了大部分的映射細(xì)節(jié),但讓我們看到了映射文件中的所有元素:

映射文檔是具有<hibernate-mapping>為對應(yīng)于每一個(gè)類包含2個(gè)<class>元素的根元素的XML文檔。

<class>元素被用于定義數(shù)據(jù)庫表從一個(gè)Java類特定的映射。 Java類名指定使用class元素的name屬性和使用表屬性數(shù)據(jù)庫表名指定。

<meta>元素是可選元素,可以用來創(chuàng)建類的描述。

<id>元素映射在類中的唯一ID屬性到數(shù)據(jù)庫表的主鍵。 id元素的name屬性是指屬性的類和column屬性是指在數(shù)據(jù)庫表中的列。 type屬性保存了Hibernate映射類型,這種類型的映射將會從Java轉(zhuǎn)換為SQL數(shù)據(jù)類型。

id元素內(nèi)的<generator>元素被用來自動生成的主鍵值。將生成元素的class屬性設(shè)置為原生讓Hibernate拿起無論是identity,sequence或者h(yuǎn)ilo中的算法來創(chuàng)建主鍵根據(jù)底層數(shù)據(jù)庫的支持能力。

<property>元素用于一個(gè)Java類的屬性映射到數(shù)據(jù)庫表中的列。元素的name屬性是指屬性的類和column屬性是指在數(shù)據(jù)庫表中的列。 type屬性保存了Hibernate映射類型,這種類型的映射將會從Java轉(zhuǎn)換為SQL數(shù)據(jù)類型。

<set>元素用于設(shè)置證書和Employee類之間的關(guān)系。我們使用cascade屬性中的<set>元素來告訴Hibernate來保存證書的對象,同時(shí)為Employee對象。 name屬性被設(shè)置為在父類中的定義的SortedSet的變量,在我們的情況下,它是證書。排序?qū)傩钥梢栽O(shè)置為自然有自然排序,也可以設(shè)置為自定義類實(shí)現(xiàn)為java.util.Comparator。我們已經(jīng)使用了一個(gè)類MyClass,它實(shí)現(xiàn)為java.util.Comparator扭轉(zhuǎn)證書類實(shí)現(xiàn)的排序順序。

<key>元素是包含外鍵的父對象,即在證書表中的列。表EMPLOYEE。

該<one-to-many>元素表示一個(gè)Employee對象涉及到很多證書的對象,并因此,證書對象必須有與父Employee有關(guān)。可以根據(jù)需要使用任何和<one-to-one>,<many-to-one>進(jìn)行或<many-to-many>這個(gè)元素。

如果使用sort="natural"的設(shè)置,并不需要創(chuàng)建一個(gè)單獨(dú)的類,因?yàn)樽C書類已經(jīng)實(shí)現(xiàn)了Comparable接口和hibernate會使用compareTo(在證書類定義為比較證書名稱)方法。但是,我們使用的是在我們的映射文件自定義的比較器類MyClass,所以必須創(chuàng)建這個(gè)類的基礎(chǔ)上實(shí)現(xiàn)排序算法。降序時(shí)使用這個(gè)類在這個(gè)類排序。

import java.util.Comparator;public class MyClass implements Comparator<Certificate>{ public int compare(Certificate o1, Certificate o2) {  final int BEFORE = -1;  final int AFTER = 1;  /* To reverse the sorting order, multiple by -1 */  if (o2 == null) {   return BEFORE * -1;  }  Comparable thisCertificate = o1.getName();  Comparable thatCertificate = o2.getName();  if(thisCertificate == null) {   return AFTER * 1;  } else if(thatCertificate == null) {   return BEFORE * -1;  } else {   return thisCertificate.compareTo(thatCertificate) * -1;  } }}

創(chuàng)建應(yīng)用程序類:
最后,我們將創(chuàng)建應(yīng)用程序類的main()方法來運(yùn)行應(yīng)用程序。我們將使用這個(gè)應(yīng)用程序,以節(jié)省一些員工的記錄地連同證書,然后我們將申請CRUD操作上的記錄。

import java.util.*; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.Transaction;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class ManageEmployee { private static SessionFactory factory;  public static void main(String[] args) {  try{   factory = new Configuration().configure().buildSessionFactory();  }catch (Throwable ex) {    System.err.println("Failed to create sessionFactory object." + ex);   throw new ExceptionInInitializerError(ex);   }  ManageEmployee ME = new ManageEmployee();  /* Let us have a set of certificates for the first employee */  TreeSet set1 = new TreeSet();  set1.add(new Certificate("MCA"));  set1.add(new Certificate("MBA"));  set1.add(new Certificate("PMP"));    /* Add employee records in the database */  Integer empID1 = ME.addEmployee("Manoj", "Kumar", 4000, set1);  /* Another set of certificates for the second employee */  TreeSet set2 = new TreeSet();  set2.add(new Certificate("BCA"));  set2.add(new Certificate("BA"));  /* Add another employee record in the database */  Integer empID2 = ME.addEmployee("Dilip", "Kumar", 3000, set2);  /* List down all the employees */  ME.listEmployees();  /* Update employee's salary records */  ME.updateEmployee(empID1, 5000);  /* Delete an employee from the database */  ME.deleteEmployee(empID2);  /* List down all the employees */  ME.listEmployees(); } /* Method to add an employee record in the database */ public Integer addEmployee(String fname, String lname,           int salary, SortedSet cert){  Session session = factory.openSession();  Transaction tx = null;  Integer employeeID = null;  try{   tx = session.beginTransaction();   Employee employee = new Employee(fname, lname, salary);   employee.setCertificates(cert);   employeeID = (Integer) session.save(employee);    tx.commit();  }catch (HibernateException e) {   if (tx!=null) tx.rollback();   e.printStackTrace();   }finally {   session.close();   }  return employeeID; } /* Method to list all the employees detail */ public void listEmployees( ){  Session session = factory.openSession();  Transaction tx = null;  try{   tx = session.beginTransaction();   List employees = session.createQuery("FROM Employee").list();    for (Iterator iterator1 =        employees.iterator(); iterator1.hasNext();){   Employee employee = (Employee) iterator1.next();    System.out.print("First Name: " + employee.getFirstName());    System.out.print(" Last Name: " + employee.getLastName());    System.out.println(" Salary: " + employee.getSalary());   SortedSet certificates = employee.getCertificates();   for (Iterator iterator2 =        certificates.iterator(); iterator2.hasNext();){     Certificate certName = (Certificate) iterator2.next();      System.out.println("Certificate: " + certName.getName());    }   }   tx.commit();  }catch (HibernateException e) {   if (tx!=null) tx.rollback();   e.printStackTrace();   }finally {   session.close();   } } /* Method to update salary for an employee */ public void updateEmployee(Integer EmployeeID, int salary ){  Session session = factory.openSession();  Transaction tx = null;  try{   tx = session.beginTransaction();   Employee employee =      (Employee)session.get(Employee.class, EmployeeID);    employee.setSalary( salary );   session.update(employee);   tx.commit();  }catch (HibernateException e) {   if (tx!=null) tx.rollback();   e.printStackTrace();   }finally {   session.close();   } } /* Method to delete an employee from the records */ public void deleteEmployee(Integer EmployeeID){  Session session = factory.openSession();  Transaction tx = null;  try{   tx = session.beginTransaction();   Employee employee =      (Employee)session.get(Employee.class, EmployeeID);    session.delete(employee);    tx.commit();  }catch (HibernateException e) {   if (tx!=null) tx.rollback();   e.printStackTrace();   }finally {   session.close();   } }}

編譯和執(zhí)行后,會在屏幕上獲得以下結(jié)果,并同時(shí)記錄會在員工和證書表被創(chuàng)建。可以看到證書已排序順序相反。可以通過改變映射文件試試,只需設(shè)置sort="natural"和執(zhí)行程序,并比較結(jié)果。

$java ManageEmployee
.......VARIOUS LOG MESSAGES WILL DISPLAY HERE........First Name: Manoj Last Name: Kumar Salary: 4000Certificate: PMPCertificate: MCACertificate: MBAFirst Name: Dilip Last Name: Kumar Salary: 3000Certificate: BCACertificate: BAFirst Name: Manoj Last Name: Kumar Salary: 5000Certificate: PMPCertificate: MCACertificate: MBA

如果檢查員工和證書表,就應(yīng)該記錄下了:

mysql> select * from employee;
+----+------------+-----------+--------+| id | first_name | last_name | salary |+----+------------+-----------+--------+| 1 | Manoj  | Kumar  | 5000 |+----+------------+-----------+--------+1 row in set (0.00 sec)
mysql> select * from certificate;
+----+------------------+-------------+| id | certificate_name | employee_id |+----+------------------+-------------+| 1 | MBA    |   1 || 2 | PMP    |   1 || 3 | MCA    |   1 |+----+------------------+-------------+3 rows in set (0.00 sec)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 金堂县| 新平| 霍林郭勒市| 罗甸县| 治多县| 昌江| 榆社县| 桃园市| 武夷山市| 出国| 女性| 贺兰县| 武安市| 阿图什市| 柳林县| 嵊州市| 博乐市| 启东市| 神池县| 大足县| 响水县| 静乐县| 浮山县| 富裕县| 卢氏县| 河池市| 葵青区| 越西县| 平定县| 长丰县| 九江县| 肇源县| 师宗县| 晴隆县| 南郑县| 铜陵市| 永兴县| 治县。| 互助| 乌什县| 互助|