1. 程式人生 > >Hibernate4學習總結(3)--註解形式的基礎對映,主鍵對映,基本屬性對映,複合屬性對映,繼承對映。

Hibernate4學習總結(3)--註解形式的基礎對映,主鍵對映,基本屬性對映,複合屬性對映,繼承對映。

      Hibernate Annotation即hibernate註解,可以通過另一種方式將持久化類轉化成表的相關資訊,可以簡化hibernate的配置檔案。本文主要對Hibernate的註解進行講解,由於篇幅原因,將註解部分分為兩篇文章來寫。集合對映和關聯關係對映將在後面一文講解。本文包括以下五個部分:

  1. 基礎對映。
  2. 主鍵對映。
  3. 基本屬性對映。
  4. 複合屬性對映。
  5. 繼承對映。

一、基礎對映(註解加在持久化類上面)

  1.1到1.4的註解都是JPA的註解,1.5是hibernate的註解。

1.1 @Entity: 將POJO轉化成持久化類。

1.2 @Table: 把持久化類轉化成表的相關資訊,@Table註解當中有以下幾個屬:

  • name: 指定表名。
  • schema: 指定將資料表存入哪個資料庫。
  • catalog: 指定將資料表存入哪個資料庫。
  • indexes: 指定表的引索列.
  • uniqueConstraints: 指定唯一約束。

1.3 indexes : @Index(columnList="資料表中的列名", name="索引名")。用於建立表的索引。

indexes={@Index(columnList="name", name="IDX_NAME"),
         @Index(columnList="address", name="IDX_ADDRESS")}
1.4   uniqueConstraints : @UniqueConstraint(columnNames={"列名","列名"}, name="唯一約束名")。用於多列建立聯合唯一約束。
uniqueConstraints={@UniqueConstraint(columnNames={"name", "age"}, name="UC_NAME_AGE")})
1.5 hibernate註解
  • @DynamicInsert:動態插入,根據持久化物件的屬性是否有值明確生成insert語句。
  • @DynamicUpdate:動態修改,它會判斷持久化物件中屬性,哪些屬性值發生了改變就會生成update的語句。(持久化狀態下做修改)
  • @SelectBeforeUpdate:修改之前先查詢,查詢得到持久化物件再與脫管狀態下的物件進行比較,哪些屬性值發生了改變就會生成update的語句。(脫管狀態下做修改)

例如:User實體類

package edu.scut.a_BasicMapping;

import javax.persistence.*;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.hibernate.annotations.SelectBeforeUpdate;

@Entity//將POJO類轉化成持久化類
@Table(name="USER_INFO",//指定表名
	   catalog="day33b",//指定建立到哪個資料庫
	   //schema="day33b",//指定建立到哪個資料庫,和catalog指定一個即可
	   indexes={@Index(columnList="name",name="IDX_NAME"),
				@Index(columnList="address",name="IDX_ADDRESS")},//建立表的索引
	   uniqueConstraints={@UniqueConstraint(columnNames={"name","age"},name="UC_NAME_AGE")}) //多列聯合唯一約束
//三個hibernate註解
//@DynamicInsert(true) //動態插入,根據持久化物件的屬性是否有值,生成相應的Sql語句
//@DynamicUpdate(true) //動態修改,會判斷持久化物件中的屬性,那些屬性改變,才會生成相應的update語句(持久化狀態下做修改)
@SelectBeforeUpdate(true) //修改之前先進行查詢,查詢得到持久化物件與脫管狀態下的物件進行比較,那些屬性改變生成sql語句。
public class User {
	@Id
	private int id;
	private String name;
	private int age;
	private String address;
	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 getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
}

生成的表user_info資訊:


二、主鍵對映

2.1 主鍵生成策略

 @GeneratorValue(strategy=GenerationType.xxx)

  • GenerationType.AUTO:讓Hibernate根據資料庫方言自動選擇主鍵生成策略。
  • GenerationType.IDENTITY: 適宜MySQL、SqlServer有自增長列的資料庫。
  • GenerationType.SEQUENCE:適宜Oracle這種沒有自增長有sequence的資料庫。
  • GenerationType.TABLE: 適宜所有的資料庫,因為它會單獨生成一張表來維護主鍵生成。

例如:User.實體類

package edu.scut.b_PrimaryKeyMapping.copy;

import java.io.Serializable;
import javax.persistence.*;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.hibernate.annotations.SelectBeforeUpdate;

@Entity//將POJO類轉化成持久化類
@Table(name="USER_INFO")//指定表名
public class User{
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	private String name;
	private int age;
	private String address;
	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 getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
}
生成的表user_info資訊:


