Hibernate快速使用

1.项目结构:


2.代码:

1.User.java:bean
package com.hibernate.javabean;
public class User {
	private int id;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "[User:id="+id+",name="+name+"]";
	}
}

2.HibernateUtils.java:hibernate工具类,获取配置,获取session
package com.hibernate.HibernateUtils;

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

public class HibernateUtils {

	private static SessionFactory sessionFactory;
	static{
		sessionFactory = new Configuration()
				.configure("hibernate.cfg.xml")
				.buildSessionFactory();
	}
	public static SessionFactory getSessionFactory(){
		return sessionFactory;
	}
	public static Session openSession(){
		return sessionFactory.openSession();
	}
}

3.User.hbm.xml:user bean的数据库配置文件 ORM
<?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="com.hibernate.javabean.User" table="t_user">
		<id name="id" type="int" column="id">
			<!-- 主键自动创建模式 native -->
			<generator class="native"></generator>
		</id>
		<property name="name" type="string" column="name" length="20" not-null="true" /> 
	</class>
</hibernate-mapping>

4.hibernate.cfg.xml:hibernate配置文件
<?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. 配置数据库信息 -->
       		 <!-- 方言(连接的数据库类型) -->
        	<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        	
        	<property name="connection.url">jdbc:mysql:///hibernate_20160926?useUnicode=true&characterEncoding=UTF-8</property>
        	<!-- <property name="connection.url">
        		<![CDATA[jdbc:mysql:///hibernate_20160926?useUnicode=true&characterEncoding=UTF-8]]>
        	</property> -->
        	<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
       		 <property name="connection.username">root</property>
       		 <property name="connection.password">root</property>
        
        	<!-- 2. 其他配置 -->
       		 <!-- 显示生成的SQL语句 -->
    		  <property name="hibernate.show_sql">true</property>
		   <!-- 自动建表,每次更新 -->
    		  <property name="hbm2ddl.auto">update</property>
      		  <!-- 3. 导入映射文件 -->
     		   <mapping resource="com/hibernate/javabean/User.hbm.xml" />
	</session-factory>
</hibernate-configuration>

5.QueryResult.java:查询返回值需要用到的类
package com.hibernate.javabean;

import java.util.List;

public class QueryResult {
	//查询数目
	private int count;
	//查询内容集合
	private List list;
	public QueryResult(int count,List list) {
		this.count = count;
		this.list = list;
	}
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}
	public List getList() {
		return list;
	}
	public void setList(List list) {
		this.list = list;
	}
	
}

6.UserDao.java:操作类,CRUD方法
package com.hibernate.dao;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.hibernate.HibernateUtils.HibernateUtils;
import com.hibernate.javabean.QueryResult;
import com.hibernate.javabean.User;

public class UserDao {

    /*
     * 保存
     */
    public void save(User user) {
        Session session = HibernateUtils.openSession();
        try {
            Transaction tx = session.beginTransaction(); // 开启事务
            session.save(user);
            tx.commit(); // 提交事务
        } catch (RuntimeException e) {
            session.getTransaction().rollback(); // 回滚事务
            throw e;
        } finally {
            session.close(); // 关闭session
        }
    }

    /*
     * 更新
     */
    public void update(User user) {
        Session session = HibernateUtils.openSession();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();

            session.update(user);// 操作

            tx.commit();
        } catch (RuntimeException e) {
            tx.rollback();
            throw e;
        } finally {
            session.close();
        }
    }

    /*
     * 删除
     */
    public void delete(int id) {
        Session session = HibernateUtils.openSession();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();

            Object user = session.get(User.class, id); // 要先获取到这个对象
            session.delete(user); // 删除的是实体对象

            tx.commit();
        } catch (RuntimeException e) {
            tx.rollback();
            throw e;
        } finally {
            session.close();
        }
    }

    /*
     * 根据id查询一个User数据
     */
    public User getById(int id) {
        Session session = HibernateUtils.openSession();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
            User user = (User) session.get(User.class, id);// 操作
            tx.commit();
            return user;
        } catch (RuntimeException e) {
            tx.rollback();
            throw e;
        } finally {
            session.close();
        }
    }

    /*
     * 查询所有
     */
    public List<User> findAll() {
        Session session = HibernateUtils.openSession();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();

            // 方式一:使用HQL语句
            List<User> list = session.createQuery("FROM User").list(); // 使用HQL查询

            tx.commit();
            return list;
        } catch (RuntimeException e) {
            tx.rollback();
            throw e;
        } finally {
            session.close();
        }
    }

    /**
     * 分页的查询数据列表
     * @param firstResult 从结果列表中的哪个索引开始取数据
     * @param maxResults 最多取多少条数据
     * @return 一页的数据列表
     */
    @SuppressWarnings("unchecked")
    public QueryResult findAll(int firstResult, int maxResults) {
        Session session = HibernateUtils.openSession();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
            // 查询一页的数据列表
            // 方式一:
            // Query query = session.createQuery("FROM User");
            // query.setFirstResult(firstResult);
            // query.setMaxResults(maxResults);
            // List<User> list = query.list(); // 使用HQL查询

            // 方式二:方法链
            List<User> list = session.createQuery( //
                    "FROM User") //
                    .setFirstResult(firstResult) // 
                    .setMaxResults(maxResults) //
                    .list();

            // 查询总记录数
            // session.createQuery("SELECT COUNT(*) FROM User").list().get(0);
            // Long count = (Long) session.createQuery("SELECT COUNT(*) FROM User").uniqueResult();
            Long count = (Long) session.createQuery( //
                    "SELECT COUNT(*) FROM User") //
                    .uniqueResult();
            tx.commit();

            // 返回结果
            return new QueryResult(count.intValue(), list);
        } catch (RuntimeException e) {
            tx.rollback();
            throw e;
        } finally {
            session.close();
        }
    }

}
7.测试类:UserDaoTest.java :测试结果:
package com.hibernate.dao;
import java.util.List;

import org.junit.Test;

import com.hibernate.javabean.QueryResult;
import com.hibernate.javabean.User;

public class UserDaoTest {

    private UserDao userDao = new UserDao();

    @Test
    public void testSave_1() {
        User user = new User();
        user.setName("张三");

        // 保存
        userDao.save(user);
    }

    @Test
    public void testGetById() {
        User user = userDao.getById(1);
        System.out.println(user);
    }

    @Test
    public void testUpdate() {
        // 从数据库中获取一条存在的数据
        User user = userDao.getById(1);
        user.setName("李四");
        // 更新
        userDao.update(user);
    }

    @Test
    public void testDelete() {
        userDao.delete(1);
    }

    // -------------------------

    @Test
    public void testSave_25() {
        for (int i = 1; i <= 25; i++) {
            User user = new User();
            user.setName("test_" + i);

            userDao.save(user); // 保存
        }
    }
以上结果不展示,获取list user:
@Test
    public void testFindAll() {
        List<User> list = userDao.findAll();
        for (User user : list) {
            System.out.println(user);
        }
    }


 @Test
    public void testFindAllIntInt() {
        // 查询
        // QueryResult qr = userDao.findAll(0, 10); // 第1页,每页10条
        // QueryResult qr = userDao.findAll(10, 10); // 第2页,每页10条
        QueryResult qr = userDao.findAll(20, 10); // 第3页,每页10条

        // 显示结果
        System.out.println("总记录数:" + qr.getCount());
        for (User user : (List<User>) qr.getList()) {
            System.out.println(user);
        }

    }


3.总结:

1.配置Javabean的  xxx.hbm.xml
2.配置hibernate.cfg.xml
3.dao层获取session操作数据。

4.更多hibernate详细:






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值