hibernate4简单配置
核心步骤:
1) 导入jar包
2) 创建hibernate.cfg.xml配置文件
3) 创建对象类及类和表的映射文件
4) 操作数据
hibernate项目结构图(当前版本为4.3.5),(我建的是一个web project,当然也可以建java project或是maven项目)
1、将hibernate的jar包导入lib下
必须要导入的jar包有:
lib\required文件夹下
数据库方面的jar包有:
mysql-connector-java-5.1.7-bin.jar(mysql)
ojdbc6.jar(oracle)
连接池(可选):
lib\optional\c3p0文件夹下
2、在项目的src下新建hibernate.cfg.xml该文件为hibernate的主要配置,文件名默认是hibernate.cfg.xml,也可以改用其他,在调用时要注意
<?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> <!-- 1.数据库连接信息 --> <!-- MYSQL --> <!-- <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/test</property> <property name="connection.username">root</property> <property name="connection.password"></property> --> <!-- oracle --> <property name="connection.url">jdbc:oracle:thin:@192.168.8.10:1521:ora9i2</property> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="connection.username">ZC</property> <property name="connection.password">ZC</property> <!-- 2.Hibernate配置信息 --> <!-- dialect是方言,用于配置生成针对那个数据库的SQL语句 --> <!-- Hibernate提供的方言类,用于封装某种特定数据库方言 --> <!-- MYSQL --> <!-- <property name="dialect"> org.hibernate.dialect.MySQL5Dialect </property> --> <!-- ORACLE --> <property name="dialect"> org.hibernate.dialect.Oracle9Dialect </property> <!-- 确保session上下文可以正常使用 --> <property name="current_session_context_class">thread</property> <!-- 将执行sql打印到控制台,一般用于sql调优 --> <property name="show_sql">true</property> <property name="hibernate.format_sql ">true</property> <!-- 3.在配置文件中关联映射文件 --> <mapping resource="po/User.hbm.xml"/> <mapping resource="po/Emp.hbm.xml"/> </session-factory> </hibernate-configuration>
3、新建与数据库中表对应的POJO类(下面以User为例)
package po; public class User { private Integer id; //userID private String loginName; //登录名 private String password; //密码 private String name; //姓名 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
4、新建映射文件User.hbm.xml,映射文件默认与POJO类放在一起;命名规则为类名.hbm.xml
<?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> <class name="po.User" table="t_user"> <id name="id" type="java.lang.Integer" column="t_id"> <!-- generator用来指明主键生成方式 --> <!-- MYSQL为identity --> <!-- <generator class="identity"></generator> --> <!-- ORACLE 为sequence--> <generator class="sequence"> <param name="sequence">t_id</param> </generator> <!-- 不确定就写native 不论MYSQL还是ORACLE,下面的写法都不会错 --> <!-- <generator class="native"> <param name="sequence">t_id</param> </generator> --> </id> <property name="loginName" column="t_login_name"></property> <property name="password" column="t_password"></property> <property name="name" column="t_name"></property> </class> </hibernate-mapping>
5、向数据库中插入、删除、更新、查询数据
5.1 工具类
public class HibernateUtil { private static Configuration conf; private static SessionFactory factory; //conf只需要加載一次就可以了,如果放入openSession方法中效率會很低 static{ conf=new Configuration().configure(); //以前的版本获取sessionFactory的方式 //factory = conf.buildSessionFactory(); //现在获取的方式 factory = conf.buildSessionFactory(new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build()); } /** * 每个用户对应一个session,但SessionFactory是共享的 * @return */ public static Session openSession(){ return factory.openSession(); } }
5.2 测试类
public class TestHibernate { /** * 将一个对象存入数据库 */ //@Test public void test1(){ //1 创建一个User对象 User user = new User(); user.setLoginName("hibernate"); user.setName("man"); user.setPassword("12345"); Session session = HibernateUtil.openSession(); //6.获取事务 Transaction tx = session.getTransaction(); //6.1 开启事务 tx.begin(); //6.2插入数据 session.save(user); //6.3提交事务 tx.commit(); //7.关闭session session.close(); } /** *将数据库中某个值删除 */ //@Test public void test2(){ Session session = HibernateUtil.openSession(); //1 创建一个User对象 User user = new User(); user.setId(1); //2获取并开启事务 Transaction tx = session.beginTransaction(); //3删除用户 session.delete(user); //4提交事务并关闭session tx.commit(); session.close(); } /** * 更新数据 */ //@Test public void test3(){ User user = new User(); user.setId(3); user.setLoginName("struts2"); user.setName("women"); user.setPassword("123456"); Session session = HibernateUtil.openSession(); Transaction tx = session.beginTransaction(); session.update(user); tx.commit(); session.close(); } /** * 查询 */ //@Test public void test4(){ Session session = HibernateUtil.openSession(); //HQL--Hibernate提供的是面向对象的查询语句注意User要与类User名对应 Query query = session.createQuery("from User"); @SuppressWarnings("unchecked") List<User> users = query.list(); for (User user : users) { System.out.println( user.getId()+","+ user.getLoginName()+","+ user.getPassword()+","+ user.getName()); } session.close(); } }
6、SQL脚本文件
oracle
--创建序列 create sequence t_id start with 1 increment by 1; --创建user表 create table t_user( t_id number(11) not null, t_login_name varchar(50), t_password varchar(50), t_name varchar(100), primary key(t_id) );
mysql
/** * 在MYSQL中注释是#或/***/,在oracle中是-- */ #如果表存在就删除表 drop table if exists t_user; #新建user表 create table t_user( t_id int(11) not null auto_increment, t_login_name varchar(50) default null, t_password varchar(50) default null, t_name varchar(100) default null, primary key(t_id) )ENGINE=InnoDB;