Hibernate实现增删改查
- 格式:docx
- 大小:50.42 KB
- 文档页数:16
Hibernate4.1实现单表CRUD 学习JavaWeb的人,我想对Hibernate都不陌生,是一个比较流行的ORM框架,ORM 简称对象关系映射,那你用此框架实现过单表的CRUD吗;我们来试试利用hibernate实现单表的CRUD,也就是我们所说的增删改查;·打开我们熟悉常用的开发工具myeclipse;·新建项目Hibernate4Project·添加Hibernate开发支持,很多人使用的手动配置,其实也是可以自动配置的,右键项目Myeclipse→Project Facets→Install Hibernate Facet 表示添加Hibernate开发支持,不用你在很多JAR包中寻找了;·然后选择4.1版本,下面默认然后下一步Next;·下面按照如图配置即可,在java package那一个文本框之中,如果你没有建立包的话,就点击后面的New,然后继续NEXT;·下面我们要选择我们要操作的数据源,前提你一定要配置好数据源,如果选择,如果你没配置DB Driver的话,是没有其他选项的,点击Next·下面就是选择插件的了,如果你不需要什么插件,就选择核心包即可,core包;·点击finish即可,现在hibernate的开发支持就OK了;·如果你没有配置数据源可以看下此项选择Window→Other·下面选择要打开的视图DB Browser·你会看到下面的一个视图被打开了,应该在右下角显示的;·新建一个你要连接的数据库,空白出点击右键→new·在下面这个界面中配置就OK了;Driver template 选择你要连接的数据库类型;Driver name 自定义一个名称即可;Connection URL 数据库连接地址;User name 数据库用户名;Password 密码Drive JAR 数据库驱动包;Driver classname 选择一个常用的驱动Save password 勾选此项,然后点击Test Driver最后保存即可;·然后我们继续我们的单表CRUD实现;当我们添加好hibernate支持的时候,myeclipse会自动生成一个HibernateSessionFactory.java的类,这个类就是我们在用的数据库连接类,在hibernate之中,一个数据库连接叫做一个session,可以看下下面的这个类,我添加了一些注释;package cn.oracle.dbc;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;/*** 数据库连接类* @author congz_000**/public class HibernateSessionFactory {/*** ThreadLocal 保存数据库连接;*/private static final ThreadLocal<Session> threadLocal = newThreadLocal<Session>();/*** 连接工厂*/private static org.hibernate.SessionFactory sessionFactory;private static Configuration configuration = new Configuration();private static ServiceRegistry serviceRegistry;static {try {configuration.configure();serviceRegistry = newServiceRegistryBuilder().applySettings(configuration.getProperties()).buildS erviceRegistry();sessionFactory =configuration.buildSessionFactory(serviceRegistry);} catch (Exception e) {System.err.println("%%%% Error Creating SessionFactory %%%%");e.printStackTrace();}}/*** 无参构造方法*/private HibernateSessionFactory() {}/*** 静态方法,我们用来得到数据库的连接;* @return返回一个数据库连接;* @throws HibernateException*/public static Session getSession() throws HibernateException {Session session = (Session) threadLocal.get();if (session == null || !session.isOpen()) {if (sessionFactory == null) {rebuildSessionFactory();}session = (sessionFactory != null) ? sessionFactory.openSession(): null;threadLocal.set(session);}return session;}/*** 从名称可以看到重建连接工厂;*/public static void rebuildSessionFactory() {try {configuration.configure();serviceRegistry = newServiceRegistryBuilder().applySettings(configuration.getProperties()).buildS erviceRegistry();sessionFactory =configuration.buildSessionFactory(serviceRegistry);} catch (Exception e) {System.err.println("%%%% Error Creating SessionFactory %%%%");e.printStackTrace();}}/*** 关闭数据库连接,静态方法,可以类名称直接调用;* @throws HibernateException*/public static void closeSession() throws HibernateException {Session session = (Session) threadLocal.get();threadLocal.set(null);if (session != null) {session.close();}}/*** 建立数据库连接工厂;* @return*/public static org.hibernate.SessionFactory getSessionFactory() { return sessionFactory;}public static Configuration getConfiguration() {return configuration;}}·我们还需要映射表,我们拿emp表来做,打开你创建的数据源,然后我们找到要操作的表,右键Hibernate Reverse Engineering·选择创建的pojo的位置,和一些自动生成配置,选择NEXT;·下面选择主键的生成类型ID Generator,选择assigned 表示指派,也就是自定义;·下一步同样,选择assigned ,其他不做修改,点击Finish;·等一会就会生成一个简单java 类和一个Emp.hbm.xml文件,如果此表中有关系字段的话,删除即可;Emp.javapackage cn.oracle.pojo;import java.util.Date;@SuppressWarnings("serial")public class Emp implements java.io.Serializable {private Short empno;private String ename;private String job;private Short mgr;private Date hiredate;private Double sal;private Double comm;}Emp.hbm.xml<?xml version="1.0"encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN" "/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="cn.oracle.pojo.Emp"table="EMP"schema="SCOTT">→对应的数据表和用户<id name="empno"type="ng.Short">→字段empno的数据类型及对应的列名称和允许的大小,及主键的指派类型;<column name="EMPNO"precision="4"scale="0"/><generator class="assigned"></generator></id><property name="ename"type="ng.String">→对应的列名称和精度<column name="ENAME"length="10"/></property><property name="job"type="ng.String">→job字段对象的列和精度<column name="JOB"length="9"/></property><property name="mgr"type="ng.Short"><column name="MGR"precision="4"scale="0"/></property><property name="hiredate"type="java.util.Date"><column name="HIREDATE"length="7"/></property><property name="sal"type="ng.Double"><column name="SAL"precision="7"/></property><property name="comm"type="ng.Double"><column name="COMM"precision="7"/></property></class></hibernate-mapping>·以上就是自动生成,需要简单修改的一部分,下面的就需要自己编写了,不过和从头到尾不用工具实现的CRUD相对简单多了;·编写DAO接口,首先我们可以编写一个公共的接口IDAO.javaIDAO.javapackage cn.oracle.dao;import java.util.List;/*** 一个公共接口,实现单表的CRUD加分页的操作;* @author congz_000** @param<K>主键类型* @param<V>简单java类*/public interface IDAO<K,V> {/*** 实现数据的增加* @param vo 简单java类对象;* @return返回boolean值,返回true表示增加成功,false表示添加失败!* @throws Exception*/public boolean doCreat(V vo)throws Exception;/*** 删除一条数据;* @param id 参数是删除数据的主键类型;* @return返回boolean数据类型,true表示删除成功,false表示删除失败;* @throws Exception*/public boolean doRemove(K id)throws Exception;/*** 修改一条数据;* @param vo 参数为简单java类对象;* @return返回boolean 类型,true表示修改成功,false表示修改失败;* @throws Exception*/public boolean doUpdate(V vo)throws Exception;/*** 查询一条数据* @param id 根据参数id查询数据;* @return返回一个简单java类对象;* @throws Exception*/public V findById(K id)throws Exception;/*** 查询表中所有数据;* @return返回一个List集合,里面是每条数据对应的简单java类对象;* @throws Exception*/public List<V> list()throws Exception;/*** 模糊查询* @param column 要模糊查询的列;* @param keyWord 模糊查询的关键字;* @param currentPage 当前页数;* @param lineSize 每页显示数据条目数;* @return返回一个list集合;* @throws Exception*/public List<V> list(String column,String keyWord,IntegercurrentPage,Integer lineSize)throws Exception;/*** 统计模糊查询的条目数;* @param column 要模糊查询的列;* @param keyWord 要模糊查询的关键字;* @return* @throws Exception*/public Integer getAllCount(String column,String keyWord)throws Exception; }IEmpDAO.java 直接继承IDAO即可;package cn.oracle.dao;import cn.oracle.pojo.Emp;public interface IEmpDAO extends IDAO<Short, Emp> {}·IEmpDAO接口的实现类,EmpDAOImpl.javapackage cn.oracle.dao.impl;import java.util.List;import org.hibernate.Query;import cn.oracle.dao.IEmpDAO;import cn.oracle.dbc.HibernateSessionFactory;import cn.oracle.pojo.Emp;public class EmpDAOImpl implements IEmpDAO {@Overridepublic boolean doCreat(Emp vo) throws Exception {String hql="INSERT INTOemp(empno,ename,job,hiredate,sal,comm)VALUES(?,?,?,?,?,?)";Query query=HibernateSessionFactory.getSession().createQuery(hql);query.setShort(0, vo.getEmpno());query.setString(1,vo.getEname());query.setString(2, vo.getJob());query.setDate(3, vo.getHiredate());query.setDouble(4,vo.getSal());query.setDouble(5, vo.getComm());return query.executeUpdate()==1;}@Overridepublic boolean doRemove(Short id) throws Exception {String hql="DELETE FROM emp AS n WHERE n.empno=?";Query query=HibernateSessionFactory.getSession().createQuery(hql);query.setShort(0, id);return query.executeUpdate()>0;}@Overridepublic boolean doUpdate(Emp vo) throws Exception {String hql="UPDATE emp AS n SETn.ename=?,n.job=?,n.hiredate=?,n.sal=?,m=? WHERE n.empno=?";Query query=HibernateSessionFactory.getSession().createQuery(hql);query.setShort(1, vo.getEmpno());query.setString(2,vo.getEname());query.setString(3, vo.getJob());query.setDate(4, vo.getHiredate());query.setDouble(5,vo.getSal());query.setDouble(0, vo.getComm());return query.executeUpdate()>0;}@Overridepublic Emp findById(Short id) throws Exception {return (Emp) HibernateSessionFactory.getSession().get(Emp.class,id);}@SuppressWarnings("unchecked")@Overridepublic List<Emp> list() throws Exception {String hql="FROM emp AS n";Query query=HibernateSessionFactory.getSession().createQuery(hql);List<Emp> all=query.list();return all;}@Overridepublic List<Emp> list(String column, String keyWord, Integer currentPage, Integer lineSize) throws Exception {String hql=" SELECT empno,ename,job,hiredate,sal,comm "+ " FROM "+ " (SELECT empno,ename,job,hiredate,sal,comm,ROWNUM rn WHERE "+column+" LIKE ? ROWNUM<?)temp "+ " WHERE temp.rn>? ";Query query=HibernateSessionFactory.getSession().createQuery(hql);query.setString(0, "%"+keyWord+"%");query.setInteger(1, currentPage*lineSize);query.setInteger(2,(currentPage-1)*lineSize);@SuppressWarnings("unchecked")List<Emp> all=query.list();return all;}@Overridepublic Integer getAllCount(String column, String keyWord) throws Exception {String hql="SELCT COUNT(empno) FROM emp WHERE "+column+" LIKE ?";Query query=HibernateSessionFactory.getSession().createQuery(hql);query.setString(0, "%"+keyWord+"%");return query.executeUpdate();}}·建立工厂类DAOFactory.javapackage cn.oracle.factory;import cn.oracle.dao.IEmpDAO;import cn.oracle.dao.impl.EmpDAOImpl;public class DAOFactory {public static IEmpDAO getIEmpDAOInstance(){return new EmpDAOImpl();}}建立IEmpService.java接口;package cn.oracle.service;import java.util.List;import java.util.Map;import cn.oracle.pojo.Emp;public interface IEmpService {public boolean insert(Emp vo)throws Exception;public boolean update(Emp vo)throws Exception;public boolean delete(int id)throws Exception;public Emp get(int id)throws Exception;public List<Emp> list()throws Exception;public Map<String,Object> list(String column,String keyWord,Integer currentPage,Integer lineSize)throws Exception;}·建立接口IEmpService.java的实现类,EmpServiceImpl.javapackage cn.oracle.service.impl;import java.util.HashMap;import java.util.List;import java.util.Map;import cn.oracle.dbc.HibernateSessionFactory;import cn.oracle.factory.DAOFactory;import cn.oracle.pojo.Emp;import cn.oracle.service.IEmpService;public class EmpServiceImpl implements IEmpService {@Overridepublic boolean insert(Emp vo) throws Exception {try{return DAOFactory.getIEmpDAOInstance().doCreat(vo);}catch(Exception e){throw e;}finally{HibernateSessionFactory.getSession().beginTransaction().commit();HibernateSessionFactory.closeSession();}}@Overridepublic boolean update(Emp vo) throws Exception {try{return DAOFactory.getIEmpDAOInstance().doUpdate(vo);}catch(Exception e){throw e;}finally{HibernateSessionFactory.getSession().beginTransaction().commit();HibernateSessionFactory.closeSession();}}@Overridepublic boolean delete(Short id) throws Exception {try{return DAOFactory.getIEmpDAOInstance().doRemove(id);}catch(Exception e){throw e;}finally{HibernateSessionFactory.getSession().beginTransaction().commit();HibernateSessionFactory.closeSession();}}@Overridepublic Emp get(Short id) throws Exception {try{return DAOFactory.getIEmpDAOInstance().findById(id);}catch(Exception e){throw e;}finally{HibernateSessionFactory.getSession().beginTransaction().commit();HibernateSessionFactory.closeSession();}}@Overridepublic List<Emp> list() throws Exception {try{return DAOFactory.getIEmpDAOInstance().list();}catch(Exception e){throw e;}finally{HibernateSessionFactory.getSession().beginTransaction().commit();HibernateSessionFactory.closeSession();}}@Overridepublic Map<String, Object> list(String column, String keyWord,Integer currentPage, Integer lineSize) throws Exception { Map<String,Object> map=new HashMap<String,Object>();try{map.put("allEmps", DAOFactory.getIEmpDAOInstance().list(column, keyWord, currentPage, lineSize));map.put("allCount",DAOFactory.getIEmpDAOInstance().getAllCount(column, keyWord));return map;}catch(Exception e){throw e;}finally{HibernateSessionFactory.getSession().beginTransaction().commit();HibernateSessionFactory.closeSession();}}}·最后的工厂类,ServiceFactory.javapackage cn.oracle.factory;import cn.oracle.service.IEmpService;import cn.oracle.service.impl.EmpServiceImpl;public class ServiceFactory {public static IEmpService getIEmpServiceInstance(){ return new EmpServiceImpl();}}OK 到此完成;。
Hibernate 中的HQL查询的总结一.Spring+Hibernate 中1.保存一个实体getHibernateTemplate().save(user);2.根据id号从数据库中查询到一个实体Useruser=(User)getHibernateTemplate().load(User.class,fromUse rId));3.删除一个实体方法一:直接删除getHibernateTemplate().delete((Message);方法二:嵌套一个根据id号查询到一个实体,再删除getHibernateTemplate().delete((Message)getHibernateTempla te().load(Message.class, msgId));4.查询符合添加的记录的个数,函数count(*)Object obj = getSession().createQuery("select count(*)from Message where recepUser.id="+recepUserId+" and msgType=1").uniqueResult();//表示只返回一个结果5.修改一个实体getHibernateTemplate().update(message);6.设定查询记录的起始位置和得到的记录数List<Message> list = getSession().createQuery("from Message where (fromUser.id="+userId+" or recepUser.id="+userId+") and msgType=2 order by id desc").setMaxResults(想要得到的记录数).setFirstResult(取得记录的起点).list();7. intValue()返回的结果是整数int msgCount=((Long)getSession().createQuery("select count(*) from Message where from User.id="+userId+" or recepUser.id="+userId).uniqueResult()).intValue();二.只有Hibernate 中1.保存数据/*** 保存数据** @param t传入的泛型* @return*/public boolean save(T t) {session = HibernateUtil.getSession();try {session.beginTransaction();session.save(t);session.getTransaction().commit();} catch (Exception e) {e.printStackTrace();session.getTransaction().rollback();return false;} finally {HibernateUtil.closeSession(session);}return true;}2.删除数据/*** 删除数据** @param t传入的泛型* @return*/public boolean delete(T t) {session = HibernateUtil.getSession();try {session.beginTransaction();session.delete(t);session.getTransaction().commit();} catch (Exception e) {e.printStackTrace();session.getTransaction().rollback();return false;} finally {HibernateUtil.closeSession(session);}return true;}3.修改数据/*** 修改数据** @param t传入的泛型* @return*/public boolean update(T t) {session = HibernateUtil.getSession();try {session.beginTransaction();session.update(t);session.getTransaction().commit();} catch (Exception e) {e.printStackTrace();session.getTransaction().rollback();return false;} finally {HibernateUtil.closeSession(session);}return true;}4.查询单条数据,返回查询得到的唯一的结果实体对象/*** 查询单条数据** @param hql* @return返回查询得到的唯一的结果实体对象*/public T queryFrom(String hql) {// T表示泛型对象,T泛型定义T t = null;// 引用实体对象session = HibernateUtil.getSession();try {session.beginTransaction();Query query = session.createQuery(hql);// 执行传递来的hql查询語句t = (T) query.uniqueResult();// 将查询结果转换为实体对象session.getTransaction().commit();} catch (Exception e) {e.printStackTrace();session.getTransaction().rollback();} finally {HibernateUtil.closeSession(session);}return t;// 返回查询得到的实体对象}5.通过泛型定义的查询多条语句方法/*** 通过泛型定义的查询多条语句方法** @param hql** @return 查询得到的结果集List*/public List<T> queryList(String hql) {session = HibernateUtil.getSession();List<T> list = null;try {session.beginTransaction();Query query = session.createQuery(hql);// 执行传递来的hql查询语句list = query.list();// 将查询返回的结果集转换成List集合session.getTransaction().commit();} catch (Exception e) {e.printStackTrace();session.getTransaction().rollback();} finally {HibernateUtil.closeSession(session);}return list;// 返回查询得到的集合对象}6. 返回指定条数的查询结果的方法/*** 返回指定条数的查询结果的方法** @param hql* @param showNumber所要查询的数据的结果的条数* @return返回查询得到的集合对象*/public List<T> queryTypeListNumber(String hql, int showNumber,Type type) {session = HibernateUtil.getSession();List<T> list = null;try {session.beginTransaction();Query query = session.createQuery(hql);// 执行传递来的hql查询语句// for(int i=0;i<params.length;i++){//把传递过来的参数数组遍历出来,遍历赋值给hql语句中的未知待定数据// query=query.setParameter(i, params[i]);// }query=query.setParameter(0, type);query.setMaxResults(showNumber);// 设这所要查询的数据的结果的条数list = query.list();// 将查询返回的结果集转换成List集合session.getTransaction().commit();} catch (Exception e) {e.printStackTrace();session.getTransaction().rollback();} finally {HibernateUtil.closeSession(session);}return list;// 返回查询得到的集合集合对象}7.查询所有用户信息String hql = "from User";list = session.createQuery(hql) //创建Query对象 .list();8.保存用户session.save(user);9.通过用户名和密码查询用户(参数不一定,用动态赋值)//HQL查询语句String hql = "from User u where ername=? and u.password=?";Query query = session.createQuery(hql) //创建Query对象.setParameter(0, username)//动态赋值.setParameter(1, password);//动态赋值10.判断指定用户名的用户是否存在//HQL查询语句String hql = "from User u where ername=?";Query query = session.createQuery(hql) //创建Query对象.setParameter(0, username);//动态赋值Object user = query.uniqueResult();//返回User对象//如果用户存在exist为trueif(user != null){exist = true;}11.根据id删除一条留言信息//加载指定id的留言信息Message message = (Message)session.get(Message.class, id);session.delete(message); //删除留言12.查询所有文章中都有哪些作者(Group By)hql = "select author from ArticleInfo group by author";//查询文章详细信息的hql语句List authorList = objectDao.queryListObject(hql);//执行查询request.setAttribute("authorList", authorList);13.分组查询,各部门名称和各部门的人数(Group By)hql="select u.dept,count(*) from User u group by u.dept";Query query=session.creatQuery(hql);List<Object[]> list=query.list();//object[]是数组,可以同时多个属性查询obj[o],obj[1],obj[2],,,,//for循环输出信息For(object[] obj;list){Sysout.("部门"+obj[0]);Sysout.("人数"+obj[1])}14.查询文章的回复// 文章回复内容的详细查询hql = "from ReArticleInfo where re_id=" + id + " order by id desc";//查询文章详细内容的hql语句ObjectDao<ReArticleInfo> re_objectDao = new ObjectDao<ReArticleInfo>();//实例化持久化类List<ReArticleInfo> list = null;//定义List集合15.In的条件嵌套查询(双重条件,条件在其他表中)跨表hql_article_commend = "from ArticleInfo where commend='是' and author in (select account from UserInfo where freeze='解冻')";hql_article_vistor = "from ArticleInfo where author in (select account from UserInfo where freeze='解冻') order by visit desc";16.多对一映射在user表中,通过Author对象查询userString hql="from Category c wherec.typeName='"+category.getTypeName()+"'andc.author='"+category.getAuthor().getId()+"'";。
hibernate executeupdate的返回值在Hibernate 中,executeUpdate 方法用于执行更新操作(如插入、修改和删除),并返回受影响的行数。
返回值类型为int,表示更新操作执行后受影响的行数。
具体的返回值含义如下:-如果返回值大于0,则表示更新操作成功,并返回受影响的行数;-如果返回值等于0,则表示更新操作执行但没有影响任何行;-如果返回值小于0,则表示更新操作执行失败。
示例代码如下:```javaString hql = "UPDATE User SET name = :newName WHERE id = :userId"; Query query = session.createQuery(hql);query.setParameter("newName", "John");query.setParameter("userId", 123);Transaction transaction = session.beginTransaction();int rowsAffected = query.executeUpdate();mit();System.out.println("受影响的行数:" + rowsAffected);```在上面的示例中,首先构造一个HQL(Hibernate Query Language)更新语句,然后创建Query 对象,并设置参数。
接着开启事务,执行更新操作,并通过executeUpdate 方法获取受影响的行数。
最后提交事务并输出受影响的行数。
需要注意的是,executeUpdate 方法返回的是受影响的行数,而不是实际更新的对象。
如果需要获取更新后的对象,可以在执行更新操作后,再通过查询获取更新后的数据。
hibernate框架用法
Hibernate框架是一个开源的对象关系映射(ORM)框架,它可以
将Java对象映射到关系数据库中的表中,从而使得开发人员可以使用Java编程语言来访问和操作数据库。
Hibernate的使用流程如下:
1. 在Java类中定义实体对象及其属性和关系;
2. 在Hibernate中配置映射文件,将实体类映射为数据库表;
3. 通过Session API实现数据的增删改查操作。
Hibernate框架的优点有:
1. 开发效率高:Hibernate自动处理对象与数据库表之间的映射,使得开发人员可以将精力集中在业务逻辑上。
2. 数据库平台无关性好:Hibernate提供了一套底层数据库操作
接口,在数据操作层面上实现了面向对象与关系数据库的交互。
3. 透明性强:Hibernate框架屏蔽了大部分JDBC的细节,对于开发人员而言可以专注于业务需求的实现。
4. 高性能:Hibernate框架缓存机制、懒加载等一些优化措施,
可以改善数据库访问的性能。
同时,Hibernate还提供了一些高级特性,如事务管理、二级缓存、查询缓存、延迟加载等,可以更好地满足复杂应用的需要。
一、实验目的1. 理解数据访问的基本概念和原理。
2. 掌握常见的数据访问技术及其应用场景。
3. 通过实验加深对数据访问方法的理解和实际操作能力。
二、实验原理数据访问是指从数据库或其他数据源中获取、检索、更新和删除数据的过程。
在数据访问过程中,需要了解数据的存储结构、查询语言、连接技术等。
本实验主要涉及以下内容:1. 数据库访问技术:JDBC、、ORM等。
2. 数据查询语言:SQL、NoSQL等。
3. 数据连接技术:TCP/IP、HTTP等。
三、实验内容1. 数据库访问技术(1)JDBCJDBC(Java Database Connectivity)是Java语言中用于访问关系型数据库的API。
本实验使用JDBC连接MySQL数据库,实现数据的增删改查操作。
(2)是.NET框架中用于访问数据库的组件。
本实验使用C#语言通过连接SQL Server数据库,实现数据的增删改查操作。
(3)ORMORM(Object-Relational Mapping)是一种将对象模型和关系模型相互映射的技术。
本实验使用Hibernate框架,通过ORM技术实现数据的增删改查操作。
2. 数据查询语言(1)SQLSQL(Structured Query Language)是一种用于数据库查询、更新和管理的标准语言。
本实验使用SQL语句对数据库进行查询、更新和删除操作。
(2)NoSQLNoSQL是一种非关系型数据库技术,适用于处理大规模、分布式、非结构化数据。
本实验使用MongoDB数据库,通过NoSQL语言进行数据操作。
3. 数据连接技术(1)TCP/IPTCP/IP是一种网络协议,用于实现数据在网络中的传输。
本实验通过TCP/IP协议连接数据库服务器,实现数据访问。
(2)HTTPHTTP(HyperText Transfer Protocol)是一种应用层协议,用于在Web服务器和客户端之间传输数据。
本实验通过HTTP协议访问Web服务,实现数据访问。
数据访问技术实验报告实验目的:本实验旨在通过实践操作,加深对数据访问技术的理解,掌握不同数据访问方法的实现原理和应用场景,提高解决实际数据访问问题的能力。
实验环境:- 操作系统:Windows 10- 数据库管理系统:MySQL 8.0- 开发工具:Eclipse IDE 2021-09实验内容:1. SQL查询语句的编写与执行。
2. JDBC(Java Database Connectivity)的使用。
3. ORM(Object-Relational Mapping)框架Hibernate的使用。
实验步骤:1. 准备实验环境,安装并配置好MySQL数据库和Eclipse开发环境。
2. 创建数据库和数据表,为实验提供数据支持。
3. 编写SQL查询语句,实现数据的增删改查操作。
4. 利用JDBC连接数据库,执行SQL语句,并处理结果。
5. 配置Hibernate框架,通过ORM方式进行数据访问。
实验过程:1. 在MySQL中创建名为`ExperimentDB`的数据库,并在其中创建`Students`表,包含字段`id`, `name`, `age`, `major`。
2. 编写SQL语句,插入几条学生记录,并查询所有学生信息。
3. 在Eclipse中创建Java项目,添加MySQL驱动依赖。
4. 编写Java程序,使用JDBC连接到`ExperimentDB`数据库,执行SQL查询语句,并打印查询结果。
5. 配置Hibernate,定义实体类`Student`与`Students`表映射,并使用Hibernate的Session进行数据访问。
实验结果:1. SQL查询语句成功执行,能够正确插入和查询数据。
2. JDBC程序能够连接数据库,执行SQL语句,并正确处理查询结果。
3. Hibernate配置成功,通过ORM方式能够进行数据的增删改查操作。
实验分析:通过本次实验,我们了解到SQL是直接与数据库进行交互的基本语言,适用于简单的数据操作。
java项目中的增删改查方法在Java项目中,增删改查(CRUD)操作是非常常见的需求。
无论是开发Web应用、移动应用还是后台系统,都会涉及到对数据的增加、删除、修改和查询操作。
在Java中,我们通常使用数据库来存储数据,而针对数据库的增删改查操作,我们通常会使用SQL语句来实现。
下面我们来看看在Java项目中,如何实现增删改查方法。
1. 增加(Create),在Java项目中,要实现数据的增加操作,通常需要先连接数据库,然后使用SQL语句向数据库中插入新的数据。
在Java中,我们可以使用JDBC(Java Database Connectivity)来连接数据库,使用PreparedStatement或者Statement来执行插入操作。
另外,如果我们使用了ORM框架(如Hibernate或MyBatis),我们也可以通过框架提供的API来实现数据的插入操作。
2. 删除(Delete),删除数据操作通常是根据某个条件从数据库中删除符合条件的数据。
在Java项目中,我们可以使用SQL的DELETE语句来实现数据的删除操作。
同样地,我们可以使用JDBC或者ORM框架提供的API来执行删除操作。
3. 修改(Update),修改数据操作通常是根据某个条件更新数据库中的数据。
在Java项目中,我们可以使用SQL的UPDATE语句来实现数据的更新操作。
同样地,我们可以使用JDBC或者ORM框架提供的API来执行更新操作。
4. 查询(Retrieve),查询数据操作是从数据库中检索数据。
在Java项目中,我们可以使用SQL的SELECT语句来实现数据的查询操作。
同样地,我们可以使用JDBC或者ORM框架提供的API来执行查询操作,并将查询结果返回给Java应用程序。
总的来说,在Java项目中实现增删改查方法,我们通常会使用JDBC来连接数据库并执行SQL语句,或者使用ORM框架来简化数据库操作。
无论是使用JDBC还是ORM框架,都需要对数据库操作有一定的了解,以便能够编写出高效、安全的增删改查方法。
hibernatetemplate 语法摘要:一、介绍HibernateTemplate 语法二、HibernateTemplate 的优势三、HibernateTemplate 的使用方法四、HibernateTemplate 的常见方法五、HibernateTemplate 的注意事项六、总结正文:HibernateTemplate 是Hibernate 框架中的一个核心类,它提供了一种简化Hibernate 操作的语法。
HibernateTemplate 可以帮助我们简化Hibernate 的增删改查操作,使开发者无需手动编写SQL 语句,只需使用HibernateTemplate 类的方法即可完成相应的操作。
HibernateTemplate 的优势在于它提供了一种更符合面向对象编程思想的操作方式。
通过HibernateTemplate,我们可以将业务逻辑与数据访问逻辑分离,使代码结构更加清晰。
同时,HibernateTemplate 还具有自动事务管理功能,可以有效地管理事务,避免出现因事务处理不当而引发的问题。
使用HibernateTemplate 非常简单,首先需要创建一个HibernateTemplate 对象,然后通过这个对象调用相应的方法进行操作。
下面是一个简单的示例:```java// 获取HibernateTemplate 对象Session session = HibernateUtil.getSessionFactory().openSession();HibernateTemplate hibernateTemplate = new HibernateTemplate(session);// 使用HibernateTemplate 插入数据User user = new User();user.setName("张三");user.setAge(25);hibernateTemplate.insert(user);// 使用HibernateTemplate 更新数据User user2 = (User) hibernateTemplate.load(User.class, 1);user2.setName("李四");hibernateTemplate.update(user2);// 使用HibernateTemplate 删除数据hibernateTemplate.delete(user);// 使用HibernateTemplate 查询数据List<User> users = hibernateTemplate.loadAll(User.class);```HibernateTemplate 提供了许多常用的方法,如insert、update、delete、load、loadAll 等,可以满足我们日常开发中的大部分需求。
java项目中的增删改查方法在Java项目中,增删改查(CRUD)方法是非常常见和重要的。
这些方法用于对数据库中的数据进行操作,是任何应用程序的核心功能之一。
在本文中,我们将讨论Java项目中的增删改查方法的实现和最佳实践。
1. 增加(Create)数据。
在Java项目中,创建数据通常涉及将用户输入或其他来源的数据插入到数据库中。
为了实现这一点,我们通常会使用SQL INSERT语句或ORM(对象关系映射)框架(如Hibernate)来执行插入操作。
在使用ORM框架的情况下,我们可以通过创建实体对象并将其持久化到数据库中来实现数据的创建操作。
2. 删除(Delete)数据。
删除数据是指从数据库中移除特定记录或数据集。
在Java项目中,我们可以使用SQL DELETE语句或ORM框架提供的方法来执行删除操作。
在使用ORM框架时,通常会调用实体对象的删除方法来删除数据库中的记录。
3. 修改(Update)数据。
修改数据是指更新数据库中现有记录的内容。
在Java项目中,我们可以使用SQL UPDATE语句或ORM框架提供的方法来执行更新操作。
如果使用ORM框架,我们可以通过修改实体对象的属性并将其持久化到数据库中来实现数据的修改操作。
4. 查询(Retrieve)数据。
查询数据是指从数据库中检索特定记录或数据集。
在Java项目中,我们可以使用SQL SELECT语句或ORM框架提供的方法来执行查询操作。
如果使用ORM框架,我们通常会调用相应的查询方法来检索数据库中的数据。
在实现增删改查方法时,我们应该注意以下最佳实践:使用预编译语句或参数化查询来防止SQL注入攻击。
对数据库操作进行事务管理,以确保数据的一致性和完整性。
使用适当的索引和优化数据库查询,以提高性能。
对于ORM框架,应该了解并遵循框架的最佳实践和性能优化建议。
总之,增删改查方法是任何Java项目中不可或缺的部分。
通过遵循最佳实践和使用合适的工具和技术,我们可以有效地实现这些方法并确保应用程序的数据操作功能的稳健性和性能。
1./**2. *3. * @author fly.zhou4. */5.public interface IBaseDao {6.7.//增加对应实体的一条记录8.public boolean save(Object o);9.10.//更新对应实体的一条记录11.public boolean update(Object o);12.13.//增加或者更新对应实体的一条记录14.public boolean saveOrUpdate(Object o);15.16.//保存一系列对象集合17.public boolean saveOrUpdateAll(Collection l);18.19.//删除对应实体的一条记录20.public boolean delete(Object o);21.22.//根据id删除对应实体的一条记录23.public boolean delete(Class c, Serializable id);24.25.//执行hql语句删除一条记录26.public Integer delete(String hql, Object... values);27.28.//删除一系列数据29.public boolean deleteAll(Collection l);30.31.//执行hql语句查找32.public List find(String hql);33.34.//分页查询,多参数条件35.public List find(String hql, DataGridReq dgr, List values);36.37.//分页查询,多参数条件38.public List find(String hql, DataGridReq dgr, Object... values);39.40.//不带分页查询,多参数条件41.public List find(String hql, Object... values);42.43.//不带分页查询,多参数条件44.public boolean update(String hql, Object... values);45.46.//根据主键ID查询对应实体的一条记录47.public Object get(Class clazz, Serializable id);48.49.//获取某实体对象50.public Object load(Class c, Serializable id);51.52.//获取总记录数53.public Long total(String hql, List values);54.55.//获取总记录数56.public Long total(String hql, Object... values);57.58.//更新对应实体的某一条记录59.public boolean updateOneByProperty(Class clazz, Serializable id, String pName, Object pValue);60.61.//更新对应实体的某几条记录62.public boolean updateOneByPropertys(Class clazz, Serializable id, List<String> pName, List<Object> pValue);63.64.//更新对应实体的某几条记录(封装成map)65.public boolean updateOneByPropertys(Class clazz, Serializable id, Map<String, Object> map);66.67.//根据属性名以及对应的属性值查找一条记录68.public Object getSingleByProperty(Class clazz, String pName, Object pValue);69.70.//判断是否有对应的属性名和属性值存在,存在返回true71.public boolean ifHasOneByProperty(Class clazz, String pName, Object pValue);72.73.//根据一系列属性以及对应的属性值查询一条记录74.public Object getSingleByPropertys(Class clazz, List<String> pName, List<Object> pValue);75.76.//判断是否有一系列对应的属性名和属性值存在,存在返回true77.public boolean ifHasOneByPropertys(Class clazz, List<String> pName, List<Object> pValue);78.79.//根据一系列属性以及对应的属性值(封装成Map)查询一条记录80.public Object getSingleByPropertys(Class clazz, Map<String, Object> map);81.82.//判断是否有一系列对应的属性名和属性值(封装成Map)存在,存在返回true83.public boolean ifHasOneByPropertys(Class clazz, Map<String, Object> map);84.85.//通过某一对应的属性名和属性值,查询某一个属性的值86.public Object getValueByPropertys(Class clazz, Map<String, Object> map, String selectName);87.88.//通过一系列对应的属性名和属性值,查询某一个属性的值89.public Object getValueByProperty(Class clazz, String pName, Object pValue, String selectName);90.91.//通过一系列对应的属性名和属性值,查询某一个属性的值92.public Object getValueByPropertys(Class clazz, List<String> pNames, List<Object> pValues, String selectName);93.94.//查询对应实体的所有记录95.public List<Object> getObjects(Class clazz);96.97.//查询符合属性名以及对应的属性值的一系列记录98.public List<Object> getObjectsByProperty(Class clazz, String pName, Object pValue);99.100.//根据任意属性查询名以及对应的属性值的一系列记录101.public List<Object> getObjectsByAnyProperty(Class clazz, List<String > pName, List<Object> pValue);102.103.//查询符合一系列属性名以及对应的属性值的一系列记录104.public List<Object> getObjectsByPropertys(Class clazz, List<String> pName, List<Object> pValue);105.106.//根据某属性对应的属性值在某一范围内的一系列记录107.public List<Object> getObjectsByProperty(Class clazz, String pName, String operator, Object pValue);108.109.//根据某属性对应的属性值在某一范围内的一系列记录110.public List<Object> getObjectsByPropertys(Class clazz, List<String> pName, List<String> operator, List<Object> pValue);111.}2》接口的实现 BaseDaoImpl.java[java]view plaincopy1.public class BaseDaoImpl implements IBaseDao {2.3.private static final Logger logger = Logger.getLogger(BaseDaoImpl.class);4.private HibernateTemplate hibernateTemplate;5.6.public HibernateTemplate getHibernateTemplate() {7. hibernateTemplate.setCacheQueries(true);// 开启二级查询缓存8.return hibernateTemplate;9. }10.11.@Autowired12.public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {13.this.hibernateTemplate = hibernateTemplate;14. }15.16.@Override17.public boolean delete(Object o) {18.// ("删除");19.try {20.this.getHibernateTemplate().delete(o);21.return true;22. } catch (Exception e) {23.return false;24. }25. }26.27.@Override28.public boolean delete(Class c, Serializable id) {29.// ("删除");30.try {31.this.getHibernateTemplate().delete(get(c, id));32.return true;33. } catch (Exception e) {34.return false;35. }36. }37.38.@Override39.public Integer delete(final String hql, final Object... values) {40.return this.getHibernateTemplate().execute(new HibernateCallback<Integer>() {41.42.@Override43.public Integer doInHibernate(Session session) throws HibernateException, SQLException {44. Query q = session.createQuery(hql);45.if (values != null && values.length > 0) {46.for (int i = 0; i < values.length; i++) {47. q.setParameter(i, values[i]);48. }49. }50.return q.executeUpdate();51. }52. });53. }54.55.@Override56.public boolean deleteAll(Collection l) {57.// ("删除");58.try {59.this.getHibernateTemplate().deleteAll(l);60.return true;61. } catch (Exception e) {62.return false;63. }64. }65.66.@Override67.public boolean update(Object o) {68.// ("更新");69.try {70.this.getHibernateTemplate().update(o);71.return true;72. } catch (Exception e) {73. e.printStackTrace();74.return false;75. }76. }77.78.@Override79.public boolean save(Object o) {80.// ("保存");81.try {82.this.getHibernateTemplate().save(o);83.return true;84. } catch (Exception e) {85.return false;86. }87. }88.89.@Override90.public boolean saveOrUpdate(Object o) {91.try {92.this.getHibernateTemplate().saveOrUpdate(o);93.return true;94. } catch (Exception e) {95.return false;96. }97. }98.99.@Override100.public boolean saveOrUpdateAll(Collection l) { 101.// ("编辑");102.try {103.this.getHibernateTemplate().saveOrUpdateAll(l);104.return true;105. } catch (Exception e) {106.return false;107. }108. }109.110.@Override111.public List find(String hql) {112.// ("查询");113.return this.getHibernateTemplate().find(hql);114. }115.116.@Override117.public List find(final String hql, final DataGridReq dgr, final List values) {118.return this.getHibernateTemplate().execute(new HibernateCallback <List>() {119.120.@Override121.public List doInHibernate(Session session) throws HibernateE xception, SQLException {122. Query q = session.createQuery(hql);123.if (values != null && values.size() > 0) {124.for (int i = 0; i < values.size(); i++) {125. q.setParameter(i, values.get(i));126. }127. }128.if (dgr == null) {129.return q.list();130. }131.return q.setFirstResult(dgr.getStart()).setMaxResults(dg r.getLimit() * dgr.getPage()).list();132. }133. });134. }135.136.@Override137.public List find(final String hql, final DataGridReq dgr, final Obje ct... values) {138.return this.getHibernateTemplate().execute(new HibernateCallback <List>() {139.140.@Override141.public List doInHibernate(Session session) throws HibernateE xception, SQLException {142. Query q = session.createQuery(hql);143.if (values != null && values.length > 0) {145. q.setParameter(i, values[i]);146. }147. }148.if (dgr == null) {149.return q.list();150. }151.return q.setFirstResult(dgr.getStart()).setMaxResults(dg r.getLimit() * dgr.getPage()).list();152. }153. });154. }155.156.@Override157.public List find(String hql, Object... values) {158.return this.getHibernateTemplate().find(hql, values);159. }160.161.@Override162.public boolean update(final String hql, final Object... values) { 163.try {164.this.getHibernateTemplate().bulkUpdate(hql, values);165.return true;166. } catch (Exception e) {167.return false;168. }169. }170.171.@Override172.public Object get(Class c, Serializable id) {173.return this.getHibernateTemplate().get(c, id);174. }175.176.@Override177.public Object load(Class c, Serializable id) {178.return this.getHibernateTemplate().load(c, id);179. }180.181.@Override182.public Long total(final String hql, final List values) {183.return this.getHibernateTemplate().execute(new HibernateCallback <Long>() {184.185.@Override186.public Long doInHibernate(Session session) throws HibernateE xception, SQLException {187. Query q = session.createQuery(hql);188.if (values != null && values.size() > 0) {190. q.setParameter(i, values.get(i));191. }192. }193.return (Long) q.uniqueResult();194. }195. });196. }197.198.@Override199.public Long total(final String hql, final Object... values) { 200.return this.getHibernateTemplate().execute(new HibernateCallback <Long>() {201.202.@Override203.public Long doInHibernate(Session session) throws HibernateE xception, SQLException {204. Query q = session.createQuery(hql);205.if (values != null && values.length > 0) {206.for (int i = 0; i < values.length; i++) {207. q.setParameter(i, values[i]);208. }209. }210.return (Long) q.uniqueResult();211. }212. });213. }214.215.@Override216.public boolean updateOneByProperty(Class clazz, Serializable id, Str ing pName, Object pValue) {217. String hql = "update " + clazz.getName() + " entity set entity."+ pName + " = '" + pValue + "' where entity.id = " + id;218. getHibernateTemplate().bulkUpdate(hql);219.return true;220. }221.222.@Override223.public boolean updateOneByPropertys(Class clazz, Serializable id, Li st<String> pName, List<Object> pValue) {224. String hql = "update " + clazz.getName() + " entity set entity.";225.int maxIndex = pName.size() - 1;226.for (int i = 0; i < maxIndex; i++) {227. hql += pName.get(i) + " = '" + pValue.get(i) + "', entity."; 228. }229. hql += pName.get(maxIndex) + " = '" + pValue.get(maxIndex) + "'w here entity.id = " + id;230. System.out.println(hql);231. getHibernateTemplate().bulkUpdate(hql);232.return true;233. }234.235.@Override236.public boolean updateOneByPropertys(Class clazz, Serializable id, Ma p<String, Object> map) {237. String hql = "update " + clazz.getName() + " entity set entity.";238. Set set = map.entrySet();239.if (set != null) {240. Iterator iterator = set.iterator();241.while (iterator.hasNext()) {242. Entry entry = (Entry) iterator.next();243. Object key = entry.getKey();244. Object value = entry.getValue();245. hql += key + " = '" + value + "' and entity.";246. }247. }248. hql = hql.substring(0, hql.length() - 12);249. hql += "'where entity.id = " + id;250. System.out.println(hql);251. getHibernateTemplate().bulkUpdate(hql);252.return true;253. }254.255./**256. * 根据属性查询257. *258. * @param clazz259. * @param pName260. * @param pValue261. * @return262. */263.@Override264.public Object getSingleByProperty(Class clazz, String pName, Object pValue) {265.266. String hql = "from " + clazz.getName() + " entity where entity."+ pName + " = '" + pValue + "'";267. List<Object> os = getHibernateTemplate().find(hql);268.if (os != null && !os.isEmpty()) {269.return os.get(0);270. } else {271.return null;272. }273. }274.275./**276. * 根据属性查询277. *278. * @param clazz279. * @param pName280. * @param pValue281. * @return282. */283.@Override284.public boolean ifHasOneByProperty(Class clazz, String pName, Object pValue) {285. String hql = "from " + clazz.getName() + " entity where entity."+ pName + " = '" + pValue + "'";286. List<Object> os = getHibernateTemplate().find(hql);287.if (os != null && !os.isEmpty()) {288.return true;289. } else {290.return false;291. }292. }293.294./**295. * 根据属性查询296. *297. * @param clazz298. * @param pName299. * @param pValue300. * @return301. */302.@Override303.public List<Object> getObjectsByAnyProperty(Class clazz, List<String > pName, List<Object> pValue) {304. String hql = "from " + clazz.getName() + " entity where entity.";305.int maxIndex = pName.size() - 1;306.for (int i = 0; i < maxIndex; i++) {307. hql += pName.get(i) + " = '" + pValue.get(i) + "' or entity.";308. }309. hql += pName.get(maxIndex) + " = '" + pValue.get(maxIndex) + "'";310. System.out.println(hql);311. List<Object> os = getHibernateTemplate().find(hql);312.if (os != null && !os.isEmpty()) {313.return os;314. } else {315.return null;316. }317. }318.319.@Override320.public boolean ifHasOneByPropertys(Class clazz, List<String> pName, List<Object> pValue) {321. String hql = "from " + clazz.getName() + " entity where entity.";322.int maxIndex = pName.size() - 1;323.for (int i = 0; i < maxIndex; i++) {324. hql += pName.get(i) + " = '" + pValue.get(i) + "' and entity .";325. }326. hql += pName.get(maxIndex) + " = '" + pValue.get(maxIndex) + "'";327. System.out.println(hql);328. List<Object> os = getHibernateTemplate().find(hql);329.if (os != null && !os.isEmpty()) {330.return true;331. } else {332.return false;333. }334. }335.336.@Override337.public Object getSingleByPropertys(Class clazz, List<String> pName, List<Object> pValue) {338.339. String hql = "from " + clazz.getName() + " entity where entity.";340.int maxIndex = pName.size() - 1;341.for (int i = 0; i < maxIndex; i++) {342. hql += pName.get(i) + " = '" + pValue.get(i) + "' and entity .";343. }344. hql += pName.get(maxIndex) + " = '" + pValue.get(maxIndex) + "'";345. System.out.println(hql);346. List<Object> os = getHibernateTemplate().find(hql);347.if (os != null && !os.isEmpty()) {348.return os.get(0);349. } else {350.return null;351. }352. }353.354.@Override355.public Object getSingleByPropertys(Class clazz, Map<String, Object> map) {356. String hql = "from " + clazz.getName() + " entity where entity.";357. Set set = map.entrySet();358.if (set != null) {359. Iterator iterator = set.iterator();360.while (iterator.hasNext()) {361. Entry entry = (Entry) iterator.next();362. Object key = entry.getKey();363. Object value = entry.getValue();364. hql += key + " = '" + value + "' and entity.";365. }366. }367. hql = hql.substring(0, hql.length() - 12);368. System.out.println("hql = " + hql);369. List<Object> os = getHibernateTemplate().find(hql);370.if (os != null && !os.isEmpty()) {371.return os.get(0);372. } else {373.return null;374. }375. }376.377.@Override378.public boolean ifHasOneByPropertys(Class clazz, Map<String, Object> map) {379.380. String hql = "from " + clazz.getName() + " entity where entity.";381. Set set = map.entrySet();382.if (set != null) {383. Iterator iterator = set.iterator();384.while (iterator.hasNext()) {385. Entry entry = (Entry) iterator.next();386. Object key = entry.getKey();387. Object value = entry.getValue();388. hql += key + " = '" + value + "' and entity.";389. }390. }391. hql = hql.substring(0, hql.length() - 12);392. List<Object> os = getHibernateTemplate().find(hql);393.if (os != null && !os.isEmpty()) {394.return true;395. } else {396.return false;397. }398. }399.400./**401. * 查询所有402. */403.@Override404.public List<Object> getObjects(Class clazz) {405. String hql = "from " + clazz.getName();406. List list = getHibernateTemplate().find(hql);407.return list;408. }409.410./**411. * 根据属性查询全部412. *413. * @param clazz414. * @param pName415. * @param pValue416. * @return417. */418.@Override419.public List<Object> getObjectsByProperty(Class clazz, String pName, Object pValue) {420. String hql = "from " + clazz.getName() + " entity where entity."+ pName + " = '" + pValue + "'";421.return getHibernateTemplate().find(hql);422. }423.424.@Override425.public List<Object> getObjectsByPropertys(Class clazz, List<String> pName, List<Object> pValue) {426. String hql = "from " + clazz.getName() + " entity where entity.";427.int maxIndex = pName.size() - 1;428.for (int i = 0; i < maxIndex; i++) {429. hql += pName.get(i) + " = '" + pValue.get(i) + "' and "; 430. }431. hql += pName.get(maxIndex) + " = '" + pValue.get(maxIndex) + "'";432.return getHibernateTemplate().find(hql);433. }434.435./**436. * 根据属性查询全部437. *438. * @param clazz439. * @param pName440. * @param pValue441. * @return442. */443.@Override444.public List<Object> getObjectsByProperty(Class clazz, String pName, String operator, Object pValue) {445. String hql = "from " + clazz.getName() + " entity where entity."+ pName + " " + operator + pValue;446.return getHibernateTemplate().find(hql);447. }448.449.@Override450.public List<Object> getObjectsByPropertys(Class clazz, List<String> pName, List<String> operator, List<Object> pValue) {451. String hql = "from " + clazz.getName() + " entity where entity.";452.int maxIndex = pName.size() - 1;453.for (int i = 0; i < maxIndex; i++) {454. hql += pName.get(i) + " " + operator.get(i) + " '" + pValue.get(i) + "' and ";455. }456. hql += pName.get(maxIndex) + " " + operator.get(maxIndex) + " '"+ pValue.get(maxIndex) + "'";457. System.out.println("hql = " + hql);458.return getHibernateTemplate().find(hql);459. }460.461.@Override462.public Object getValueByPropertys(Class clazz, Map<String, Object> m ap, String selectName) {463. String hql = "select entity." + selectName + "from " + clazz.get Name() + " entity where entity.";464. Set set = map.entrySet();465.if (set != null) {466. Iterator iterator = set.iterator();467.while (iterator.hasNext()) {468. Entry entry = (Entry) iterator.next();469. Object key = entry.getKey();470. Object value = entry.getValue();471. hql += key + " = '" + value + "' and entity.";472. }473. }474. hql = hql.substring(0, hql.length() - 12);475. System.out.println("hql = " + hql);476.return getHibernateTemplate().find(hql);477. }478.479.@Override480.public Object getValueByProperty(Class clazz, String pName, Object p Value, String selectName) {481. String hql = "select entity." + selectName + " from " + clazz.ge tName() + " entity where entity." + pName + " = '" + pValue + "'";482. System.out.println("hql = " + hql);483.return getHibernateTemplate().find(hql);484. }485.486.@Override487.public Object getValueByPropertys(Class clazz, List<String> pNames, List<Object> pValues, String selectName) {488. String hql = "select entity." + selectName + "from " + clazz.get Name() + " entity where entity.";489.int maxIndex = pNames.size() - 1;490.for (int i = 0; i < maxIndex; i++) {491. hql += pNames.get(i) + " = '" + pValues.get(i) + "' and ";492. }493. hql += pNames.get(maxIndex) + " = '" + pValues.get(maxIndex) + "'";494. System.out.println("hql = " + hql);495.return getHibernateTemplate().find(hql);496. }497.}3》值得注意的地方Map如何获取key[java]view plaincopy1.Set set = map.entrySet();2.if (set != null) {3. Iterator iterator = set.iterator();4.while (iterator.hasNext()) {5. Entry entry = (Entry) iterator.next();6. Object key = entry.getKey();7. Object value = entry.getValue();8. hql += key + " = '" + value + "' and entity.";9. }10.}4》这样写的话会对项目省去大量的重复代码,在对具体的实体操作时,我们只需要把对应实体的实现继承BaseDaoImpl。