1.导入hibernate jar包和mysql jar包,修改配置文件hibernate.cfg.xml
<?xml version="1.0" encoding="gbk"?> <!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 name="foo"> <!-- 配置数据库信息 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="connection.url">jdbc:mysql:///hibernate1</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.username">root</property> <property name="hibernate.connection.password">123</property> <!-- 其他配置 --> <property name="hibernate.show_sql">true</property> <!-- 导入映射文件 --> <mapping resource="demo/User.hbm.xml"/> </session-factory> </hibernate-configuration>2.创建数据库中的表,根据表创建实体对象
package demo; 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() { // TODO Auto-generated method stub return "id="+id+" name="+name; } }
3.根据表和对象,配置映射关系 User.hbm.xml
<?xml version="1.0" encoding="gbk"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- This mapping demonstrates (1) a table-per-subclass mapping strategy (2) a simple component mapping (3) recursive associations withing an inheritance tree --> <hibernate-mapping package="demo"> <class name="User" table="t_user"> <id name="id" type="int" column="id" > <generator class="native"/> <!--表示自动增长--> </id> <property name="name" type="string" column="name" /> </class> </hibernate-mapping>
4.写个HIbernate小工具,方便快速得到SessionFactory,得到session
package demo; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtils { private static SessionFactory sessionFactory; //初始化SessionFactory static{ // Configuration cfg=new Configuration(); // cfg.configure();//读取默认的配置文件hibernate.cfg.xml // cfg.configure("hibernate.cfg.xml"); // sessionFactory=cfg.buildSessionFactory(); sessionFactory=new Configuration() .configure() .buildSessionFactory(); } /** * 获取全局唯一的SessionFactory * @return */ public static SessionFactory getSessionFactory() { return sessionFactory; } /** * 从全局唯一的SessionFactory打开session * @return */ public static Session openSession() { return sessionFactory.openSession(); } }
5.在UserDao中完成具体功能
package demo; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; public class UserDao { /** * 增 * @param user */ public void add(User user){ Session session=HibernateUtils.openSession(); Transaction tx=null; try{ tx=session.beginTransaction(); session.save(user); tx.commit(); } catch (Exception e) { tx.rollback(); throw new RuntimeException(e); } finally{ session.close(); } } /** * 删 * @param user */ public void delete(int id){ Session session=HibernateUtils.openSession(); Transaction tx=null; try{ tx=session.beginTransaction(); session.delete(session.get(User.class, id)); tx.commit(); } catch (Exception e) { tx.rollback(); throw new RuntimeException(e); } finally{ session.close(); } } /** * 改 * @param user */ public void update(User user){ Session session=HibernateUtils.openSession(); Transaction tx=null; try{ tx=session.beginTransaction(); session.update(user); tx.commit(); } catch (Exception e) { tx.rollback(); throw new RuntimeException(e); } finally{ session.close(); } } /** * 查 * @param id */ 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 (Exception e) { tx.rollback(); throw new RuntimeException(e); } finally{ session.close(); } } public List<User> findAll(){ Session session=HibernateUtils.openSession(); Transaction tx=null; try{ tx=session.beginTransaction(); List<User> list=session.createQuery( //使用HQL查询 "FROM User") .list();//根据条件得到list tx.commit(); return list; } catch (Exception e) { tx.rollback(); throw new RuntimeException(e); } finally{ session.close(); } } /** * 分页,返回一页的数据列表 * @param firstResult 从结果列表中的那个索引开始取数据 * @param maxResults 最多取多少条数据 * @return list+count返回的条数 */ 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(); //方式二 List<User> list=session.createQuery("FROM User") .setFirstResult(firstResult) .setMaxResults(maxResults) .list(); //查询总记录数 Long count=(Long)session.createQuery("SELECT COUNT(*) FROM User") .uniqueResult(); tx.commit(); return new QueryResult(count.intValue(),list); } catch (Exception e) { tx.rollback(); throw new RuntimeException(e); } finally{ session.close(); } } }
6.右击包名-new-Junit Test Case,也可以一一测试,对UserDao进行测试
package demo; import static org.junit.Assert.*; import java.util.List; import org.hibernate.SessionFactory; import org.junit.Test; public class UserDaoTest { private UserDao userDao=new UserDao(); @Test public void testAdd() { User user=new User(); user.setName("Lily"); userDao.add(user); } @Test public void testAdd_25() { for(int i=1;i<=25;i++){ User user=new User(); user.setName("test_"+i); userDao.add(user); } } @Test public void testDelete() { userDao.delete(1); } @Test public void testUpdate() { //从数据库中获取一条已存在的数据 User user=userDao.getById(1); user.setName("haha"); userDao.update(user); } @Test public void testGetById() { User user =userDao.getById(1); System.out.println(user); } @Test public void testFindAll() { List<User> users=userDao.findAll(); for(User user:users){ System.out.println(user); } } @Test public void testFindAllIntInt() { // QueryResult qr=userDao.findAll(0,10); //第1页,每页10条 // QueryResult qr=userDao.findAll(10,10); QueryResult qr=userDao.findAll(20,10); //显示结果 System.out.println("总记录数:"+qr.getCount()); for(Object user:qr.getList()){ System.out.println(user); } } }