以Person类为例
一.导入jar包
二.在根目录下(即src目录下)写一个hibernate.cfg.xml配置文件
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <!--session-factory 代表一个数据库的描述--> <session-factory> <!--链接数据库的url--> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property> <!--链接数据库的驱动--> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!--链接数据库的用户名--> <property name="hibernate.connection.username">root</property> <!--链接数据库的密码--> <property name="hibernate.connection.password">root</property> <!--方言 告诉hibernate用什么数据库,将来会生成什么样的sql语句--> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- hibernate对表的策略 validate 在hibernate容器启动的时候,根据映射文件和持久化类校验表 create 每次当hibernate启动的时候,都会根据持久化类和映射文件创建表 create-drop 每次当hibernate启动的时候,都会根据持久化类和映射文件创建表,销毁的时候删除表 update 检查,如果和映射文件不一致,则更新表的结构,如果没有表,则会创建表 --> <property name="hbm2ddl.auto">update</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <mapping resource="domain/Person.hbm.xml"/> </session-factory> </hibernate-configuration>三.持久化类
package domain; /** * * Created by wangxinqi on 2016/12/20. * 持久化类 */ public class Person { private long id; private String name; private String sex; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }四. 在类的同包下写一个映射文件(一般是 类名.hbm.xml)以此例就是Person.hbm.xml
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!-- class元素 代表持久化类 name属性为类的全名 table属性为表的名字 默认值是类名 catlog属性 为数据库的名字 --> <class name="domain.Person" table="Person"> <!-- id为元素主键 name 标示符属性 length 数据库中id的长度 column id属性对于的字段 type 类型 --> <id name="id" length="5" column="id" type="java.lang.Long"> <!-- 主键的产生器 需要通过什么样的方式产生主键 --> <generator class="increment"></generator> </id> <!-- 代表一般的属性 --> <property name="name" type="java.lang.String" length="20"></property> <property name="sex" type="java.lang.String" length="20"></property> </class> </hibernate-mapping>五.测试及验证
/** * Created by Administrator on 2016/12/20. * 完成crud的操作 */ public class CRUDtest { /** * 建表测试 * */ @Test public void creatTableTest(){ Configuration configuration=new Configuration(); configuration.configure(); configuration.buildSessionFactory(); } /** * 增加数据 * */ @Test public void testSave(){ //创建Configuration实例 Configuration configuration =new Configuration(); //加载hibernate.cfg.xml文件 configuration.configure(); //创建sessionFactory相当于数据源 SessionFactory sessionFactory= configuration.buildSessionFactory();//也可以理解为session工厂 //保存操作是由session来完成的 openSession 方法相当于利用session打开了一个数据库的连接 Session session=sessionFactory.openSession();//开启session(连接) 一个数据库连接对象 就一个seesion //hibernate的事务默认是关闭的,必须手动开启 ,可以保证数据的安全性 Transaction transaction=session.beginTransaction(); Person person=new Person();//临时状态 person.setName("王新起");//临时状态 person.setSex("男");//临时状态 session.save(person);//把一个对象转化为持久化状态 //提交事务 transaction.commit(); //相当于关闭了连接 session.close(); } /** * 查询所有的person对象 * 查询操作不需要开启事务 * */ @Test public void testQueryAllPerson(){ Configuration configuration =new Configuration(); configuration.configure(); SessionFactory sessionFactory=configuration.buildSessionFactory(); Session session=sessionFactory.openSession(); // List<Person> persons = session.createQuery("from Person").list(); List<Person> persons =session.createQuery("from Person ").list(); for (Person person :persons){ System.out.print(person.getName()+":"+person.getSex()); } session.close(); } /** * 根据主键查询其中的一条数据 * */ @Test public void testPersonById(){ Configuration configuration=new Configuration(); configuration.configure(); SessionFactory sessionFactory=configuration.buildSessionFactory(); Session session=sessionFactory.openSession(); Person person=session.get(Person.class,1L); System.out.print(person.getName()); session.close(); } /** * 修改 * */ @Test public void testUpdate(){ Configuration configuration =new Configuration(); configuration.configure(); SessionFactory sessionFactory=configuration.buildSessionFactory(); Session session=sessionFactory.openSession(); Transaction transaction =session.beginTransaction(); // 先拿到 再修改 再更新 Person person=session.get(Person.class,1L); person.setName("王帅起"); session.update(person); transaction.commit(); session.close(); } /** * 删除 * */ @Test public void testDelete(){ Configuration configuration =new Configuration(); configuration.configure(); SessionFactory sessionFactory=configuration.buildSessionFactory(); Session session =sessionFactory.openSession(); Transaction transaction =session.beginTransaction(); //先拿到 再删除 Person person =session.get(Person.class,1L); session.delete(person); transaction.commit(); session.close(); } }