转自: http://blog.csdn.net/caodegao/article/details/7196872
在hibernate中,当自己用到自定义SQL查询时,结果集和pojo类的字段一模一样,又想方便快捷的不用手动的映射到pojo上,相信大家都遇到过.
看如下代码POJO
private String month; // 月份 private String year; // 状态 private Long status; // 创建人 private String createEmpCode; // 创建时间 private Date createDate; // 修改人 private String updateEmpCode; // 修改时间 private Date updateDate; get() set()省略....
Mapping.xml略...相信大家都会
查询的SQL:
SELECT nvl(t.e_year, '无') AS year, l.m AS month, nvl(t.status,0) as status, t.create_emp_code as createEmpCode, t.create_date as createDate, t.update_emp_code as updateEmpCode, t.update_date as updateDate FROM (SELECT LEVEL m FROM dual CONNECT BY LEVEL <= 12) l LEFT OUTER JOIN table t ON l.m = t.e_month AND t.e_year = 1 AND t.e_page = 4 ORDER BY l.m
要注意的是,查询出来的字段名称最好和POJO类的属性名一致,要是出现什么行对应不上的错误,大家自己可以去尝试.
SSH整合查询代码,纯Hibernate写法,主要涉及到一个类(关键呐!)
@SuppressWarnings("unchecked") public Collection<Table> findBy(final QueryObj queryObj) { final String sql = "SELECT nvl(t.e_year, '无') AS year,l.m AS month,nvl(t.status, 0) as status," + " t.create_emp_code as createEmpCode,t.create_date as createDate," + " t.update_emp_code as updateEmpCode,t.update_date as updateDate" + " FROM (SELECT LEVEL m FROM dual CONNECT BY LEVEL <= 12) l" + " LEFT OUTER JOIN table t ON l.m = t.e_month AND t.e_year = ? AND t.e_page = ?" + " ORDER BY l.m "; final String year = "year"; final Long page = 1; return (Collection<Table>) super.getHibernateTemplate().execute( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { SQLQuery query = session .createSQLQuery(sql); query.setString(0, year); query.setLong(1, page); //这里用addScalar指定查询结果集字段转换,尤其是用到sql函数时第一个参数是as 别名,第二个是返回值的类型 query.addScalar("year", Hibernate.STRING); query.addScalar("month", Hibernate.STRING); query.addScalar("status", Hibernate.LONG); query.addScalar("createEmpCode", Hibernate.STRING); query.addScalar("updateEmpCode", Hibernate.STRING); query.addScalar("createDate", Hibernate.DATE); query.addScalar("updateDate", Hibernate.DATE); //关键转换方法query.setResultTransformer,参数AliasToBeanResultTransformer(映射到的POJO类). query.setResultTransformer(new AliasToBeanResultTransformer(Table.class)); //OK hibernate会自动映射过去,如果不用这个方法它返回的时候是Collection<Object>,所以不能起到转换的作用,在JBoss中运行查询时会报错的. return query.list(); } }); }
以上的方法用query.addEntity(将查询到的记录与特定的实体关联。)不管用可能是sql的原因,查询的基表为Table时才关联上,如果是多表关联,基表又不对应,必须是哪个方法才行,还要设置addScalar方法,还有:查询类是SQLQuery可不是Query,两个类提供的方法是不一样的.
相关推荐
当我们从数据库读出数据得到ResultSet或RowSet的时候,我们的做法是遍历结果集,然后封装到pojo里面,再封装到List,那么,每次封装是不是很麻烦呢,前段时间小弟看了下反射的东西,试着写了个类,目的在于方便封装...
hibernate_tools,hibernate_extension.自动生成
hibernate生成pojo
eclipse 配置 hibernate tools 反向生成 pojo类 注解
第一、使用Hibernate 的sql 查询函数,将查询结果对象转为Entity对象。 第二、使用Hibernate Session的getConnection 获得JDBC Connection,然后进行纯JDBC API操作; 第三、选择把Spring的JDBCTemplate作为一种很...
myeclipse中自动生成hibernate的POJO、DAO和hbm.xml文件,自己整理了一下,以防以后忘了。
1.1.1版本 简单数据库逆向工程 自动生成POJO类 JAVA WEB jsp
mybatis自动生成dao pojo xml文件工具(SQL server)
根据数据库自动生成DAO层以及pojo和sql,有使用方法
使用PD(PowerDesigner)自动生成Hibernate的POJO文件及xml配置文件
使用spring+mybatis经常需要建表写字段映射,烦不烦?看看我这个工具吧,配置写好之后 命令行执行jar,自动按表字段生成pojo的字段和mapping的xml里的增删改查,有了这些,你可以快速写出各种接口
使用MyEclipse生成hibernate映射文件以及相应的pojo类,链接的是mysql数据库,相应的数据库文件是订单信息
eclipse插件,根据数据库表自动生成DTO(pojo)插件!eclipse插件,根据数据库表自动生成DTO(pojo)插件!
写好配置后,连接数据库,读取所有表,自动生成pojo和mybatis xml增删改查字段信息。剩下的工作就是复制-粘贴-修改。生成的pojo里面只有成员变量没有set/get方法,因为生成代码麻烦但是在eclipse里面添加这个很简单...
自动生成hibernate映射文件和实体类
于是试着动手写了一个可以把数据库表自动写成pojo类,并且产生hibernate配置文件。虽然不是什么比较高级的程序,但是我希望也能对大家有一些帮助。不要吃我当时的闭门羹,算是给朋友们,提供一个思路吧。 备注:运行...
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以...
就是我博客里写的那玩意儿的样例程序。 包括 DBHelper SqlPojo UserControl Manage Ajax.aspx Test.mdf index.html 开发环境:VisualStudio2013
Mybatis自动生成pojo、mapper、xml工具
MyEclipe的自动工具,可以使得在开发中提高效率,节省时间。