个人博客
项目地址-码云
- intellij新建Maven项目
- 在src/resource下新建
hibernate.cfg.xml
文件,一定要在src/resource目录下,否则会报无法定位资源文件的错误。
jdbc:mysql://localhost:3306/hibernate-final?useUnicode=true&characterEncoding=UTF-8
com.mysql.jdbc.Driver
root
rootPwd
org.hibernate.dialect.MySQLDialect
true
true
update
- 不要使用intellij的Add Framework Support,可能是intellij的hibernate版本太低了,使用这种方式生成数据库表的时候会报错,"type"在mysql高版本中已经被删除。
- 在项目的pom文件中添加hibernate依赖
org.hibernate
hibernate-core
4.3.11.Final
junit
junit
4.10
mysql
mysql-connector-java
5.1.39
- 新建持久化类
package Entity;
/**
* Created by futao on 2017/9/24.
*/
public class Student {
//JavaBean(持久化类)编写规范
//1.公有的类
//2.私有属性
//3.提供公有的不带参数的默认构造方法
//4.私有属性的公有getter和setter
//5.为方便实例化对象,一般生成一个带参的构造方法
//设置public static final String的意义在于:比如 .add(Restrictions.eq())的时候,可以直接通过实体的类型点出来,而不用手动输入,这样避免了手动输入发生错误的情况
private int sid;
public static final String _sid = "sid";
private String name;
public static final String _name = "name";
private String gender;
public static final String _gender = "gender";
private Timestamp birthday;
public static final String _birthday = "birthday";
private String address;
public static final String _address = "address";
private String tel;
public static final String _tel = "tel";
public Student(){ }
public Student(int sid, String name, String gender, String birthday, String address, String tel) {
this.sid = sid;
this.name = name;
this.gender = gender;
this.birthday = birthday;
this.address = address;
this.tel = tel;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
}
- 在src/resource文件夹下创建实体映射文件
StudentEntity.hbm.xml
,maven项目的配置文件应该都应该放在这个文件夹下,否则都会报错。
- 在hibernate主配置文件中添加实体映射文件
- 测试
package Entity
import org.hibernate.cfg.Configuration
import org.junit.Test
@Suppress("DEPRECATION")
/**
* Created by futao on 2017/9/24.
*/
class t{
@Test
fun testInit(){
//加载配置文件
val configuration=Configuration().configure()
//创建会话工厂
val sessionFactory=configuration.buildSessionFactory()
//创建会话
val session=sessionFactory.openSession()
//开启事务
val transaction=session.beginTransaction()
//crud
session.save(Student(1,"熊小二","男", "2017-9-24","上海市小二房","1887978252"))
//提交事务
transaction.commit()
//关闭会话
session.close()
//关闭会话工厂
sessionFactory.close()
}
}
基础版完成 ↑↑↑↑↑↑↑
Hibernate执行流程
session简单地理解就是一个操作数据库的对象
hibernate的操作必须包装在事务当中,否则操作不会同步到数据库(或者使用doWord()的方式)
创建session对象的两种方式
- val session=sessionFactory.openSession()
- val session=sessionFactory.currentSession
使用第二种方式获得session需要在hibernate主配置文档中进行配置
thread
hbm常用配置
timestamp时间戳
//Entity
private Blob picture;//照片,长文本
public static final String _picture = "picture";
//hbm.xml
//Test 存
val f= File("d:"+File.separator+"banner.png")
val input=FileInputStream(f)
val blob=Hibernate.getLobCreator(session).createBlob(input, input.available().toLong())
session.save(Student(5,"熊","男", Timestamp(DateTime.now().millis) ,"上海市小二房","1887978252",blob))
// 取
val entity = session.get(Student::class.java, 4) as Student
//获得Blob对象
val pic= entity.picture
//获得照片的输入流
val inPut=pic.getBinaryStream()
//创建输出流
val file = File("d:"+File.separator+"bannerNew.png")
//获得输出流
val outPut=FileOutputStream(file)
//创建缓冲区
var buff = ByteArray(inPut.available())
inPut.read(buff)
outPut.write(buff)
inPut.close()
outPut.close()
组件属性
组件属性的所有property会在实体(Student)对应的表中生成相应的字段