一.hibernate步骤
1.六个准备(三拷三配):
- 拷jdbc驱动
- 拷hibernate开发包
- 拷 log4j
- 配pojo(以一张学生表为例,数据库中两个字段。注意:要实现序列化)
public class Student implements Serializable {
private int sid;
private String sname;
//...setters和getters方法已省略
}
- 配映射文件
column :是数据库里面的字段,name: 是pojo的字段;不相同就得都写,名字相同可以省略
<hibernate-mapping>
<class name="com.pojo.Student" table="stu">
<id name="sid" column="id">
<generator class="identity"/>
</id>
<property name="sname" column="name"/>
</class>
</hibernate-mapping>
- 配总的配置文件
<hibernate-configuration>
<session-factory>
<property name="myeclipse.connection.profile">MySQL5</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/s38</property>
<property name="connection.username">root</property>
<property name="connection.password">admin</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping resource="com/pojo/Student.hbm.xml" />
</session-factory>
</hibernate-configuration>
2.七个步骤(上一篇博文写了)
由于进行持久化操作的时候,多次用到了session,所有我们可以把得到session分装成一个公共的方法。
如下:
public class HibernateSessionFactory {
private static Configuration cfg=new Configuration().configure();
private static SessionFactory factory=cfg.buildSessionFactory();
private static Map<Thread, Session> map = new HashMap();
public static Session getSession()
{
Session session = map.get(Thread.currentThread());
if (session==null || session.isOpen()==false)
{
session = factory.openSession();
map.put(Thread.currentThread(), session);
}
return session;
}
}
3.添加学生表的记录
**单个操作以主键为核心:
session.get() 找 ;
session.get() 添加 ;
session.delete() 删除 ;
session.update() 改
public class AddStu {
/**
* @param Anges
* 添加学生表的记录
*/
public static void main(String[] args) {
Session session=HibernateSessionFactory.getSession();
Transaction tr=session.beginTransaction();
Student stu=new Student();
stu.setSname("lili");
session.save(stu);
tr.commit();
session.close();
}
}
4.根据主键查找学生
public class FindStu {
/**
* @param Anges
* 根据主键查找学生
* 可以不用事务
*/
public static void main(String[] args) {
Session session=HibernateSessionFactory.getSession();
Student stu=(Student) session.get(Student.class, 1);
if(stu==null){
Logger.getRootLogger().info("查无此人");
}else{
Logger.getRootLogger().info(stu.getSname());
}
}
}
5.修改
public class UpdateStu {
/**
* @param Anges
* 先查到学生然后再修改
*/
public static void main(String[] args) {
Session session=HibernateSessionFactory.getSession();
Student stu=(Student) session.get(Student.class, 1);
if(stu==null){
Logger.getRootLogger().info("查无此人");
}else{
Transaction tr=session.beginTransaction();
stu.setSname("luoli");
session.update(stu);
tr.commit();
Logger.getRootLogger().info(stu.getSname());
}
session.close();
}
}
6.删除
public class DeleteStu {
/**
* @param Anges
* 先查到学生然后再删除
*/
public static void main(String[] args) {
Session session=HibernateSessionFactory.getSession();
Student stu=(Student) session.get(Student.class, 1);
if(stu==null){
Logger.getRootLogger().info("查无此人");
}else{
Transaction tr=session.beginTransaction();
session.delete(stu);
tr.commit();
}
session.close();
}
}
7.
public class QueryFindStu {
/**
* @param Anges
* 批量查找
*/
public static void main(String[] args) {
Session session=HibernateSessionFactory.getSession();
String hql="from Student"; //在hql中: 表名改成类名 ,字段名改成属性名
Query query=session.createQuery(hql);
List<Student> list=query.list();
for (Student stu : list) {
System.out.println(stu.getSid()+"\t"+stu.getSname());
}
}
}