SSH_Hibernate,基础配置和测试

110 阅读3分钟

这里写图片描述

1. 使用maven创建工作区,在src/main/resources路径下新建配置文件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">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

    <session-factory>
        <property name="dialect">
        <!--这里是方言意味着按什么数据库语言生成sql语句-->
            org.hibernate.dialect.MySQLDialect
        </property>
        <property name="connection.url">
            jdbc:mysql://localhost:3306/studyonline
        </property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="connection.driver_class">
            com.mysql.jdbc.Driver
        </property>

            <!-- 显示底层sql语句 -->
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <!-- 加载映射描述信息 -->
        <mapping resource="hbm/Note.hbm.xml" />

    </session-factory>

</hibernate-configuration>

2. 配置数据库返回值实体类型

这里写图片描述

hub.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="cn.xdl.entity.ExamPaper" table="EXAM_PAPER">
    <property name="paperid" column="PAPER_ID" type="integer"></property>
    <id name="questionid" column="QUESTION_ID" type="integer"">
        <!-- 描述主键生成策略,使用这个策略可以自动主键+1,id对应字段必须为主键 -->
        <!-- <generator class="identity">
        </generator> -->
    </id>
</class>

</hibernate-mapping>

hiberbate session工具类

package cn.xdl.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {


    public static Session getSession(){
        Configuration conf = new Configuration();
        //加载主配置文件,获取连接和表结构信息
        conf.configure("hibernate.cfg.xml");
        SessionFactory factory = conf.buildSessionFactory();
        Session session = factory.openSession();
        return session;
    }

}

实体类代码

package cn.xdl.entity;

public class ExamPaper {
    private int paperId;
    private int questionId;
    public int getPaperId() {
        return paperId;
    }
    public void setPaperId(int paperId) {
        this.paperId = paperId;
    }
    public int getQuestionId() {
        return questionId;
    }
    public void setQuestionId(int questionId) {
        this.questionId = questionId;
    }

    public ExamPaper() {
        super();
    }
    public ExamPaper(int paperId, int questionId) {
        super();
        this.paperId = paperId;
        this.questionId = questionId;
    }
    @Override
    public String toString() {
        return "ExamPaper [paperId=" + paperId + ", questionId=" + questionId + "]";
    }

}

test测试类

package ssh_01;



import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.xdl.entity.ExamPaper;
import cn.xdl.util.HibernateUtil;


public class TestDao {
    @Test
    public void test1(){
       Session session=HibernateUtil.getSession();
       System.out.println(session.get(ExamPaper.class, 2));
    }
    @Test
    public void test2(){
       Session session=HibernateUtil.getSession();
       /*创建实体类写入数据自动生成sql语句,用于增删改查*/
       ExamPaper ep = new ExamPaper();
       ep.setPaperId(123);
       ep.setQuestionId(4);
       /*开启事务控制*/
       Transaction tx = session.beginTransaction();
      /* session的方法有增加save,delete删除,update改查是get*/


      /* updata支持全部更新个单个字段更新例如:::::
                       @Test
                    public void test4(){
                        Session session = HibernateUtil.getSession();
                        Transaction tx  =session.beginTransaction();
                        Note note = new Note();
                        note.setId(25);
                        note.setLikeCount(1);
                        session.update(note);//所有字段全部更新
                        tx.commit();
                        session.close();
                    }

                    @Test
                    public void test5(){
                        Session session = HibernateUtil.getSession();
                        Transaction tx  =session.beginTransaction();
                        Note note = (Note)session.get(Note.class, 25);
                        note.setLikeCount(2);
                        session.update(note);//只更新like_count字段值
                        tx.commit();
                        session.close();
    }*/
       session.save(ep);
       /*提交事务*/
       tx.commit();
     /*  关闭资源*/
       session.close();
    }


    /*查询全部信息值
     * 直接写from就可以
     * query.list方法生成list集合*/
    @Test
    public void test3(){
        Session session=HibernateUtil.getSession();
        Query query = session.createQuery("from ExamPaper");
        List list =query.list();
        System.out.println(list);
        session.close();
    }


