- 浏览: 16728 次
- 性别:
- 来自: 齐齐哈尔
最新评论
Hibernate映射类型分为两种:内置映射类型和客户化映射类型。内置映射类型负责把一些常见的java类型映射到相应的SQL类型;此外,Hibernate还允许用户实现UserType或CompositeUserType接口,来灵活定制客户化映射类型。客户化映射类型能够把用户定义的java类型映射到数据库表的相应字段。
Java基本类型的Hibernate映射类型
Hibernate映射类型 Java类型 标准SQL类型 大小和取值范围
integer或int int或java.lang.Integer INTEGER 4字节,-2^31~2^31-1
long long或java.lang.Long BIGINT 8字节,-2^63~2^63-1
short short或java.lang.Short SMALLINT 2字节,-2^15~2^15-1
byte byte或java.lang.Byte TINYINT 1字节,-128^127
float float或java.lang.Float FLOAT 4字节,单精度浮点数
double double或java.lang.Double DOUBLE 8字节,双精度浮点数
character char或java.lang.Character/String CHAR 定长字符
string java.lang.String Varchar 变长字符串
boolean boolean或java.lang.Boolean BIT 布尔类型
yes_no boolean或java.lang.Boolean CHAR(1)('Y'/'N') 布尔类型
true_false boolean或java.lang.Boolean CHAR(1)('T'/'F') 布尔类型
Hibernate映射类型、对应的Java时间和日期类型及对应的标准SQL
映射类型 Java类型 标准SQL类型 描述
date java.util.Date或java.sql.Date DATE 代表日期 YYYY-MM-DD
time java.util.Date或java.sql.Time TIME 代表时间 HH:MM:SS
timestamp java.util.Date或java.sql.Timestamp TIMESTAMP YYYYMMDDHHMMSS
celendar java.util.Calender TIMESTAMP YYYYMMDDHHMMSS
calendar_date java.util.Calender DATE 代表日期 YYYY-MM-DD
Hibernate映射类型、对应的Java大对象类型及对应的标准SQL
映射类型 Java类型 标准SQL类型 MYSQL类型 Oracle类型
binary byte[] VARBINARY(或BLOB) BLOB BLOB
text java.lang.String CLOB TEXT CLOB
serializable 实现该接口的类 VARBINARY(或BLOB) BLOB BLOB
clob java.sql.Clob CLOB TEXT CLOB
blob java.sql.Blob BLOB BLOB BLOB
当应用程序运行时,Java应用程序通过Hibernate访问数据库,而Hibernate又通过JDBC驱动程序访问数据库。JDBC驱动程序对底层数据库使用的SQL进行封装,向上提供标准SQL类型接口,使得Hibernate可以使用标准SQL类型来生成DML(Data Manipulation Language)。
若没有指定映射类型,Hibernate会运用反射机制,判别属性的java类型,采用相应的Hibernate映射类型。
但在一下几种情况下必须显示指定Hibernate映射类型:若希望通过hbm2java工具由映射文件来生成持久化类,必须在映射文件中显式指定Hibernate映射类型。一个java类型对应多个Hibernate映射类型的场合。
org.hibernate.UserType接口中的方法:
sqlTypes()方法:设置java类型为int的在数据库中对应varchar类型
privat static final int[] SQL_TYPES = {Types.VARCHAR};
public int[] sqlTypes(){ return SQL_TYPES;}
returnedClass()方法:当从数据库中读取后运行在java应用程序中是integer类型
public Class returnedClass(){return false;}
isMutable()方法:了解这个类是否是可变类.Hibernate在处理不可变类时会采取一些性能优化
public boolean isMutable(){return false;}
deepCopy(Object value):生成对应属性的快照
public Object deepCopy(Object value){return value;}
equals(Object x, Object y)方法:比较当前值和快照是否相同
public boolean equals(Object x, Object y){
if(x == y) return true;
if(x == null || y == null ) return false;
return x.equals(y);
}
hasCode(Objec x)方法:获得该属性的哈希码
public int hasCode(Object x){
return x.hasCode();
}
nullSafeGet(ResultSet resultSet, String[] names, Object owner)方法:获取属性的属性值
public Object nullSafeGet(ResultSet resultSet, String[] names, Object ower) throws HibernateException, SQLException{
String phone = resultSet.getString(name[0]);
if(resultSet.wasNull) return null;
return new Integer(XX);
}
nullSafeSet(PrepareStatement statement, Object value, int index)方法:当Hibernate把对象持久化到数据库时,调用nullSafeSet()方法把属性添加到SQL insert语句中。
public void nullSafeSet(PrepareStatement statement, Object value, int index) throws HibernateException, SQLException{
if(value == null){
statement.setNull(index, Types.VARCHAR);
}else{
String phone = ((Interger)value).toString();
statement.setString(index, phone);
}
}
assemble(Serializable cached, Object owner)方法:当Hibernate把第二级缓存中的对象加载到Session缓存中,调用assemble()方法来获得属性的反序列化数据
public Object assemble(Serializable cached, Object owner){
return cached;
}
disassemble(Object value)方法:Hibernate把第二级缓存中的对象加载到Session缓存中,调用disassemble()方法来获得属性的序列化数据
public Serializable disassemble(Object value){
return (Serializable)value;
}
replace(Object original, Object target, Object owner)方法:当Session的merge()方法把一个游离对象融合到持久化对象中时,会调用此replace()方法来获得用于替代持久化对象的属性的值。
public Object replace(Object original, Object target, Object owner){
return original;
}
Hibernate组件采用的是XML配置方式,具有较好的维护性。客户化映射类型采用的是编程方式,能够完成更加复杂灵活的映射。
在持久化类中,二进制大对象可以声明为byte[]或java.sql.Blob类型;字符串大对象可以声明为java.lang.String或java.sql.Clob类型。java.sql.Blob和java.sql.Clob是JDBC API中的接口。在默认的情况下,Blob和Clob接口的实现会使用SQL定位器,当程序从数据库加载Blob类型或Clob类型的数据时,实际上加载的是Blob类型或Clob类型的数据的逻辑指针。接下来程序需要通过Blob.getBinaryStream()或Clob.getCharacterStream()方法得到Blob或Clob类型的数据的输入流,才可以真正读取到大数据对象。
Customer customer = (Customer)session.get(Customer.class, new Long(1));
Blob image = customer.getImage(); //逻辑指针
InputStream in = image.getBinaryStream(); //读取大数据
org.hibernate.Hibernate类提供了一系列用于创建Blob和Clob对象的静态方法:
public static Blob createBlob(byte[] bytes)
public static Blob createBlob(InputStream stream, int length)
public static Blob createBlob(InputStream stream)
public static Clob createClob(String string)
public static Clob createClob(Reader reader, int length)
public class BusinessService{
public static SessionFactory sessionFactory;
static{...} //初始化Hibernate
public Long saveCustomer() throw Exception{
//读取photo.gif的二进制文件
InputStream in = this.getClass().getResourceAsStream("photo.gif");
byte[] buffer = new byte[in.available];
in.read(buffer);
in.close();
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Customer customer = new Customer():;
customer.setName("Tom");
//创建一个Blob对象
customer.setImage(Hibernate.createBlob(buffer));
session.save(customer);
tx.commit();
session.close();
return customer.getId();
}
//加载Customer对象
public void loadCustomer(Long id) throws Exception{
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Customer customer = (Customer) session.get(Customer.class,id);
getBlob(customer);
tx.commit();
session.close();
}
public void getBlob(Customer customer) throws Exception{
Blob image = customer.getImage();
InputStream in = image.getBinaryStream();
FileOutputStream fout = new FileOutputStream("11.3\\photo_bak.gif");
int b = -1;
while((b = in.read())!= -1)
fout.write(b);
fout.close();
in.close();
}
}
使用java.sql.Blob和java.sql.Clob受到一下限制:
程序只有在一个数据库事务范围内,才可以访问Blob或Clob类型的实例;有些数据库系统的驱动程序不支持java.sql.Blob或java.sql.Clob;持久化类中必须引入JDBC API中的java.sql.Blob或java.sql.Clob类型。
数据库表之间并不存在继承关系,有3种映射方式可以把域模型的继承关系映射到关系数据模型中:
继承关系树的每个具体类对应一个表:关系数据模型完全不支持域模型中的继承关系和多态。
继承关系树的根类对应一个表:对关系数据模型进行非常规设计,在数据库表中加入额外的区分子类型的字段。通过这种方式,可以使关系数据模型支持继承关系和多态。
继承关系树的每个类对应一个表:在关系数据模型中用外键参照关系来表示继承关系。
继承关系树的每个具体类对应一个表
把每个具体类映射到一张表是自简单的映射方式。这种映射方式不支持多态查询。
继承关系树的根类对应一个表
这种映射方式只需为继承关系树的根创建一张表。在这张表中,会提供它的子类的所有属性对应的字段。此外,还要添加一个标识符字段用来区分不同的子类。
<hibernate-mapping>
<class name="Employee" table="EMPLOYEE">
<id name="id" type="long">
<generator class="increment" />
</id>
<discriminator column="EMPLOYEE_TYPE" type="string" />
<many-to-one
name="company" column="COLUMN_ID" class="Company"
/>
<subclass name="HourlyEmployee" discriminator-value="HE">
<property name="rate" column="RATE" type="double" />
</subclass>
<subclass name="SalaryEmployee" discriminator-value="SE">
<property name="salary" column="SALARY" type="double" />
</subclass>
</class>
</hibernate-mapping>
继承关系树的每个类对应一个表
继承关系树的每个类及接口都对应一个表,这种映射方式支持多态关联。
<hibernate-mapping>
<class name="Employee" table="EMPLOYEE">
<id name="id" type="long">
<generator class="increment" />
</id>
<many-to-one
name="company" column="COLUMN_ID" class="Company"
/>
<joined-subclass name="HourlyEmployee" table="HOURLY_EMPLOYEE">
<key column="EMPLOYEE_ID" />
<property name="rate" column="RATE" type="double" />
</joined-subclass>
<joined-subclass name="HourlyEmployee" table="HOURLY_EMPLOYEE">
<key column="EMPLOYEE_ID" />
<property name="salary" column="SALARY" type="double" />
</joined-subclass>
</class>
</hibernate-mapping>
比较三种映射方式:
关系数据模型的复杂度:
每个具体类对应一个表:每个具体类对应一个表,这些表中包含重复字段
根对应一个表:只需创建一个表
每个类对应一个表:表的数目最多,并且表之间还有外键参照关系
查询性能:
每个具体类对应一个表:如果查询父类的对象,必须查询所有具体子类对应的表
根对应一个表:有很好的查询性能,无需进行表的连接
每个类对应一个表:需要进行表的内连接或左外连接
数据库Schema的可维护性:
每个具体类对应一个表:若父类的属性发生变化,必须修改所有具体的子类对应的表
根对应一个表:只需修改一张表
每个类对应一个表:如果某个类的属性发生变化,只需修改和这个类对应的表
是否支持多态查询和多态关联
每个具体类对应一个表:不支持
根对应一个表:支持
每个类对应一个表:支持
是否符合关系数据模型的常规设计规则
每个具体类对应一个表:符合
根对应一个表:在表中引入额外的区分子类的类型的字段;若子类中的某个属性不允许为null,在表中无法为对应的字段创建not null约束
每个类对应一个表:符合
若不需支持多态查询和多态关联,可以采用给每个具体类对应一个表的映射方式,若需要支持多态查询和多态关联,并且子类包含的属性不多,可以采用根类对应一个表的映射方式,若需要支持多态查询和多态关联,并且子类包含的属性很多,可以采用每个类对应一个表的映射方式。
由于关系数据库模型不允许一个表的外键同时参照两个表的主键,因此,可以通过触发器来保证字段的完整性。
<any name="a" meta-type="string" id-type="long"
cascade="save-update">
<meta-value value="B" class="ClassB" />
<meta-value value="C" class="ClassC" />
<column name="A_TYPE" /> //指定继承子类的类型
<column name="A_ID" /> //子类的id
</any>
今天看了乔布斯斯坦福大学毕业典礼的演讲,感觉还是蛮深刻的。很受鼓舞,人的一生是应该追求自己喜欢的东西,与其自怨自艾,不如努力奋斗!要好好加油哦~~
Java基本类型的Hibernate映射类型
Hibernate映射类型 Java类型 标准SQL类型 大小和取值范围
integer或int int或java.lang.Integer INTEGER 4字节,-2^31~2^31-1
long long或java.lang.Long BIGINT 8字节,-2^63~2^63-1
short short或java.lang.Short SMALLINT 2字节,-2^15~2^15-1
byte byte或java.lang.Byte TINYINT 1字节,-128^127
float float或java.lang.Float FLOAT 4字节,单精度浮点数
double double或java.lang.Double DOUBLE 8字节,双精度浮点数
character char或java.lang.Character/String CHAR 定长字符
string java.lang.String Varchar 变长字符串
boolean boolean或java.lang.Boolean BIT 布尔类型
yes_no boolean或java.lang.Boolean CHAR(1)('Y'/'N') 布尔类型
true_false boolean或java.lang.Boolean CHAR(1)('T'/'F') 布尔类型
Hibernate映射类型、对应的Java时间和日期类型及对应的标准SQL
映射类型 Java类型 标准SQL类型 描述
date java.util.Date或java.sql.Date DATE 代表日期 YYYY-MM-DD
time java.util.Date或java.sql.Time TIME 代表时间 HH:MM:SS
timestamp java.util.Date或java.sql.Timestamp TIMESTAMP YYYYMMDDHHMMSS
celendar java.util.Calender TIMESTAMP YYYYMMDDHHMMSS
calendar_date java.util.Calender DATE 代表日期 YYYY-MM-DD
Hibernate映射类型、对应的Java大对象类型及对应的标准SQL
映射类型 Java类型 标准SQL类型 MYSQL类型 Oracle类型
binary byte[] VARBINARY(或BLOB) BLOB BLOB
text java.lang.String CLOB TEXT CLOB
serializable 实现该接口的类 VARBINARY(或BLOB) BLOB BLOB
clob java.sql.Clob CLOB TEXT CLOB
blob java.sql.Blob BLOB BLOB BLOB
当应用程序运行时,Java应用程序通过Hibernate访问数据库,而Hibernate又通过JDBC驱动程序访问数据库。JDBC驱动程序对底层数据库使用的SQL进行封装,向上提供标准SQL类型接口,使得Hibernate可以使用标准SQL类型来生成DML(Data Manipulation Language)。
若没有指定映射类型,Hibernate会运用反射机制,判别属性的java类型,采用相应的Hibernate映射类型。
但在一下几种情况下必须显示指定Hibernate映射类型:若希望通过hbm2java工具由映射文件来生成持久化类,必须在映射文件中显式指定Hibernate映射类型。一个java类型对应多个Hibernate映射类型的场合。
org.hibernate.UserType接口中的方法:
sqlTypes()方法:设置java类型为int的在数据库中对应varchar类型
privat static final int[] SQL_TYPES = {Types.VARCHAR};
public int[] sqlTypes(){ return SQL_TYPES;}
returnedClass()方法:当从数据库中读取后运行在java应用程序中是integer类型
public Class returnedClass(){return false;}
isMutable()方法:了解这个类是否是可变类.Hibernate在处理不可变类时会采取一些性能优化
public boolean isMutable(){return false;}
deepCopy(Object value):生成对应属性的快照
public Object deepCopy(Object value){return value;}
equals(Object x, Object y)方法:比较当前值和快照是否相同
public boolean equals(Object x, Object y){
if(x == y) return true;
if(x == null || y == null ) return false;
return x.equals(y);
}
hasCode(Objec x)方法:获得该属性的哈希码
public int hasCode(Object x){
return x.hasCode();
}
nullSafeGet(ResultSet resultSet, String[] names, Object owner)方法:获取属性的属性值
public Object nullSafeGet(ResultSet resultSet, String[] names, Object ower) throws HibernateException, SQLException{
String phone = resultSet.getString(name[0]);
if(resultSet.wasNull) return null;
return new Integer(XX);
}
nullSafeSet(PrepareStatement statement, Object value, int index)方法:当Hibernate把对象持久化到数据库时,调用nullSafeSet()方法把属性添加到SQL insert语句中。
public void nullSafeSet(PrepareStatement statement, Object value, int index) throws HibernateException, SQLException{
if(value == null){
statement.setNull(index, Types.VARCHAR);
}else{
String phone = ((Interger)value).toString();
statement.setString(index, phone);
}
}
assemble(Serializable cached, Object owner)方法:当Hibernate把第二级缓存中的对象加载到Session缓存中,调用assemble()方法来获得属性的反序列化数据
public Object assemble(Serializable cached, Object owner){
return cached;
}
disassemble(Object value)方法:Hibernate把第二级缓存中的对象加载到Session缓存中,调用disassemble()方法来获得属性的序列化数据
public Serializable disassemble(Object value){
return (Serializable)value;
}
replace(Object original, Object target, Object owner)方法:当Session的merge()方法把一个游离对象融合到持久化对象中时,会调用此replace()方法来获得用于替代持久化对象的属性的值。
public Object replace(Object original, Object target, Object owner){
return original;
}
Hibernate组件采用的是XML配置方式,具有较好的维护性。客户化映射类型采用的是编程方式,能够完成更加复杂灵活的映射。
在持久化类中,二进制大对象可以声明为byte[]或java.sql.Blob类型;字符串大对象可以声明为java.lang.String或java.sql.Clob类型。java.sql.Blob和java.sql.Clob是JDBC API中的接口。在默认的情况下,Blob和Clob接口的实现会使用SQL定位器,当程序从数据库加载Blob类型或Clob类型的数据时,实际上加载的是Blob类型或Clob类型的数据的逻辑指针。接下来程序需要通过Blob.getBinaryStream()或Clob.getCharacterStream()方法得到Blob或Clob类型的数据的输入流,才可以真正读取到大数据对象。
Customer customer = (Customer)session.get(Customer.class, new Long(1));
Blob image = customer.getImage(); //逻辑指针
InputStream in = image.getBinaryStream(); //读取大数据
org.hibernate.Hibernate类提供了一系列用于创建Blob和Clob对象的静态方法:
public static Blob createBlob(byte[] bytes)
public static Blob createBlob(InputStream stream, int length)
public static Blob createBlob(InputStream stream)
public static Clob createClob(String string)
public static Clob createClob(Reader reader, int length)
public class BusinessService{
public static SessionFactory sessionFactory;
static{...} //初始化Hibernate
public Long saveCustomer() throw Exception{
//读取photo.gif的二进制文件
InputStream in = this.getClass().getResourceAsStream("photo.gif");
byte[] buffer = new byte[in.available];
in.read(buffer);
in.close();
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Customer customer = new Customer():;
customer.setName("Tom");
//创建一个Blob对象
customer.setImage(Hibernate.createBlob(buffer));
session.save(customer);
tx.commit();
session.close();
return customer.getId();
}
//加载Customer对象
public void loadCustomer(Long id) throws Exception{
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Customer customer = (Customer) session.get(Customer.class,id);
getBlob(customer);
tx.commit();
session.close();
}
public void getBlob(Customer customer) throws Exception{
Blob image = customer.getImage();
InputStream in = image.getBinaryStream();
FileOutputStream fout = new FileOutputStream("11.3\\photo_bak.gif");
int b = -1;
while((b = in.read())!= -1)
fout.write(b);
fout.close();
in.close();
}
}
使用java.sql.Blob和java.sql.Clob受到一下限制:
程序只有在一个数据库事务范围内,才可以访问Blob或Clob类型的实例;有些数据库系统的驱动程序不支持java.sql.Blob或java.sql.Clob;持久化类中必须引入JDBC API中的java.sql.Blob或java.sql.Clob类型。
数据库表之间并不存在继承关系,有3种映射方式可以把域模型的继承关系映射到关系数据模型中:
继承关系树的每个具体类对应一个表:关系数据模型完全不支持域模型中的继承关系和多态。
继承关系树的根类对应一个表:对关系数据模型进行非常规设计,在数据库表中加入额外的区分子类型的字段。通过这种方式,可以使关系数据模型支持继承关系和多态。
继承关系树的每个类对应一个表:在关系数据模型中用外键参照关系来表示继承关系。
继承关系树的每个具体类对应一个表
把每个具体类映射到一张表是自简单的映射方式。这种映射方式不支持多态查询。
继承关系树的根类对应一个表
这种映射方式只需为继承关系树的根创建一张表。在这张表中,会提供它的子类的所有属性对应的字段。此外,还要添加一个标识符字段用来区分不同的子类。
<hibernate-mapping>
<class name="Employee" table="EMPLOYEE">
<id name="id" type="long">
<generator class="increment" />
</id>
<discriminator column="EMPLOYEE_TYPE" type="string" />
<many-to-one
name="company" column="COLUMN_ID" class="Company"
/>
<subclass name="HourlyEmployee" discriminator-value="HE">
<property name="rate" column="RATE" type="double" />
</subclass>
<subclass name="SalaryEmployee" discriminator-value="SE">
<property name="salary" column="SALARY" type="double" />
</subclass>
</class>
</hibernate-mapping>
继承关系树的每个类对应一个表
继承关系树的每个类及接口都对应一个表,这种映射方式支持多态关联。
<hibernate-mapping>
<class name="Employee" table="EMPLOYEE">
<id name="id" type="long">
<generator class="increment" />
</id>
<many-to-one
name="company" column="COLUMN_ID" class="Company"
/>
<joined-subclass name="HourlyEmployee" table="HOURLY_EMPLOYEE">
<key column="EMPLOYEE_ID" />
<property name="rate" column="RATE" type="double" />
</joined-subclass>
<joined-subclass name="HourlyEmployee" table="HOURLY_EMPLOYEE">
<key column="EMPLOYEE_ID" />
<property name="salary" column="SALARY" type="double" />
</joined-subclass>
</class>
</hibernate-mapping>
比较三种映射方式:
关系数据模型的复杂度:
每个具体类对应一个表:每个具体类对应一个表,这些表中包含重复字段
根对应一个表:只需创建一个表
每个类对应一个表:表的数目最多,并且表之间还有外键参照关系
查询性能:
每个具体类对应一个表:如果查询父类的对象,必须查询所有具体子类对应的表
根对应一个表:有很好的查询性能,无需进行表的连接
每个类对应一个表:需要进行表的内连接或左外连接
数据库Schema的可维护性:
每个具体类对应一个表:若父类的属性发生变化,必须修改所有具体的子类对应的表
根对应一个表:只需修改一张表
每个类对应一个表:如果某个类的属性发生变化,只需修改和这个类对应的表
是否支持多态查询和多态关联
每个具体类对应一个表:不支持
根对应一个表:支持
每个类对应一个表:支持
是否符合关系数据模型的常规设计规则
每个具体类对应一个表:符合
根对应一个表:在表中引入额外的区分子类的类型的字段;若子类中的某个属性不允许为null,在表中无法为对应的字段创建not null约束
每个类对应一个表:符合
若不需支持多态查询和多态关联,可以采用给每个具体类对应一个表的映射方式,若需要支持多态查询和多态关联,并且子类包含的属性不多,可以采用根类对应一个表的映射方式,若需要支持多态查询和多态关联,并且子类包含的属性很多,可以采用每个类对应一个表的映射方式。
由于关系数据库模型不允许一个表的外键同时参照两个表的主键,因此,可以通过触发器来保证字段的完整性。
<any name="a" meta-type="string" id-type="long"
cascade="save-update">
<meta-value value="B" class="ClassB" />
<meta-value value="C" class="ClassC" />
<column name="A_TYPE" /> //指定继承子类的类型
<column name="A_ID" /> //子类的id
</any>
今天看了乔布斯斯坦福大学毕业典礼的演讲,感觉还是蛮深刻的。很受鼓舞,人的一生是应该追求自己喜欢的东西,与其自怨自艾,不如努力奋斗!要好好加油哦~~
发表评论
-
Hibernate_11
2014-09-22 17:43 423缓存的物理介质通常是内存,而永久性数据存储源的物理介质通常是硬 ... -
Hibernate_10
2014-09-19 17:33 385对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,若 ... -
Hibernate_9
2014-09-19 11:25 386数据库事务必须具备ACID特征,ACID是Atomic(原子性 ... -
Hibernate_8
2014-09-18 16:37 428Hibernate可以与任何一种Java应用的运行环境集成。J ... -
Hibernate_7
2014-09-17 16:55 704JDBC API提供了一种可滚动的结果集,它是利用数据库系统中 ... -
Hibernate_6
2014-09-15 17:51 534Java的集合类位于java.util包中,Java集合中存放 ... -
Hibernate_4
2014-09-06 10:39 468当程序通过Hibernate来加载、保存、更新或删除对象时,会 ... -
Hibernate_3
2014-09-04 17:52 366这几天心情不好,效率 ... -
Hibernate_2
2014-09-04 09:12 378hbm2ddl工具位于Hibernate核 ... -
Hibernate_1
2014-09-02 22:10 390分层体系结构: 逻辑上一般分为三层:表述层(提供与用户交互的界 ...
相关推荐
Fluent电弧,激光,熔滴一体模拟。 UDF包括高斯旋转体热源、双椭球热源(未使用)、VOF梯度计算、反冲压力、磁场力、表面张力,以及熔滴过渡所需的熔滴速度场、熔滴温度场和熔滴VOF。
基于协同过滤算法商品推荐系统.zip
锂电池半自动带电液舱标准手套箱(sw16可编辑+工程图)全套技术资料100%好用.zip
这是一款基于jQuery实现的经典扫雷小游戏源码,玩家根据游戏规则进行游戏,末尾再在确定的地雷位置单击右键安插上小红旗即可赢得游戏!是一款非常经典的jQuery游戏代码。本源码改进了获胜之后的读数暂停功能。另外建议用户使用支持HTML5与css3效果较好的火狐或谷歌等浏览器预览本源码,可以看到地图的远景拉伸效果。
Android studio 健康管理系统期末大作业App源码
校园表白墙网站源码、表白墙网站制作、网页表白墙源码 效果演示https://www.hybiaobai.cn/ 校园表白墙网站源码、表白墙网站制作、网页表白墙源码
In the video, a person stands alone in a snowy night, holding a delicate wine cup, with a desolate expression. The snowflakes are falling gently, and the person seems lost in deep thoughts and memories. They take a few steps, as if trying to follow the wind, with a sense of yearning and melancholy. The background shows an ancient Chinese-style house with eaves covered in snow, adding to the lonely and nostalgic atmosphere. The person's movements are slow and graceful, reflecting the complex emot
①软件 程序 网站开发路面附着系数估计,采用UKF和EKF两种算法。 软件为Matlab Simulink,非Carsim联合仿真。 dugoff轮胎模块:纯simulink搭非代码 整车模块:7自由度整车模型 估计模块:无迹卡尔曼滤波,扩展卡尔曼滤波,均是simulink现成模块应用无需S-function 带有相关文献和估计说明
基于Spring Boot的在线考试系统--论文.zip
内容概要:本文介绍了一种新方法,用于识别仅由轮廓表示的部分遮挡物体。该方法通过对拐点检测来创建对象的近似多边形形状描述符,并采用一种简单易实施的匹配算法。描述符能够对噪声和部分遮挡保持较好的鲁棒性,在计算机视觉应用中尤其有效。研究涉及多种测试,涵盖人工数据、现实世界图像及不同条件下的变化(如加性高斯噪声、部分遮挡等),展示了良好的效果以及相较于同类方法的优势。 适用人群:从事计算机视觉相关工作的科研人员及技术人员。 使用场景及目标:适用于需要自动化的部分遮挡目标检测和匹配的各种应用场景,尤其是在机器学习项目中涉及光学字符识别等领域。通过使用该算法可以提高复杂环境中物体匹配的成功率,增强系统鲁棒性和适应范围。 其他说明:作者还讨论了关于边界表示法的一些优缺点并提出未来改进方向,例如自动生成迭代次数及引入新的层级化匹配策略。此外,文中提到的所有实验均在标准条件下进行,但当应用于实际环境中时可能需要额外调整参数以达到最佳性能。
【Python】基于Python的美篇高清图片爬虫
node-v14.17.5-x64 msi安装包
ie8 升级到ie11 离线安装包 先安装补丁,再安装ie,某个补丁安装不上就跳过,先安装其他补丁,再回来安装。最后能装IE11就可以了
Title: 《设计与实现基于JavaWeb的校园兼职信息平台——毕业设计/课程设计》 项目概述 本项目是一款针对校园环境的兼职信息平台,旨在为学生提供寻找兼职工作的机会,同时为企业提供一个发布兼职信息的平台。该平台采用JavaWeb技术,结合SSM(Spring, SpringMVC, MyBatis)框架开发,专注于解决学生兼职信息不对称的问题。 功能模块 兼职信息发布:企业用户可以发布兼职信息,包括职位描述、要求、薪资等。 兼职信息浏览:学生用户可以浏览兼职信息,并根据条件筛选合适的兼职。 评论与反馈:用户可以对兼职信息和雇主进行评论和反馈。 用户管理:包括学生和企业用户的注册、登录、信息修改等。 消息通知:系统会向用户推送相关的兼职信息和评论通知。 项目特色 评论功能(Comment Part-time):学生可以对企业发布的兼职进行评价,帮助其他学生更好地选择兼职。 信息审核:确保兼职信息的真实性和有效性。 用户互动:提供私信功能,方便学生与企业之间的沟通。 项目目标 帮助学生更快地找到合适的兼职工作。 为企业提供高效的人才招聘渠道。 增强校园内的就业服务和信息交流。 开发流
基于springboot的应急救援物资管理系统.zip
内容概要:本文档详细讲解了利用 Python 和 python-telegram-bot 库创建一个简易但实用性强的 Telegram 接口的方法。主要内容涵盖了从配置所需环境(如安装相关库)、编写登录验证逻辑,到实现获取好友列表和实施即时通信(聊天)等功能的具体代码演示及解释。文中还提供了关于用户认证的基本方法、简单用户数据模拟、基本的日志记录方式,以及启动机器人并维持监听状态的操作指导,最后提醒开发者替换成自己的 bot token 并指出了一些安全方面的考量,比如严格验证用户输入以保障应用程序的安全性。 适合人群:对于有兴趣探索社交平台集成或是初次接触即时通讯软件自动化构建,尤其是想基于 Python 来快速搭建一个 Telegram Bot 的初学者或是拥有基础编程经验的人士来说非常适合。 使用场景及目标:适用于想要快速建立个人或者小团队之间的信息交流渠道,测试和熟悉 Telegram Bot API 的工作机制,以及进一步理解和提升在社交平台上自动化工具开发技能的情况。这有助于加深理解 API 调用流程、异步消息传输机制等相关知识点,同时也可以作为更大规模项目的基础模块之一来考虑扩展。 其他说明:本指南侧重于理论联系实际的应用层面教学,不仅提供了完整的代码案例让读者可以亲手操作,还强调了良好编码习惯的重要性(像添加适当的注释),并且提及到了未来可能遇到的技术挑战——例如用户数据的真实保存与维护(推荐采用数据库解决方案)。这对于提高读者的实际动手能力和激发更多自主思考都起到了积极作用。
手搓人工神经网络的教程。在CSDN文章中也有,但CSDN文章排版略有偏差,因此附上pdf文档
回旋提升式柔性链输送机sw16可编辑全套技术资料100%好用.zip
视觉点胶+伺服打螺丝+压装+电测试生产线x_t全套技术资料100%好用.zip
调试过可以运行。 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9