Hibernate笔记

搭建Hibernate的环境:

新建一个User Library:Hibernate 3,引入jar文件:

HIBERNATE_HOME\lib 下的相关的依赖的第三方包

HIBERNATE_HOME/hibernate3.jar Hibernate的核心实现

引入相关的JDBC驱动

把创建的Hibernate用户库引进项目中

在项目src目录下创建相关配置文件:

HIBERNATE_HOME \etc\ hibernate.properties 旧版本的Hibernate实用的核心配置文件,这个文件列举了相关的Hibernate配置,在配置文件时可以参考该文件。

HIBERNATE_HOME \etc\ hibernate.cfg.xml 如果存在这个文件则会覆盖上面的properties文件

HIBERNATE_HOME\hibernate-3.2\etc 日志记录文件

编写hibernate.cfg.xml文件:

<hibernate-configuration>

<session-factory>

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test_1</property>

<property name="hibernate.connection.username">root</property>

<property name="hibernate.connection.password">abc</property>

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<property name="hibernate.show_sql">true</property>

<!--

<property name="hibernate.format_sql">true</property>

-->

<mapping resource="com/test/User.hbm.xml"/>

</session-factory>

</hibernate-configuration>





基本的映射实体了的xml格式:

<hibernate-mapping>

<class name="com.test.User">

<id name="id">

<generator class="uuid"/>

</id>

<property name="name" column=”user_name”/>

<property name="password"/>

</class>

</hibernate-mapping>

创建完映射文件之后,记得把hbm.xml文件添加到hibernate.cfg.xml文件中

<mapping resource="com/test/User.hbm.xml"/>

(在session-factory标签里property标签后)



生成第一个数据库和表:

Configuration cfg = new Configuration().configure();

SchemaExport export = new SchemaExport(cfg);

export.create(true, true);

创建hibernate.cfg.xml文件中指定的test_1数据库,并使用该数据库,然后运行上面的代码





将对象保存到数据库表中:

Configuration cfg = new Configuration().configure();

SessionFactory factory = cfg.buildSessionFactory();

// SessionFactory一个数据库创建一个就可以了,它是线程安全的

Session session = null;

try {

session = factory.openSession();

session.beginTransaction();

User user = new User();

user.setName("张三");

user.setPassword("123");

session.save(user);

session.getTransaction().commit();

}catch(Exception e) {

e.printStackTrace();

session.getTransaction().rollback();

}finally {

if (session != null) {

if (session.isOpen()) {

session.close();

}

}

}





持久化对象的三种状态:

Transient,Persist,Detached





get方法查询的使用:

session.beginTransaction();

//get加载上来的对象为持久对象

//执行get会马上发出查询语句

User user = (User)session.get(User.class, "001");

System.out.println(user.getName());

//Persistent状态

//Persistent状态的对象,当对象的属性发生改变的时候

//hibernate在清理缓存(脏数据检查)的时候,会和数据库同步,相当于执行了一个flush语句;

user.setName(”王五");

session.getTransaction().commit();



当使用get方法查询数据库中没有的数据时,返回null,所以需要做一下判断,避免出现空指针





Load方法查询的使用:

session.beginTransaction();

//不会马上发出查询语句,因为load支持lazy(延迟加载/懒加载)

//hibernate的lazy采用代理对象实现,代理对象主要采用的是CGLIB库生成

//生成代理,它采用的是继承方式

User user = (User)session.load(User.class, "002");

System.out.println(user.getName());

user.setName("王五");

session.getTransaction().commit();



delete方法的使用:

User user = (User)session.load(User.class, "001");

//删除,建议采用此种方式删除:先加载再删除

session.delete(user);

session.getTransaction().commit();





//手动构造Detached对象

User user = new User();

user.setId("002");

session.delete(user);

session.getTransaction().commit();



update方法的使用:

//手动构造Detached对象,生成的语句问好是随着修改的属性动态改变的

User user = new User();

user.setId("001");

user.setName("张三");

session.update(user);

session.getTransaction().commit();





session.beginTransaction();

//建议采用此种方式更新,先加载再更新,生成固定的sql语句,不影响效率

User user = (User)session.load(User.class, "002");

user.setName("李四");

//可以显示的update

session.update(user);

session.getTransaction().commit();



使用Query接口:

session.beginTransaction();

Query query = session.createQuery("from User"); //使用hql语句

List userList = query.list();

for (Iterator iter=userList.iterator(); iter.hasNext();) {

User user = (User)iter.next();

System.out.println("id=" + user.getId() + ", name=" + user.getName());

}

session.getTransaction().commit();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值