6月4日,晴天。"晴日暖风生麦气,绿阴幽草胜花时。"
“道”是只有中国人才懂得并孜孜以求的特殊的宇宙存在感的体验。全世界只有中文才能阐释“道”的全部涵义。然而所谓阐释,并不重在定义,更多的还是感受。 “道”既在“虚无”之内,又超越了“虚无”,成为中国文化最平常但又最玄妙的一种境界。
老庄认为:道是宇宙的本体,即是宇宙万物的老祖宗。
老外认为:Tao is the source of all programs.
在程序设计里面,道被狭隘的变成了DAO模式-意在使表示层与业务逻辑层的代码进一步分离。
一般的做法是:设计一个DAO接口,数据的插入,修改,删除,查询等操作都是在这个进行,是实现具体事务的一个接口。再设计一个DAO接口的实现类,一般把它叫DAOImp,它把对数据的操作具体化。
下面是一个使用DAO接口的,完整的运用Hibernate完成增、删、改、查的综合示例。
1、建立Java EE Project( 使用hibernate 3.6.10)
jar包下载及导入,见第十九天 慵懒的投射在JDBC上的暖阳 —Hibernate的使用(一)
2、创建MySQL数据库
数据库表创建,见第十九天 慵懒的投射在JDBC上的暖阳 —Hibernate的使用(一)
3、创建DAO接口UserInfoDao.java
package edu.eurasia.dao; import edu.eurasia.model.UserInfo; public interface UserInfoDao { public void Save(UserInfo userinfo); public void Update(UserInfo userinfo); public void delete(UserInfo userinfo); public void Get(int id); public void Load(int id); public void QueryAll(String hql); }4、创建DAO的实现类UserInfoDaoImpl.java
package edu.eurasia.dao.implment; import java.util.List; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.Transaction; import edu.eurasia.dao.UserInfoDao; import edu.eurasia.model.UserInfo; import edu.eurasia.utils.HibernateUtil; public class UserInfoDaoImpl implements UserInfoDao { @Override public void Save(UserInfo userinfo) { Session session = HibernateUtil.getSession(); Transaction tx = null; try { // 开始事务 tx = session.beginTransaction(); System.out.println("开始添加数据到数据库……"); // 保存数据到数据库 session.save(userinfo); // 结束事务 tx.commit(); tx = null; System.out.println("恭喜你,第一个添加程序运行成功!"); } catch (HibernateException e) { e.printStackTrace(); if (tx != null) { tx.rollback(); } } finally { HibernateUtil.close(session); } } @Override public void Update(UserInfo userinfo) { Session session = HibernateUtil.getSession(); Transaction tx = null; try { // 开始事务 tx = session.beginTransaction(); System.out.println("开始更新数据……"); // 保存数据到数据库 session.update(userinfo); // 结束事务 tx.commit(); tx = null; System.out.println("恭喜你,第一个更新程序运行成功!"); } catch (HibernateException e) { e.printStackTrace(); if (tx != null) { tx.rollback(); } } finally { HibernateUtil.close(session); } } @Override public void delete(UserInfo userinfo) { Session session = HibernateUtil.getSession(); Transaction tx = null; try { // 开始事务 tx = session.beginTransaction(); System.out.println("开始删除数据……"); // 保存数据到数据库 session.delete(userinfo); // 结束事务 tx.commit(); tx = null; System.out.println("恭喜你,第一个删除程序运行成功!"); } catch (HibernateException e) { e.printStackTrace(); if (tx != null) { tx.rollback(); } } finally { HibernateUtil.close(session); } } @Override public void Get(int id) { Session session = HibernateUtil.getSession(); System.out.println("开始使用get查询数据……"); // 保存数据到数据库 UserInfo userinfo = (UserInfo) session.get(UserInfo.class, id); if (userinfo != null) { System.out.println("UserId:" + userinfo.getId() + " Username:" + userinfo.getUsername() + " Password:" + userinfo.getPassword()); } else { System.out.println("id不存在!!"); } HibernateUtil.close(session); } @Override public void Load(int id) { Session session = HibernateUtil.getSession(); System.out.println("开始使用load查询数据……"); // 保存数据到数据库 UserInfo userinfo = (UserInfo) session.load(UserInfo.class, id); if (userinfo != null) { System.out.println("UserId:" + userinfo.getId() + " Username:" + userinfo.getUsername() + " Password:" + userinfo.getPassword()); } else { System.out.println("id不存在!!"); } HibernateUtil.close(session); } @Override public void QueryAll(String hql) { Session session = HibernateUtil.getSession(); List<UserInfo> users = session.createQuery(hql).list(); for (UserInfo userinfo : users) { System.out.println(userinfo.getUsername()); } HibernateUtil.close(session); System.out.println("恭喜你,第一个全部查询程序运行成功!"); } }5、创建POJO类UserInfo
package edu.eurasia.model; public class UserInfo { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
6、编写对象关系映射文件UserInfo.hbm.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="edu.eurasia.model.UserInfo" table="userinfo"> <!--类对象的主键和表的主键的关联--> <id name="id" type="integer"> <column name="id" /> <!--指明主键的自增长类型--> <generator class="identity"/> </id> <!--以下为普通字段的关联--> <property name="username" type="string"> <column name="username" length="100" /> </property> <property name="password" type="string"> <column name="password" length="100" /> </property> </class> </hibernate-mapping>
7、添加hibernate.cfg.xml配置文件
<?xml version='1.0' encoding='gb2312'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!--配置数据库驱动--> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!--配置数据库网络连接的url--> <property name="hibernate.connection.url">jdbc:mysql://localhost/hib</property> <!--配置数据库网络连接的用户名,默认一般为root--> <property name="hibernate.connection.username">root</property> <!--配置数据库网络连接的密码--> <property name="hibernate.connection.password">root</property> <!--配置数据库网络连接池的大小--> <property name="hibernate.connection.pool.size">20</property> <!--后台是否显示sql,开发时为true,运行时为false--> <property name="hibernate.show_sql">true</property> <!-- 设置JDBC的隔离级别--> <property name="hibernate.connection.isolation">2</property> <property name="hibernate.format_sql">true</property> <property name="jdbc.fetch_size">50</property> <property name="jdbc.batch_size">25</property> <property name="jdbc.use_scrollable_resultset">false</property> <property name="connection.useUnicode">true</property> <!--编码方式,最好是utf-8,用gb2312有的字符不全--> <property name="connection.characterEncoding">UTF-8</property> <!--数据库方言,每个数据库都有方言,hibernate已经为大多数数据库指明了方言--> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <mapping resource="edu/eurasia/model/UserInfo.hbm.xml" /> </session-factory> </hibernate-configuration>8、公共类文件HibernateUtil.java
package edu.eurasia.utils; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { public static Session getSession() { SessionFactory sessions = new Configuration().configure() .buildSessionFactory(); Session session = sessions.openSession(); return session; } public static void close(Session session){ if(session!=null&&session.isOpen()){ session.close(); } } }9、建立测试类HibTest.java
package edi.eurasia.test; import org.junit.Test; import edu.eurasia.dao.UserInfoDao; import edu.eurasia.dao.implment.UserInfoDaoImpl; import edu.eurasia.model.UserInfo; public class HibTest { private UserInfoDao userinfodao = new UserInfoDaoImpl(); @Test public void testSave() { UserInfo userinfo = new UserInfo(); userinfo.setUsername("李可染"); userinfo.setPassword("123"); userinfodao.Save(userinfo); } @Test public void testUpdate() { UserInfo userinfo = new UserInfo(); userinfo.setId(14); userinfo.setUsername("李可染2"); userinfo.setPassword("123"); userinfodao.Update(userinfo); } @Test public void testDelete() { UserInfo userinfo = new UserInfo(); userinfo.setId(14); userinfodao.delete(userinfo); } //@Test public void testGet() { userinfodao.Get(21); } @Test public void testLoad() { userinfodao.Load(1); } @Test public void testQueryAll() { //userinfodao.QueryAll("from UserInfo "); userinfodao.QueryAll("select u from UserInfo u"); } }
10、运行测试结果
工程结构图如下: