泛型+hibernate封装任意数据库数据的通用方法
2015-11-26 22:46
507 查看
看点!泛型+hibernate封装任意数据库数据的通用方法
工具类:
HibernateUtil.java
dao层:
EntityDao.java
测试dao层:
EntityDaoTest.java
该测试类中产生了一个EntityDaoFactory小工具类(可以用可不用,我们可以直接实例化dao对象,这里是为了演示,给大家看看):
EntityDaoFactory.java
然后就是,在action层,调用dao层方法。,并且将数据对象放到对象域中,以便在jsp页面上可以取出来。
在jsp页面取出来。
工具类:
HibernateUtil.java
<span style="font-family:Microsoft YaHei;font-size:18px;">package cn.itcast.sh.utils; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { public static SessionFactory sessionFactory; static{ Configuration configuration = new Configuration(); configuration.configure(); sessionFactory = configuration.buildSessionFactory(); } } </span>
dao层:
EntityDao.java
<span style="font-family:Microsoft YaHei;font-size:18px;">package cn.itcast.sh.dao; import java.io.Serializable; import java.util.List; import org.hibernate.Session; import org.hibernate.Transaction; import cn.itcast.sh.utils.HibernateUtil; public class EntityDao extends HibernateUtil { /** * 查看所有数据 * @param t * @return * */ public <T> List<T> find(Class<T> t){ Session session = sessionFactory.openSession(); List<T> list = session.createQuery("from "+t.getName()).list(); session.close(); return list; } /** * 通过参数条件查询 * @param t * @param s * @return * T类型 */ public <T> T findById(Class<T> t,Serializable s){ Session session = sessionFactory.openSession(); T tt = (T)session.get(t, s); session.close(); return tt; } /** * 在任意表中添加数据 * @param t * */ public <T> void saveEntity(T t){ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session.save(t); transaction.commit(); session.close(); } /** * @param t * 修改任何表中的数据 */ public <T> void updateEntity(T t){ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session.update(t); transaction.commit(); session.close(); } /** * 根据任意表及参数条件, * 删除数据项 * @param t * @param s * */ public <T> void deleteEntity(Class<T> t,Serializable s){ Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); T tt=this.findById(t, s); if(tt!=null){ session.delete(tt); transaction.commit(); }else{ System.out.println("没有该数据,无法删除!!"); } session.close(); } } </span>
测试dao层:
EntityDaoTest.java
<span style="font-family:Microsoft YaHei;font-size:18px;">package cn.itcst.access.sh; import java.util.List; import org.junit.Test; import cn.itcast.sh.dao.EntityDao; import cn.itcast.sh.dao.EntityDaoFactory; import cn.itcast.sh.domain.User; /** * 测试Dao层类 * @author Administrator * */ public class EntityDaoTest { @Test public void findTest(){ EntityDao entityDao = new EntityDao(); List<User> userList=entityDao.find(User.class); System.out.println(userList.toString()); } @Test public void findByIdTest() throws Exception{ EntityDao entityDao = EntityDaoFactory.getInstance(EntityDao.class); // EntityDao entityDao = new EntityDao(); 也可以采用这种方式得到对象 User user = entityDao.findById(User.class, 1L); System.out.println(user.getUsername()); } @Test public void saveEntityTest() throws Exception{ EntityDao entityDao = EntityDaoFactory.getInstance(EntityDao.class); User user = new User(); user.setUsername("李三"); user.setPassword("1234567"); user.setEmail("478672492@qq.com"); user.setPhone("18772100247"); user.setSex("女"); entityDao.saveEntity(user); } @Test public void updateEntityTest() throws Exception { EntityDao entityDao = EntityDaoFactory.getInstance(EntityDao.class); User user1 = entityDao.findById(User.class, 4L); if(user1!=null){ user1.setPhone("18772100255"); entityDao.updateEntity(user1); } else{ System.out.println("没有该数据!无法更新。。。。"); } } @Test public void deleteEntityTest() throws Exception{ EntityDao entityDao = EntityDaoFactory.getInstance(EntityDao.class); entityDao.deleteEntity(User.class, 2L); } } </span>
该测试类中产生了一个EntityDaoFactory小工具类(可以用可不用,我们可以直接实例化dao对象,这里是为了演示,给大家看看):
EntityDaoFactory.java
<span style="font-family:Microsoft YaHei;font-size:18px;">package cn.itcast.sh.dao; import java.util.List; public class EntityDaoFactory { public static <T> T getInstance (Class<T> t) throws Exception{ return (T) t.newInstance(); } } </span>
然后就是,在action层,调用dao层方法。,并且将数据对象放到对象域中,以便在jsp页面上可以取出来。
package cn.itcast.sh.action; import java.util.List; import cn.itcast.sh.dao.EntityDao; import cn.itcast.sh.dao.EntityDaoFactory; import cn.itcast.sh.domain.User; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class UserAction extends ActionSupport implements ModelDriven<User> { private User model = new User(); public User getModel() { return this.model; } public String aa() throws Exception{ EntityDao entityDao = EntityDaoFactory.getInstance(EntityDao.class); List<User> userList = entityDao.find(User.class); System.out.println(userList.size()); //下面这句可以把对象放到栈底里面去(数据回显才用这个) // ActionContext.getContext().getValueStack().getRoot().add(userList); //这种方法是将对象放入对象栈中(一般选用这个) ActionContext.getContext().put("userList", userList); //这种方法也是一样的将对象放入栈顶中 // ActionContext.getContext().getValueStack().push(userList); //这种方法也是一样的将对象放入栈顶中 // ActionContext.getContext().getValueStack().getRoot().add(0, userList); //还有peek方法得到栈顶元素,pop去除栈顶元素 return "userList"; } }
在jsp页面取出来。
<body> This is my User JSP page. <br> <hr> <s:iterator value="#userList"> <s:property value="uid"/> <s:property value="username"/> <s:property value="password"/> <s:property value="phone"/> <s:property value="email"/> <br/> </s:iterator> <s:debug></s:debug> </body>
相关文章推荐
- MySQL 表栏位类型选择
- Oracle锁表处理
- oracle 解锁,修改字段名,复制数据SQL
- MongoDB中建立索引对查询性能的影响(2015-11-26 22:09:02)
- mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
- 服务器登录名、角色、数据库用户、角色、架构的关系
- mysql 一条update语句实现两个表数据合并
- SQL server 2008无法连接Local服务器的解决办法
- 数据库之SQL语言
- mysql5.6优化建议
- hibernate学习笔记(一)hibernate应用背景(为什么要用hibernate)
- MySQL学习笔记(二)
- oracle实现字符串截取,查找,替换
- MySql,Trim函数使用
- mysql字符集编码查看及修改
- oracle要求mac更高版本
- 数据库中乐观锁与悲观锁的概念
- 二进制方式快速安装MySQL数据库
- 二进制方式快速安装MySQL数据库
- 二进制方式快速安装MySQL数据库