2.2 單個屬性做主鍵: 在指定的屬性上加@Id。

2.3 多個屬性做聯合主鍵。

  • 在多個屬性上加@Id。
  • 這個持久化類必須實現Serializale介面。

例如:Person類的firstName和lastName兩個屬性要做聯合主鍵,那麼這兩個屬性上面都要加@Id註解,並且Person類要是實現Serializale介面。

Person實體類:

package edu.scut.b_PrimaryKeyMapping;

import java.io.Serializable;
import javax.persistence.*;

@Entity
public class Person implements Serializable {
	@Id
	private String firstName;
	@Id
	private String lastName;
	private int age;
	public String getFirstName() {
		return firstName;
	}
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}
	public String getLastName() {
		return lastName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}	

2.4 複合屬性做聯合主鍵。

  • 在複合屬性上加:@EmbeddedId。
  • 複合屬性類必須實現Serializale介面。

例如:Employee實體類中,name屬性是一個複合屬性,要是以name屬性作為主鍵,那麼name屬性上要加@Embedded註解,Name類要實現Serializale介面。

Employee類:

package edu.scut.b_PrimaryKeyMapping;

import java.io.Serializable;
import javax.persistence.*;

@Entity
public class Employee implements Serializable {
	@EmbeddedId
	private Name name;
	public Name getName() {
		return name;
	}
	public void setName(Name name) {
		this.name = name;
	}
	private int age;
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}	

Name類:
package edu.scut.b_PrimaryKeyMapping;

import java.io.Serializable;

public class Name implements Serializable{
	private String firstName;
	private String lastName;
	public String getFirstName() {
		return firstName;
	}
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}
	public String getLastName() {
		return lastName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
}

三、基本屬性對映

3.1 @Column : 持久化類中屬性轉化成資料庫表中列的相關資訊。

  • name:指定列名。
  • length: 該列支援的長度。
  • precision:有效的總位數。(BigDecimal)。
  • scale:小數點的位數。(BigDecimal)。
  • unique: 唯一約束。
  • nullable:非空約束。
  • insertable:是否允許插入true:允許 false: 不允許。
  • updatable:是否允許修改true:允許 false: 不允許。
  • columnDefinition :指定列的定義。

例如:User類

package edu.scut.c_BasicFieldMapping;

import java.io.Serializable;
import java.math.BigDecimal;
import javax.persistence.*;
import org.hibernate.type.TrueFalseType;

@Entity//將POJO類轉化成持久化類
@Table(name="USER_INFO")//指定表名
public class User{
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="U_ID")
	private int id;
	@Column(name="U_NAME",//列名
			length=20, //長度
			nullable=false, //非空約束
			unique=false //唯一約束
			)
	private String name;
	
	@Column(name="U_AGE",columnDefinition="int(10) NOT NULL default 20")
	private int age;
	
	@Column(name="U_ADD",
			insertable=false, //允許插入
			updatable=false //允許修改
			)
	private String address;
	
	@Column(name="U_SALARY",
 			precision=6, //小數的總位數
			scale=2)//小數點後面的位數
	 private BigDecimal salary;
	public int getId() {
		 return id;
	}
	public BigDecimal getSalary() {
 		return salary;
	}
	 public void setSalary(BigDecimal salary) {
		this.salary = salary;
	}
 	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
 		return name;
	}
 	public void setName(String name) {
		this.name = name;
 	}
	public int getAge() {
		 return age;
	}
 	public void setAge(int age) {
		this.age = age;
	}
        public String getAddress() {
		return address;
 	}
	public void setAddress(String address) {
		this.address = address;
	 }
}
生成的表user_info資訊:


3.2 @Lob: 對映大的二進位制數或者文字。

3.3 @Temporal:修飾日期型別Date。

  • TemporalType.DATE : yyyy-MM-dd。
  • TemporalType.TIME : HH:mm:ss。
  • TemporalType.TIMESTAMP : yyyy-MM-dd HH:mm:ss。

3.4  @Transient:指定不是持久化屬性。

例如:Employee實體類

package edu.scut.c_BasicFieldMapping;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;

@Entity
@Table(name="EMP_INFO")
public class Employee implements Serializable {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="EMP_ID")
	private int id;
	@Column(name="EMP_NAME")
	private String name;
	@Column(name="EMP_PIC")
	@Lob
	private byte[] picture;
	@Column(name="EMP_BIRTH")
	@Temporal(TemporalType.TIMESTAMP)
	private Date birthday;
	
	@Transient
	private String remark; 
	public String getRemark() {
		return remark;
	}
	public void setRemark(String remark) {
		this.remark = remark;
	}
	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 byte[] getPicture() {
		return picture;
	}
	public void setPicture(byte[] picture) {
		this.picture = picture;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
}	
生成的表emp_info資訊:


