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 + "]";
}
}