Hibernate 4 初试
第一次使用Hibernate,基本还算顺利的实现了增加和查找。
版本:Hibernate4.3.8
开发环境:jdk1.7 Intellij Idea14
包结构非常简单
1、创建数据库
很简单,test数据库,包含表user_info,列:userid,username,password。
2、写配置文件
Hibernate有个配置文件*.cfg.xml,当然起其他的名字其实也一样能用,可能在自动获取配置文件的时候会出错。
HibernateConfig.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"> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <property name="connection.driver_class"> org.gjt.mm.mysql.Driver </property> <property name="connection.url"> jdbc:mysql://localhost:3306/test </property> <property name="connection.username">root</property> <property name="connection.password">123456</property> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="show_sql">true</property> <mapping resource="cfg/BUser.hbm.xml" /> </session-factory> </hibernate-configuration>
这配置文件比较容易理解,主要是配置数据库连接的信息,看一眼就明白了。cfg/BUser.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"> <!-- Mapping file autogenerated by MyEclipse - Hibernate Tools --> <hibernate-mapping> <class name="bean.BUser" table="user_info"> <id name="userid" type="java.lang.Integer"> <column name="userid" /> <generator class="increment" /> </id> <property name="username" type="java.lang.String"> <column name="username" length="30" /> </property> <property name="password" type="java.lang.String"> <column name="password" length="30" /> </property> </class> </hibernate-mapping>
说起来相当是又写了一遍实体类的意思,内容更易于理解,<generator class="increment" />这一行是id自增。
写过配置文件,下一步是创建Session,Session可以算是Hibernate的入口,4.0之后创建session的方法略有不同,代码如下:
try { Configuration config = new Configuration().configure("/cfg/HibernateConfig.cfg.xml"); ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build(); //Hibernate4.0新特性:使用ServiceRegistry创建sessionFactory sessionFactory = config.buildSessionFactory(sr); } catch(Throwable e) { throw new ExceptionInInitializerError(e); } public Session getSession(){ Session s = (Session)session.get(); if(s==null||!s.isOpen()){ s = sessionFactory.openSession(); session.set(s); } return s; }
主要是多了个ServiceRegistry,在创建的时候记得一定要调用applySettings这个方法再build(),否则会报错。
简单的添加方法:
public void add(Map<String,Object> info){ Session s = getSession(); Transaction transaction = s.beginTransaction(); BUser user = new BUser(); user.setPassword((String) info.get("password")); user.setUsername((String) info.get("username")); s.save(user); transaction.commit(); s.close(); }
其实如果图意省事,简单的写个BUser传进来也是一样的,代码还能更简洁。
下面是更简单的查询方法:
public void query(){ Session s = getSession(); Criteria criteria = s.createCriteria(BUser.class); criteria.add(Restrictions.eq("username","uname")); System.out.println(criteria.list()); }
这是使用api查询,还可以使用HQL和SQL查询,不过还没弄明白怎么用。