Hibernate初识
小配置里的代码:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.happy.entity">
<class name="Dog" table="Dog" >
<id name="dogid" column="dogid">
<generator class="native"></generator>//id主键 自增
</id>
<property name="dogname" column="dogname"></property>
<property name="dogage" column="dogage" ></property>
</class>
</hibernate-mapping>
实体类:
/** * Created by lgy on 2017/9/18. */ public class Dog { private String dogname; private Integer dogage; private Integer dogid; public String getDogname() { return dogname; } public void setDogname(String dogname) { this.dogname = dogname; } public Integer getDogage() { return dogage; } public void setDogage(Integer dogage) { this.dogage = dogage; } public Integer getDogid() { return dogid; } public void setDogid(Integer dogid) { this.dogid = dogid; } }
util:
public class HibernateUntil { private static Configuration cfg=new Configuration().configure(); private static SessionFactory factory=cfg.buildSessionFactory(); //1.方法返回session 静态成员变量不能直接使用非静态成员 //Session依赖于Session工厂,工厂依赖于Configure public static Session getSession(){ return factory.openSession(); } //2.关闭session public static void closeSession(){ getSession().close();
大配置:
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!--数据库驱动--> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <!--数据库url--> <property name="connection.url" >jdbc:oracle:thin:@localhost:1521:orcl</property> <!--数据库username--> <property name="connection.username" >test</property> <!--数据库password--> <property name="connection.password" >test</property> <!--hibernate方言--><!--和Spring整合时name属性前S必须加hibernate,单独用hibernate框架时,name属性可以直接用dialect--> <property name="hibernate.dialect" >org.hibernate.dialect.Oracle10gDialect</property> <!--输出所有语句到控制台--> <property name="hirbernate.show_sql" >true</property> <!--在log和console中打印出更新 格式化显示sql--> <property name="hibernate.format_sql" >true</property> <!--hbm2ddl就是**.hbm.xml,生成特定数据库的sql 从程序中自动建表 updata表示如果底层存在表,name更新表结构 --> <property name="hibernate.hbm2ddl.auto" >update</property> <!--指定当前session范围和上下文 thread至当前线程用来跟踪管理--> <property name="current_session_context_class" >thread</property> <mapping resource="cn/happy/entity/Dog.hbm.xml" ></mapping> </session-factory> </hibernate-configuration>
Test测试类:
@Test public void testhibernate() { //configuration Configuration cfg=new Configuration().configure(); SessionFactory factory=cfg.buildSessionFactory(); Session session=factory.openSession(); Transaction tx=session.beginTransaction(); Dog dog=new Dog(); dog.setDogname("小白"); session.save(dog); tx.commit(); System.out.println("add ok!"); session.close();
}
//用get方法查询数据库
@Test
private void findStudent() {
//02Hibernate 保存
//读取大配置文件,获取连接的数据库信息
Configuration cfg=new Configuration().configure();
//3创建SessionFactory
SessionFactory factory=cfg.buildSessionFactory();
//加工session
Session session=factory.openSession();
//开启事务
Transaction tx=session.beginTransaction();
//5Hibernate
//根据session的方法做数据操作 检索
Student student=session.get(Student.class,2);
System.out.println(student.getName());
//提交事务
tx.commit();
//关闭session
session.close();
System.out.println("success ok");
}
//用load方法查询
@Test
public void update2(){
Configuration cfg=new Configuration().configure();
SessionFactory factory=cfg.buildSessionFactory();
Session session=factory.openSession();
Transaction tx=session.beginTransaction();
Dog dog=session.load(Dog.class,1);
System.out.println("load-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
System.out.println(dog.getDogname());
}
load方法:
无论get方法查询,还是load方法,都要开启事务,也不要手动提交!!!