    /*where条件查询*/
    @Test
    public void test4(){
        Session session=HibernateUtil.getSession();
        Query query = session.createQuery("from ExamPaper where questionId=?");
        /*添加where条件*/
        query.setInteger(0, 1);
        List list = query.list();
        System.out.println(list);
        session.close();
    }


    /*查询有多少条语句,单一查询返回值*/
    @Test
    public void test5(){
        Session session = HibernateUtil.getSession();
        Query query = session.createQuery("select count(*) from ExamPaper");
        /*返回单行单列数据*/
        Long l  = (Long)query.uniqueResult();
        System.out.println(l);
        session.close();
    }


    @Test
    public void test6(){
        Session session=HibernateUtil.getSession();
        Query query = session.createQuery("from ExamPaper");
        query.setFirstResult(0);//设置抓取起点
        query.setMaxResults(1);//设置抓取多少条
        List list =query.list();
        System.out.println(list);
        session.close();    
    }



    @Test
    public void test7(){
        Session session=HibernateUtil.getSession();
        /*根据参数指定的实体类,
        *去数据库中查询实体类中指定的字段并且自动封装
        *需要在配置文件中配置实体类和字段的关系*/
        Criteria ct = session.createCriteria(ExamPaper.class);



    /*  
        其中还可以添加数据库查询语句的 过滤条件
    *ct.add(Restrictions.gt("publishTime", Date.valueOf("2017-08-01")));
    *调用add方法可以像查询语句中添加条件,参数中需要指定
    *调用静态方法,Restrictions类中的gt大于(“实体类属性名”,判断值)eq(等于)
    *
    *where 中的or
    *LogicalExpression ex1 = Restrictions.or(
            Restrictions.gt("实体类属性名", 判断值),
            Restrictions.eq("实体类属性名", 值));
    *ct.add(ex1);
    *
    *根据指定的字段排序
    *ct.addOrder(Order.desc("实体类属性名"));
     */
        List list = ct.list();
        System.out.println(list);
        session.close();
    }


    @Test
    public void test8(){
        Session session = HibernateUtil.getSession();
        String sql = "select * from EXAM_PAPER";
        SQLQuery sqlQuery = session.createSQLQuery(sql);

        /*设置分页查询*/
        sqlQuery.setFirstResult(0);
        sqlQuery.setMaxResults(2);


        sqlQuery.addEntity(ExamPaper.class);//指定将一行记录封装成Note,根据配置文件中的映射关系
                                                                  //默认一行记录采用Object[]类型封装
        List<ExamPaper> list = sqlQuery.list();


        for(ExamPaper obj:list){
            System.out.println(obj.getPaperId()+" "+obj.getQuestionId());
        }
        session.close();
    }


}

采用注解标记实现

映射信息更改,不再使用result和xml,使用class和实体URl

因为使用class指定路径所以不需要开始扫描

这里写图片描述

实体类注解

package cn.xdl.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
/*指定表*/
@Table(name="EXAM_PAPER")
public class ExamPaper {
    /*给属性指定字段建立关系*/
    @Column(name="PAPER_ID")
    private int paperId;
    @Id
    /*设置为主键每次不填写数据时递增加一*/
    /*@GeneratedValue(strategy=GenerationType.IDENTITY)*/
    @Column(name="QUESTION_ID")
    private int questionId;
    public int getPaperId() {
        return paperId;
    }
    public void setPaperId(int paperId) {
        this.paperId = paperId;
    }
    public int getQuestionId() {
        return questionId;
    }
    public void setQuestionId(int questionId) {
        this.questionId = questionId;
    }

    public ExamPaper() {
        super();
    }
    public ExamPaper(int paperId, int questionId) {
        super();
        this.paperId = paperId;
        this.questionId = questionId;
    }
    @Override
    public String toString() {
        return "ExamPaper [paperId=" + paperId + ", questionId=" + questionId + "]";
    }

}