hibernate初接触

hibernate 是一个数据持久层的轻量级框架,它对 jdbc 进行了进一步的封装, 在使用上较 jdbc 更为简易;

首先, 看一下 hibernate 的配置:

1、引入

maven 引入        

 

     <dependency>            
         <groupId>hibernate</groupId>                    
       <artifactId>hibernate</artifactId> <version>3.0.5</version> </dependency>      <!-- 事物管理 --> <dependency> <groupId>javax.transaction</groupId> <artifactId>jta</artifactId> <version>1.1</version> </dependency>      <!-- 解析 XML 文件使用 --> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency>      <!-- 打日志用 --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency>      <!-- 连接数据库 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.0.5</version> </dependency>

 

 

 

2、配置 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>

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

        <property name="hibernate.connection.url">jdbc:mysql://xxxxxx/abcd?useUnicode=true&amp;characterEncoding=utf-8</property>

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

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

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

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

    </session-factory>



</hibernate-configuration>

 

3、定义一个与数据库表字段映射的实体类

沿用前例

@Data
@NoArgsConstructor
@AllArgsConstructor
public class SurveyQuest {
    public int quest_id;
    public int scene_id;
    public int survey_id;
    public String quest_name;
    public int version;
    public int quest_seq;
    public String quest_type;
    public String required;
    public String create_time;

}

 

4、定义映射文件 surveyQuest.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="com.study.hugy.modal.SurveyQuest" table="survey_quest">
        <id name="quest_id" type="int" column="quest_id"/>
        <property name="scene_id" type="int" column="scene_id"/>
        <property name="survey_id" type="int"/>
        <property name="quest_name" type="java.lang.String"/>
        <property name="version" type="int"/>
        <property name="quest_seq" type="int"/>
        <property name="required" type="java.lang.String"/>
        <property name="create_time" type="java.lang.String"/>
    </class>
</hibernate-mapping>

 

5、添加映射文件到 hibernate.cfg.xml 中

<hibernate-configuration>

    <session-factory>
           <mapping resource="surveyQuest.hbm.xml"/>
    </session-factory>
    
</hibernate-configuration>

 

做完这些, 准备工作就做完了,下面总结一下几种用法。

 

1、简单的增删改查

Configuration cfg = new Configuration().configure();
SessionFactory  factory = cfg.buildSessionFactory();

Session session = null;
Transation transation = null;

try {
    session = factory.openSession();
    transation = session.beginTransation();
    // todo 这里代码不一样
    transation.commit();
} catch( Exception e) {
    transation.rollback();
} finally {
    if (session != null && session.isopen()) {
         session.close();
         factory.close();   
    }
}

 

查询: 根据 映射文件 中的 id 属性作为条件进行查询

SurveyQuest  bean = session.get(SurveyQuest.class, id);

增加:

SurveyQuest bean = new SurveyQuest();
bean.setId(12345);
...
session.save(bean);

删除:

SurveyQuest bean = new SurveyQuest();
bean.setId(12345);
session.delete(bean);

更新:

...
session.update(bean);

可以看到,简单增删改查都是以 映射文件 中配置的 id 属性进行查询, 且我们并不需要写入什么 select、insert、update、delete 等;

 

2、根据 hql 语句进行查询

查询:

List<SurveyQuest> list = session.createQuery("SELECT quest_id FROM SurveyQuest").list();
List<SurveyQuest> list = session.createQuery("SELECT quest_id FROM SurveyQuest WHERE quest_id = ?").setParameter(0, 101).list();

List<SurveyQuest> list = session.createQuery("SELECT quest_id FROM SurveyQuest WHERE quest_id = :questId").setParameter("questId", 101).list();

删除、修改、增加:

session.createQuery("").executeUpdate();

代码格式都是如上所示,只是 HQL 的差别

INSERT INTO SurveyQuest (quest_id, quest_name, survey_id)
VALUES (123, "456", 789)

UPDATE SurveyQuest SET quest_name = "你好啊,hibernate" 
WHERE quest_id = ?

DELETE FROM SurveyQuest WHERE quest_id = ?

带入参数的方法仍然是 setParameter() ;

如果要加入多个参数,调用多次 setParameter() 即可, 亦或者直接动态的拼接完 hql 在放在 session 中执行;

 

3、通过 xml 文件配置查询

在 映射文件 中添加 hql 语句

<query name = "selectAll">
    SELECT quest_id FROM SurveyQuest WHERE quest_id = ?
</query>

使用时调用 getNamedQuery("selectAll")

session.getNamedQuery("selectAll").setParameter(0, 121).list()

 

 

PS: hql 中表的名称 是在映射文件中对应类 的类名, 并不是原表的名称; 

 

番外, hql 中取查询结果的多少到多少条(分页), 使用的 api 是 setFirstResult(int start) 、 setMaxResults(Int count)

session.createQuery("SELECT quest_id FROM SurveyQuest").setFirstResult(3).setMaxResults(2).list()

 

posted on 2018-03-12 17:53  秦家十月  阅读(184)  评论(0编辑  收藏  举报

导航