四、複合屬性對映

4.1 @Embedded:用於修飾複合屬性(內含的)。

例如:Employee類中的name屬性是複合屬性,要用@Embedded註解修飾。

Employee實體類:

package edu.scut.d_MultiFieldMapping;

import java.io.Serializable;
import javax.persistence.*;

@Entity
public class Employee implements Serializable {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	@Embedded //複合屬性(將主鍵類的屬性直接應用過來)
	private Name name;
	private int age;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public Name getName() {
		return name;
	}
	public void setName(Name name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
Name實體類:
package edu.scut.d_MultiFieldMapping;

import java.io.Serializable;
import javax.persistence.Column;

public class Name implements Serializable {
	private String firstName;
	private String lastName;
	public String getFirstName() {
		return firstName;
	}
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}
	public String getLastName() {
		return lastName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
}
注意:複合屬性的列名可以重新命名,有兩種方式。

4.2 @AttributeOverrides:第一種屬性重新命名。在複合屬性的上面加此註解。

@AttributeOverrides({@AttributeOverride(name="firstName", [email protected](name="F_NAME")),
		     @AttributeOverride(name="lastName", [email protected](name="L_NAME"))})
例如:Employee實體類
package edu.scut.d_MultiFieldMapping;

import java.io.Serializable;
import javax.persistence.*;

@Entity
public class Employee implements Serializable {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	@Embedded //複合屬性(將主鍵類的屬性直接應用過來)
        //改變複合屬性的名稱(第一種方式)
	@AttributeOverrides({@AttributeOverride(name="firstName",[email protected](name="F_NAME")),
			     @AttributeOverride(name="lastName",[email protected](name="L_NAME"))})
	private Name name;
	private int age;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public Name getName() {
		return name;
	}
	public void setName(Name name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

4.3 第二種屬性重新命名方式:複合屬性類的屬性上面直接加@Column註解,給出列名。

例如:Name實體類

package edu.scut.d_MultiFieldMapping;

import java.io.Serializable;
import javax.persistence.Column;

public class Name implements Serializable {
	@Column(name="F_NAME") //改變複合屬性名稱的第二種方式
	private String firstName;
	@Column(name="L_NAME")
	private String lastName;
	public String getFirstName() {
		return firstName;
	}
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}
	public String getLastName() {
		return lastName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
}

五、繼承對映

          當持久化類存在繼承關係時,就可以用繼承對映。繼承對映提供了三種策略:

5.1 第一種方式(SINGLE_TABLE):所有子類中屬性都生成到父類表中(一張表)。

             注意:所有子類屬性中不能加非空約束。

5.1.1 父類

  • @Entity @Table(name="PER_INFO")。指定表名。
  • @Inheritance(strategy=InheritanceType.SINGLE_TABLE)。生成一張表。
  • @DiscriminatorColumn(name="DC", discriminatorType=DiscriminatorType.INTEGER) 。辨別者列,用來分辨每一行的資訊對應的是哪個類的資料。
  • @DiscriminatorValue("1") 。辨別者列值,即每一個類的辨別者的不同代號。

父類:Person

package edu.scut.g_ExtendsMapping2;

import javax.persistence.*;

@Entity
@Table(name="PER_INFO")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) //只生成一張表
@DiscriminatorColumn(name="DC",discriminatorType=DiscriminatorType.INTEGER) //辨別者列
@DiscriminatorValue("1") //辨別者列的值
public class Person {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	private String name;
	private int age;
	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 getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

5.1.2 所有子類

  • @Entity。
  • @DiscriminatorValue("2")。指定辨別者列值。

子類:Employee

package edu.scut.g_ExtendsMapping2;

import javax.persistence.*;

@Entity
@DiscriminatorValue("2")  //辨別者列的值
public class Employee extends Person{
	private float salary;

	public float getSalary() {
		return salary;
	}

	public void setSalary(float salary) {
		this.salary = salary;
	}
}
子類:Manager
package edu.scut.g_ExtendsMapping2;

import javax.persistence.*;

@Entity
@DiscriminatorValue("3") //辨別者列
public class Manager extends Employee{
	private String job;

	public String getJob() {
		return job;
	}

	public void setJob(String job) {
		this.job = job;
	}
}

這三個類生成了一張表:

per_info表

5.2 第二種方式(JOINED):所有的子類與父類都會單獨生成表(子類表的中主鍵列同時也是外來鍵列,它引用頂級父類表中的主鍵列)。

注意:查詢時會出現很多join語句。

5.2.1 父類

  • @Entity @Table(name="PER_INFO")。
  • @Inheritance(strategy=InheritanceType.JOINED)。

父類:Person

package edu.scut.g_ExtendsMapping1;

import javax.persistence.*;

@Entity
@Table(name="PER_INFO")
@Inheritance(strategy=InheritanceType.JOINED) //會生成多張表,幾個持久化類就生成幾張表
public class Person {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	private String name;
	private int age;
	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 getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
5.2.2 子類
  •  @Entity @Table(name="")。

子類:Employee

package edu.scut.g_ExtendsMapping1;

import javax.persistence.Entity;

@Entity
public class Employee extends Person{
	private float salary;

	public float getSalary() {
		return salary;
	}

	public void setSalary(float salary) {
		this.salary = salary;
	}
}

子類:Manager
package edu.scut.g_ExtendsMapping1;

import javax.persistence.Entity;

@Entity
public class Manager extends Employee{
	private String job;

	public String getJob() {
		return job;
	}

	public void setJob(String job) {
		this.job = job;
	}
}
生成的三張表資訊:

per_info表

employee表

manager表

5.3 第三種方式(TABLE_PER_CLASS):所有的子類與父類都會單獨生成表,子類會把父類中的屬性繼承過來生成在自己的表中。

注意:這種策略主鍵不能用自增長,查詢時會出現union運算。

5.3.1 父類

  • @Entity @Table(name="PER_INFO")。
  • @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)。

父類:Person

package edu.scut.g_ExtendsMapping3;

import javax.persistence.*;

@Entity
@Table(name="PER_INFO")
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Person {
	@Id 
	//@GeneratedValue(strategy=GenerationType.AUTO)  這種策略的ID不能自增長
	private int id;
	private String name;
	private int age;
	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 getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

5.3.2 子類

  • @Entity @Table(name="")

子類:Employee

package edu.scut.g_ExtendsMapping3;

import javax.persistence.Entity;

@Entity
public class Employee extends Person{
	private float salary;

	public float getSalary() {
		return salary;
	}

	public void setSalary(float salary) {
		this.salary = salary;
	}
}

子類:Manager

package edu.scut.g_ExtendsMapping3;

import javax.persistence.Entity;

@Entity
public class Manager extends Employee{
	private String job;

	public String getJob() {
		return job;
	}

	public void setJob(String job) {
		this.job = job;
	}
}
生成的三張表資訊:

per_info表


employee表


manager表


相關推薦

Hibernate4學習總結(3)--註解形式基礎對映對映基本屬性對映複合屬性對映繼承對映

      Hibernate Annotation即hibernate註解,可以通過另一種方式將持久化類轉化成表的相關資訊,可以簡化hibernate的配置檔案。本文主要對Hibernate的註解進行講解,由於篇幅原因,將註解部分分為兩篇文章來寫。集合對映和關聯關係對映將

mysql資料庫基礎學習總結3(查詢)

012.多表查詢      013.多表連線 1.多表查詢     語法:         select * from table1,table2;   

python 學習總結3

今天 pre 小程序 brush mas 返回 等待 add 學習總結 今天學習了socket的一些知識,主要為socket模塊中socket()類及其父類的一些方法 只要包括: sock=socket.socket() sk.bind(address) #

javaweb學習總結(十五)——JSP基礎語法(轉)

troy 嚴格 too cal service alt 隱式 情況 當前系統時間  任何語言都有自己的語法,JAVA中有,JSP雖然是在JAVA上的一種應用,但是依然有其自己擴充的語法,而且在JSP中,所有的JAVA語句都可以使用。 一、JSP模版元素   JSP頁面中的H

Kubernetes 學習總結(3) Manifests

replicas 字母 network delay 擴展 wide 運行 節點 ports APIserver符合RESTful風格,支持GET/PUT/DELETE/POST等各種操作。所以也支持kubectl通過一系列命令對各處資源進行管理控制。常用的資源1)、work

Linq to Sql學習總結3

儲存過程: 關係資料庫中的儲存過程在實體類中對映為具體的方法,直接將儲存過程拖動到對應的dbml設計檢視中即可,如圖: 在將儲存過程拖入dbml設計檢視中時,系統執行了如下命令: SET FMTONLY ON;--表示只獲取結果集的元資料(即相關列名 ) exec sp_Name SET

Web Service學習總結(3)xml操作相關的類

C#操作XML方法:新增、修改和刪除節點與屬性:https://www.cnblogs.com/lip-blog/p/7652544.html XElement與XmlElement相互轉換的程式碼:https://blog.csdn.net/xieyufei/article/det

SpringBoot2.X學習總結:(1)註解部分

@SpringBootApplication包含了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan,一個註解相當於三個註解

RGB-D SLAM學習總結(3)

第三講 特徵提取和匹配 本講主要實現影象的特徵提取,影象間的匹配,以及相機轉換矩陣的求解。 高博的部落格中提供了兩幀影象做測試,就是這兩幀影象。。。千萬不要另存為。。。 由於具體程式碼已經有詳細介紹,這裡只往slamBase裡新增方法。 另外在使用的slambase標

學習總結3

1陣列知識點 一維陣列 一維陣列的定義 儲存型別 資料型別 陣列名 [整數1]…[整數n],例如:int a[100],要注意下標從0開始,a[0]…a[99]。說明陣列時元素個數一定要為常量。陣列的排序有選擇排序、插入排序、氣泡排序。陣列排序還有一個函式sort,預設sort函式為升序,s

C語言學習總結3

c語言學習總結3 1,知識點總結 陣列是一組有序資料的集合,下標代表資料在陣列中的序號,用一個數組名和下標來唯一確定陣列中的元素,且每一個元素都屬於同一資料型別。陣列有一維陣列和二維陣列,使用陣列時要先進行定義,陣列的建立方式:型別符 陣列名[常量表達式 ],常量表達式最好大一些,防止陣列越界。陣列

Hessian知識學習總結(一)——基礎知識

1. hessian簡介:         提起hessian,文章裡基本都會提到這幾個關鍵詞,“WebService”,“二進位制”,“RMI(遠端方法呼叫)”,“介面暴露”,“Binary RPC協議”,“配置簡單”等。         簡單摘錄一下,hessian是一

python核心高階學習總結3-------python實現程序的三種方式及其區別

python實現程序的三種方式及其區別 在python中有三種方式用於實現程序 多程序中, 每個程序中所有資料( 包括全域性變數) 都各有擁有⼀份, 互不影響 1.fork()方法 ret = os.fork() if ret == 0: #子程序 else:

JDBC學習總結1(JDBC基礎

001.JDBC 1.JDBC:java database connectivity  ;   java連線資料庫 簡單來說,jdbc就是一組規範;將對所有關係型資料庫的操作都抽象出來的規範; 作用:採用統一的方式來操作各種資料庫; 2.如何通過jdbc來訪

weui學習總結——3、微信樣式介面切換

前言:weui是一個專門用於開發手機移動web或微信的樣式庫。但是官方只提供了demo沒有提供相關文件,所以這篇部落格就當是方便以後開發而使用吧。 weui資源下載(也可以從官網下載): http://download.csdn.net/download/z

Spark學習3)——scala基礎語法

scala概述 scala是一門多正規化程式語言,集成了面向物件程式設計和函數語言程式設計等多種特性。 scala執行在虛擬機器上,併兼容現有的Java程式。      Scala原始碼被編譯成java位元組碼,所以執行在JVM上,並可以呼叫現有的Java類庫 scala

Python學習筆記3:Python基礎

1、語句和語法 (1)註釋(#) (2)繼續( \) 存在兩種例外情況,一個語句不使用反斜線也可以跨行: 在使用閉合操作符(小括號,中括號,花括號)時單一語句可跨多行; 使用三引號包括下的字串

react學習總結3--React-Router

react 學習總結–React-Router 說明 react-route 版本 : “^3.0.0” react-router-redux 版本 ; “^4.0.7”

Struts2學習總結(3)--值棧Ognl表示式Struts標籤庫國際化資料校驗攔截器

本文包括以下五個部分: 值棧。Ognl表示式。struts2標籤庫。國際化。表單資料校驗攔截器。struts2的執行過程。一、值棧 採用servlet和JSP開發時,servlet通過域物件儲存資料,在JSP頁面通過jstl標籤+el表示式獲取資料。 採用struts2和

最全java多執行緒學習總結1--執行緒基礎

  《java 核心技術》這本書真的不錯,知識點很全面,翻譯質量也還不錯,本系列博文是對該書中併發章節的一個總結。 什麼是執行緒   官方解釋:執行緒是作業系統能夠進行運算排程的最小單位,包含於程序之中,是程序中的實際運作單位。也就是說執行緒是程式碼執行的載體,我們所編寫的程式碼都是線上程上跑的,以一個最簡單