首页 > 代码库 > mybatis3.2.8 + hibernate4.3.6 混用

mybatis3.2.8 + hibernate4.3.6 混用

mybatis、hibernate这二个框架各有特色,对于复杂的查询,利用mybatis直接手写sql控制起来更灵活,而一般的insert/update,hibernate比较方便。同一个项目中,这二个框架可以和谐共存,下面是一些步骤:

一、版本要求

Spring 4.11 + hibernate 4.3.6 + mybatis 3.2.8 + struts 2.3.16.3 (这是目前各框架的最新版本)

建议:如果用hibernate 4.x ,Spring最好也是4.x系列,否则getCurrentSession()容易报错。

二、pom.xml依赖项

  1 <?xml version="1.0" encoding="UTF-8"?>  2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  4     <modelVersion>4.0.0</modelVersion>  5     <groupId>infosky</groupId>  6     <artifactId>struts2-rest-ex</artifactId>  7     <packaging>war</packaging>  8     <version>1.0</version>  9     <properties> 10         <java-version>1.6</java-version> 11         <struts2.version>2.3.16.3</struts2.version> 12         <spring.version>4.1.1.RELEASE</spring.version> 13         <mybatis.version>3.2.8</mybatis.version> 14         <hibernate.version>4.3.6.Final</hibernate.version> 15     </properties> 16     <dependencies> 17  18         <dependency> 19             <groupId>commons-dbcp</groupId> 20             <artifactId>commons-dbcp</artifactId> 21             <version>1.4</version> 22         </dependency> 23  24         <!-- oracle --> 25         <dependency> 26             <groupId>com.oracle</groupId> 27             <artifactId>ojdbc6</artifactId> 28             <version>11.2.0.3</version> 29         </dependency> 30  31         <dependency> 32             <groupId>asm</groupId> 33             <artifactId>asm</artifactId> 34             <version>3.3.1</version> 35         </dependency> 36  37         <dependency> 38             <groupId>asm</groupId> 39             <artifactId>asm-commons</artifactId> 40             <version>3.3.1</version> 41         </dependency> 42  43         <dependency> 44             <groupId>asm</groupId> 45             <artifactId>asm-tree</artifactId> 46             <version>3.3.1</version> 47         </dependency> 48  49         <dependency> 50             <groupId>commons-beanutils</groupId> 51             <artifactId>commons-beanutils</artifactId> 52             <version>1.8.3</version> 53         </dependency> 54  55         <dependency> 56             <groupId>commons-collections</groupId> 57             <artifactId>commons-collections</artifactId> 58             <version>3.2.1</version> 59         </dependency> 60  61         <dependency> 62             <groupId>commons-fileupload</groupId> 63             <artifactId>commons-fileupload</artifactId> 64             <version>1.3</version> 65         </dependency> 66  67         <dependency> 68             <groupId>commons-io</groupId> 69             <artifactId>commons-io</artifactId> 70             <version>2.2</version> 71         </dependency> 72  73         <dependency> 74             <groupId>org.apache.commons</groupId> 75             <artifactId>commons-lang3</artifactId> 76             <version>3.1</version> 77         </dependency> 78  79         <dependency> 80             <groupId>javassist</groupId> 81             <artifactId>javassist</artifactId> 82             <version>3.12.1.GA</version> 83         </dependency> 84  85         <dependency> 86             <groupId>ognl</groupId> 87             <artifactId>ognl</artifactId> 88             <version>3.0.6</version> 89         </dependency> 90  91  92         <!-- log --> 93         <dependency> 94             <groupId>org.apache.logging.log4j</groupId> 95             <artifactId>log4j-api</artifactId> 96             <version>2.0.2</version> 97         </dependency> 98         <dependency> 99             <groupId>org.apache.logging.log4j</groupId>100             <artifactId>log4j-core</artifactId>101             <version>2.0.2</version>102         </dependency>103         <dependency>104             <groupId>org.apache.logging.log4j</groupId>105             <artifactId>log4j-web</artifactId>106             <version>2.0.2</version>107         </dependency>108         <dependency>109             <groupId>org.slf4j</groupId>110             <artifactId>slf4j-api</artifactId>111             <version>1.7.7</version>112         </dependency>113 114         <dependency>115             <groupId>net.sf.ezmorph</groupId>116             <artifactId>ezmorph</artifactId>117             <version>1.0.6</version>118         </dependency>119 120         <dependency>121             <groupId>org.freemarker</groupId>122             <artifactId>freemarker</artifactId>123             <version>2.3.19</version>124         </dependency>125 126         <dependency>127             <groupId>org.codehaus.jackson</groupId>128             <artifactId>jackson-core-asl</artifactId>129             <version>1.9.10</version>130         </dependency>131 132         <dependency>133             <groupId>org.codehaus.jackson</groupId>134             <artifactId>jackson-mapper-asl</artifactId>135             <version>1.9.10</version>136         </dependency>137 138         <dependency>139             <groupId>net.sf.json-lib</groupId>140             <artifactId>json-lib</artifactId>141             <version>2.4</version>142             <classifier>jdk15</classifier>143         </dependency>144 145         <dependency>146             <groupId>org.apache.struts</groupId>147             <artifactId>struts2-convention-plugin</artifactId>148             <version>2.3.16</version>149         </dependency>150 151         <dependency>152             <groupId>org.apache.struts</groupId>153             <artifactId>struts2-config-browser-plugin</artifactId>154             <version>2.3.16</version>155         </dependency>156 157         <dependency>158             <groupId>org.apache.struts</groupId>159             <artifactId>struts2-core</artifactId>160             <version>${struts2.version}</version>161         </dependency>162 163         <dependency>164             <groupId>org.apache.struts</groupId>165             <artifactId>struts2-rest-plugin</artifactId>166             <version>2.3.16</version>167         </dependency>168 169         <dependency>170             <groupId>com.thoughtworks.xstream</groupId>171             <artifactId>xstream</artifactId>172             <version>1.4.3</version>173         </dependency>174 175         <dependency>176             <groupId>org.apache.struts.xwork</groupId>177             <artifactId>xwork-core</artifactId>178             <version>${struts2.version}</version>179         </dependency>180 181         <!-- Servlet -->182         <dependency>183             <groupId>javax.servlet</groupId>184             <artifactId>servlet-api</artifactId>185             <version>2.5</version>186             <scope>provided</scope>187         </dependency>188 189         <!-- spring -->190         <dependency>191             <groupId>org.apache.struts</groupId>192             <artifactId>struts2-spring-plugin</artifactId>193             <version>${struts2.version}</version>194         </dependency>195 196         <dependency>197             <groupId>org.springframework</groupId>198             <artifactId>spring-context</artifactId>199             <version>${spring.version}</version>200         </dependency>201 202         <dependency>203             <groupId>org.springframework</groupId>204             <artifactId>spring-orm</artifactId>205             <version>${spring.version}</version>206         </dependency>207 208         <dependency>209             <groupId>org.springframework</groupId>210             <artifactId>spring-beans</artifactId>211             <version>${spring.version}</version>212         </dependency>213 214         <dependency>215             <groupId>org.springframework</groupId>216             <artifactId>spring-core</artifactId>217             <version>${spring.version}</version>218         </dependency>219 220         <dependency>221             <groupId>org.springframework</groupId>222             <artifactId>spring-web</artifactId>223             <version>${spring.version}</version>224         </dependency>225 226         <dependency>227             <groupId>org.springframework</groupId>228             <artifactId>spring-context</artifactId>229             <version>${spring.version}</version>230         </dependency>231 232         <dependency>233             <groupId>org.springframework</groupId>234             <artifactId>spring-context-support</artifactId>235             <version>${spring.version}</version>236         </dependency>237 238         <dependency>239             <groupId>org.springframework</groupId>240             <artifactId>spring-expression</artifactId>241             <version>${spring.version}</version>242         </dependency>243 244         <dependency>245             <groupId>org.springframework</groupId>246             <artifactId>spring-jdbc</artifactId>247             <version>${spring.version}</version>248         </dependency>249 250         <dependency>251             <groupId>org.springframework</groupId>252             <artifactId>spring-tx</artifactId>253             <version>${spring.version}</version>254         </dependency>255 256         <dependency>257             <groupId>org.springframework</groupId>258             <artifactId>spring-aop</artifactId>259             <version>${spring.version}</version>260         </dependency>261 262 263         <dependency>264             <groupId>org.aspectj</groupId>265             <artifactId>aspectjweaver</artifactId>266             <version>1.7.3</version>267         </dependency>268 269         <dependency>270             <groupId>aopalliance</groupId>271             <artifactId>aopalliance</artifactId>272             <version>1.0</version>273         </dependency>274 275 276         <dependency>277             <groupId>junit</groupId>278             <artifactId>junit</artifactId>279             <version>4.11</version>280         </dependency>281 282         <!-- mybatis -->283         <dependency>284             <groupId>org.mybatis</groupId>285             <artifactId>mybatis-spring</artifactId>286             <version>1.2.2</version>287         </dependency>288 289         <dependency>290             <groupId>org.mybatis</groupId>291             <artifactId>mybatis</artifactId>292             <version>${mybatis.version}</version>293         </dependency>294 295         <dependency>296             <groupId>com.github.miemiedev</groupId>297             <artifactId>mybatis-paginator</artifactId>298             <version>1.2.15</version>299         </dependency>300 301         <!-- hibernate -->302         <dependency>303             <groupId>org.hibernate</groupId>304             <artifactId>hibernate-core</artifactId>305             <version>${hibernate.version}</version>306         </dependency>307 308         <dependency>309             <groupId>xml-apis</groupId>310             <artifactId>xml-apis</artifactId>311             <version>1.0.b2</version>312             <scope>provided</scope>313         </dependency>314 315 316     </dependencies>317 318     <profiles>319         <profile>320             <!-- 开发环境 -->321             <id>dev</id>322             <properties>323                 <db-url>jdbc:oracle:thin:@172.21.129.51:1521:orcl</db-url>324                 <db-username>***</db-username>325                 <db-password>***</db-password>326             </properties>327             <!-- 默认激活本环境 -->328             <activation>329                 <activeByDefault>true</activeByDefault>330             </activation>331         </profile>332         <profile>333             <!-- 测试环境 -->334             <id>test</id>335             <properties>336                 <db-url>jdbc:oracle:thin:@172.21.129.51:1521:orcl</db-url>337                 <db-username>***</db-username>338                 <db-password>***</db-password>339             </properties>340         </profile>341     </profiles>342 343     <build>344         <finalName>struts2-rest-ex</finalName>345         <resources>346             <resource>347                 <directory>src/main/resources</directory>348                 <filtering>true</filtering>349             </resource>350         </resources>351         <plugins>352             <plugin>353                 <groupId>org.apache.maven.plugins</groupId>354                 <artifactId>maven-compiler-plugin</artifactId>355                 <version>2.5.1</version>356                 <configuration>357                     <source>1.6</source>358                     <target>1.6</target>359                     <encoding>utf-8</encoding>360                 </configuration>361             </plugin>362 363             <plugin>364                 <artifactId>maven-source-plugin</artifactId>365                 <version>2.1.2</version>366                 <executions>367                     <execution>368                         <phase>package</phase>369                         <goals>370                             <goal>jar-no-fork</goal>371                         </goals>372                     </execution>373                 </executions>374             </plugin>375 376             <plugin>377                 <groupId>org.apache.maven.plugins</groupId>378                 <artifactId>maven-surefire-plugin</artifactId>379                 <version>2.16</version>380                 <configuration>381                     <forkMode>once</forkMode>382                     <argLine>-Dfile.encoding=UTF-8</argLine>383                 </configuration>384             </plugin>385         </plugins>386     </build>387     <organization>388         <name>yjmyzz</name>389         <url>http://yjmyzz.cnblogs.com/</url>390     </organization>391 392 </project>
View Code

最终打包后,WEB-INF/lib下的jar文件列表为:

antlr-2.7.7.jar
aopalliance-1.0.jar
asm-3.3.1.jar
asm-commons-3.3.1.jar
asm-tree-3.3.1.jar
aspectjweaver-1.7.3.jar
commons-beanutils-1.8.3.jar
commons-collections-3.2.1.jar
commons-dbcp-1.4.jar
commons-fileupload-1.3.jar
commons-io-2.2.jar
commons-lang-2.3.jar
commons-lang3-3.1.jar
commons-logging-1.1.1.jar
commons-pool-1.5.4.jar
dom4j-1.6.1.jar
ezmorph-1.0.6.jar
freemarker-2.3.19.jar
hamcrest-core-1.3.jar
hibernate-commons-annotations-4.0.5.Final.jar
hibernate-core-4.3.6.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jackson-core-asl-1.9.10.jar
jackson-mapper-asl-1.9.10.jar
jandex-1.1.0.Final.jar
javassist-3.12.1.GA.jar
javassist-3.18.1-GA.jar
jboss-logging-3.1.3.GA.jar
jboss-logging-annotations-1.2.0.Beta1.jar
jboss-transaction-api_1.2_spec-1.0.0.Final.jar
json-lib-2.4-jdk15.jar
junit-4.11.jar
log4j-api-2.0.2.jar
log4j-core-2.0.2.jar
log4j-web-2.0.2.jar
mybatis-3.2.8.jar
mybatis-paginator-1.2.15.jar
mybatis-spring-1.2.2.jar
ognl-3.0.6.jar
ojdbc6-11.2.0.3.jar
slf4j-api-1.7.7.jar
spring-aop-4.1.1.RELEASE.jar
spring-beans-4.1.1.RELEASE.jar
spring-context-4.1.1.RELEASE.jar
spring-context-support-4.1.1.RELEASE.jar
spring-core-4.1.1.RELEASE.jar
spring-expression-4.1.1.RELEASE.jar
spring-jdbc-4.1.1.RELEASE.jar
spring-orm-4.1.1.RELEASE.jar
spring-tx-4.1.1.RELEASE.jar
spring-web-4.1.1.RELEASE.jar
struts2-config-browser-plugin-2.3.16.jar
struts2-convention-plugin-2.3.16.jar
struts2-core-2.3.16.3.jar
struts2-rest-plugin-2.3.16.jar
struts2-spring-plugin-2.3.16.3.jar
xmlpull-1.1.3.1.jar
xpp3_min-1.1.4c.jar
xstream-1.4.3.jar
xwork-core-2.3.16.3.jar

三、Spring配置(关键)

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" 4     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc" 5     xmlns:context="http://www.springframework.org/schema/context" 6     xsi:schemaLocation=" 7      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 8      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 9      http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd10      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd11      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"12     default-autowire="byName">13 14     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"15         destroy-method="close">16         <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />17         <property name="url" value="jdbc:oracle:thin:@172.21.129.**:1521:orcl" />18         <property name="username" value="***" />19         <property name="password" value="***" />20         <property name="defaultAutoCommit" value="false" />21         <property name="initialSize" value="2" />22         <property name="maxActive" value="10" />23         <property name="maxWait" value="60000" />24     </bean>25 26     <bean id="sessionFactory"27         class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">28         <property name="dataSource" ref="dataSource" />29         <property name="packagesToScan">30             <list>31                 <value>com.cnblogs.yjmyzz.entity</value>32             </list>33         </property>34         <property name="mappingLocations">35             <list>36                 <value>classpath*:hibernate/**/*.hbm.xml</value>37             </list>38         </property>39         <property name="hibernateProperties">40             <props>41                 <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>42                 <!-- <prop key="current_session_context_class">thread</prop> -->43                 <prop key="hibernate.format_sql">false</prop>44                 <prop key="hibernate.show_sql">true</prop>45                 <prop key="hibernate.use_sql_comments">true</prop>46                 <prop key="hibernate.max_fetch_depth">3</prop>47                 <prop key="hibernate.jdbc.batch_size">20</prop>48                 <prop key="hibernate.jdbc.fetch_size">20</prop>49                 <prop key="hibernate.cache.use_second_level_cache">false</prop>50             </props>51         </property>52     </bean>53 54     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">55         <property name="dataSource" ref="dataSource" />56         <property name="configLocation" value="classpath:mybatis-config.xml"></property>57         <property name="typeAliasesPackage" value="com.cnblogs.yjmyzz.entity"></property>58         <property name="mapperLocations" value="classpath:mybatis/**/*.xml"></property>59         <property name="plugins">60             <list>61                 <bean62                     class="com.github.miemiedev.mybatis.paginator.OffsetLimitInterceptor">63                     <property name="dialectClass"64                         value="com.github.miemiedev.mybatis.paginator.dialect.OracleDialect"></property>65                 </bean>66             </list>67         </property>68     </bean>69 70     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">71         <property name="basePackage" value="com.cnblogs.yjmyzz.mybatis.mapper" />72     </bean>73 74     <bean id="transactionManager"75         class="org.springframework.orm.hibernate4.HibernateTransactionManager">76         <property name="sessionFactory">77             <ref local="sessionFactory" />78         </property>79     </bean>80 81     <tx:advice id="txAdvice" transaction-manager="transactionManager">82         <tx:attributes>83             <tx:method name="do*" read-only="false" rollback-for="java.lang.Exception" />84             <tx:method name="*" propagation="SUPPORTS" read-only="true" />85         </tx:attributes>86     </tx:advice>87 88     <aop:config>89         <aop:pointcut id="pc"90             expression="execution(* com.cnblogs.yjmyzz.service.*.*(..))" />91         <aop:advisor pointcut-ref="pc" advice-ref="txAdvice" />92     </aop:config>93 94 </beans>
View Code

有几个关键点:

a) mybatis与hibernate的sessionFactory,共用同一个dataSource

b) 事务管理共用hibernate的事务管理

四、web.xml配置 

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 5  6     <display-name>struts2-app-sample</display-name> 7  8     <listener> 9         <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>10     </listener>11     <filter>12         <filter-name>log4jServletFilter</filter-name>13         <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>14     </filter>15     <filter-mapping>16         <filter-name>log4jServletFilter</filter-name>17         <url-pattern>/*</url-pattern>18         <dispatcher>REQUEST</dispatcher>19         <dispatcher>FORWARD</dispatcher>20         <dispatcher>INCLUDE</dispatcher>21         <dispatcher>ERROR</dispatcher>22     </filter-mapping>23 24     <context-param>25         <param-name>contextConfigLocation</param-name>26         <param-value>classpath:spring.xml</param-value>27     </context-param>28     <listener>29         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>30     </listener>31 32     <filter>33         <filter-name>struts2</filter-name>34         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>35         <init-param>36             <param-name>loggerFactory</param-name>37             <param-value>com.opensymphony.xwork2.util.logging.slf4j.Slf4jLoggerFactory</param-value>38         </init-param>39     </filter>40 41     <filter>42         <filter-name>openSessionInViewFilter</filter-name>43         <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>44         <init-param>45             <param-name>singleSession</param-name>46             <param-value>true</param-value>47         </init-param>48     </filter>49 50     <filter-mapping>51         <filter-name>struts2</filter-name>52         <url-pattern>/*</url-pattern>53     </filter-mapping>54 55     <welcome-file-list>56         <welcome-file>index.html</welcome-file>57     </welcome-file-list>58 59 </web-app>
View Code

五、代码调用

5.1 服务层基类

 1 package com.cnblogs.yjmyzz.service.support; 2  3 import java.io.Serializable; 4  5 import javax.annotation.Resource; 6  7 import org.apache.ibatis.session.SqlSessionFactory; 8 import org.hibernate.Session; 9 import org.hibernate.SessionFactory;10 import org.hibernate.StatelessSession;11 12 public class BaseServiceImpl implements Serializable {13 14     private static final long serialVersionUID = -33988360094493502L;15 16     /**17      * hibernate入口18      */19     @Resource(name = "sessionFactory")20     protected SessionFactory hibernateSessionFactory;21 22     /**23      * mybatis入口24      */25     @Resource(name = "sqlSessionFactory")26     protected SqlSessionFactory mybatisSessionFactory;27 28     protected Session openSession() {29         return hibernateSessionFactory.openSession();30     }31 32     protected StatelessSession openStatelessSession() {33         return hibernateSessionFactory.openStatelessSession();34     }35 36     protected Session getCurrentSession() {37         return hibernateSessionFactory.getCurrentSession();38     }39 40 }
View Code

其它各业务服务实现类,都继承自它。当然,也可以弄在一个BaseDAO,对hibernate做些封装

  1 package com.cnblogs.yjmyzz.dao;  2   3 import java.io.Serializable;  4 import java.util.List;  5   6 /**  7  * 基础数据库操作类  8  *   9  * @author ss 10  *  11  */ 12 public interface BaseDAO<T> { 13  14     /** 15      * 保存一个对象 16      *  17      * @param o 18      * @return 19      */ 20     public Serializable save(T o); 21  22     /** 23      * 删除一个对象 24      *  25      * @param o 26      */ 27     public void delete(T o); 28  29     /** 30      * 更新一个对象 31      *  32      * @param o 33      */ 34     public void update(T o); 35  36     /** 37      * 保存或更新对象 38      *  39      * @param o 40      */ 41     public void saveOrUpdate(T o); 42  43     /** 44      * 查询 45      *  46      * @param hql 47      * @return 48      */ 49     public List<T> find(String hql); 50  51     /** 52      * 查询集合 53      *  54      * @param hql 55      * @param param 56      * @return 57      */ 58     public List<T> find(String hql, Object[] param); 59  60     /** 61      * 查询集合 62      *  63      * @param hql 64      * @param param 65      * @return 66      */ 67     public List<T> find(String hql, List<Object> param); 68  69     /** 70      * 查询集合(带分页) 71      *  72      * @param hql 73      * @param param 74      * @param page 75      *            查询第几页 76      * @param rows 77      *            每页显示几条记录 78      * @return 79      */ 80     public List<T> find(String hql, Object[] param, Integer page, Integer rows); 81  82     /** 83      * 查询集合(带分页) 84      *  85      * @param hql 86      * @param param 87      * @param page 88      * @param rows 89      * @return 90      */ 91     public List<T> find(String hql, List<Object> param, Integer page, 92             Integer rows); 93  94     /** 95      * 获得一个对象 96      *  97      * @param c 98      *            对象类型 99      * @param id100      * @return Object101      */102     public T get(Class<T> c, Serializable id);103 104     /**105      * 获得一个对象106      * 107      * @param hql108      * @param param109      * @return Object110      */111     public T get(String hql, Object[] param);112 113     /**114      * 获得一个对象115      * 116      * @param hql117      * @param param118      * @return119      */120     public T get(String hql, List<Object> param);121 122     /**123      * select count(*) from 类124      * 125      * @param hql126      * @return127      */128     public Long count(String hql);129 130     /**131      * select count(*) from 类132      * 133      * @param hql134      * @param param135      * @return136      */137     public Long count(String hql, Object[] param);138 139     /**140      * select count(*) from 类141      * 142      * @param hql143      * @param param144      * @return145      */146     public Long count(String hql, List<Object> param);147 148     /**149      * 执行HQL语句150      * 151      * @param hql152      * @return 响应数目153      */154     public Integer executeHql(String hql);155 156     /**157      * 执行HQL语句158      * 159      * @param hql160      * @param param161      * @return 响应数目162      */163     public Integer executeHql(String hql, Object[] param);164 165     /**166      * 执行HQL语句167      * 168      * @param hql169      * @param param170      * @return171      */172     public Integer executeHql(String hql, List<Object> param);173 174 }
View Code
  1 package com.cnblogs.yjmyzz.dao.impl;  2   3 import com.cnblogs.yjmyzz.dao.BaseDAO;  4   5 import java.io.Serializable;  6 import java.util.List;  7   8 import org.hibernate.Query;  9 import org.hibernate.Session; 10 import org.hibernate.SessionFactory; 11 import org.springframework.beans.factory.annotation.Autowired; 12 import org.springframework.stereotype.Component; 13 import org.springframework.stereotype.Repository; 14  15 @Component("baseDAO") 16 @SuppressWarnings("all") 17 public class BaseDAOImpl<T> implements BaseDAO<T> { 18  19     private SessionFactory sessionFactory; 20  21     public SessionFactory getSessionFactory() { 22         return sessionFactory; 23     } 24  25     @Autowired 26     public void setSessionFactory(SessionFactory sessionFactory) { 27         this.sessionFactory = sessionFactory; 28     } 29  30     private Session getCurrentSession() { 31         return sessionFactory.getCurrentSession(); 32     } 33  34     public Serializable save(T o) { 35         return this.getCurrentSession().save(o); 36     } 37  38     public void delete(T o) { 39         this.getCurrentSession().delete(o); 40     } 41  42     public void update(T o) { 43         this.getCurrentSession().update(o); 44     } 45  46     public void saveOrUpdate(T o) { 47         this.getCurrentSession().saveOrUpdate(o); 48     } 49  50     public List<T> find(String hql) { 51         return this.getCurrentSession().createQuery(hql).list(); 52     } 53  54     public List<T> find(String hql, Object[] param) { 55         Query q = this.getCurrentSession().createQuery(hql); 56         if (param != null && param.length > 0) { 57             for (int i = 0; i < param.length; i++) { 58                 q.setParameter(i, param[i]); 59             } 60         } 61         return q.list(); 62     } 63  64     public List<T> find(String hql, List<Object> param) { 65         Query q = this.getCurrentSession().createQuery(hql); 66         if (param != null && param.size() > 0) { 67             for (int i = 0; i < param.size(); i++) { 68                 q.setParameter(i, param.get(i)); 69             } 70         } 71         return q.list(); 72     } 73  74     public List<T> find(String hql, Object[] param, Integer page, Integer rows) { 75         if (page == null || page < 1) { 76             page = 1; 77         } 78         if (rows == null || rows < 1) { 79             rows = 10; 80         } 81         Query q = this.getCurrentSession().createQuery(hql); 82         if (param != null && param.length > 0) { 83             for (int i = 0; i < param.length; i++) { 84                 q.setParameter(i, param[i]); 85             } 86         } 87         return q.setFirstResult((page - 1) * rows).setMaxResults(rows).list(); 88     } 89  90     public List<T> find(String hql, List<Object> param, Integer page, 91             Integer rows) { 92         if (page == null || page < 1) { 93             page = 1; 94         } 95         if (rows == null || rows < 1) { 96             rows = 10; 97         } 98         Query q = this.getCurrentSession().createQuery(hql); 99         if (param != null && param.size() > 0) {100             for (int i = 0; i < param.size(); i++) {101                 q.setParameter(i, param.get(i));102             }103         }104         return q.setFirstResult((page - 1) * rows).setMaxResults(rows).list();105     }106 107     public T get(Class<T> c, Serializable id) {108         return (T) this.getCurrentSession().get(c, id);109     }110 111     public T get(String hql, Object[] param) {112         List<T> l = this.find(hql, param);113         if (l != null && l.size() > 0) {114             return l.get(0);115         } else {116             return null;117         }118     }119 120     public T get(String hql, List<Object> param) {121         List<T> l = this.find(hql, param);122         if (l != null && l.size() > 0) {123             return l.get(0);124         } else {125             return null;126         }127     }128 129     public Long count(String hql) {130         return (Long) this.getCurrentSession().createQuery(hql).uniqueResult();131     }132 133     public Long count(String hql, Object[] param) {134         Query q = this.getCurrentSession().createQuery(hql);135         if (param != null && param.length > 0) {136             for (int i = 0; i < param.length; i++) {137                 q.setParameter(i, param[i]);138             }139         }140         return (Long) q.uniqueResult();141     }142 143     public Long count(String hql, List<Object> param) {144         Query q = this.getCurrentSession().createQuery(hql);145         if (param != null && param.size() > 0) {146             for (int i = 0; i < param.size(); i++) {147                 q.setParameter(i, param.get(i));148             }149         }150         return (Long) q.uniqueResult();151     }152 153     public Integer executeHql(String hql) {154         return this.getCurrentSession().createQuery(hql).executeUpdate();155     }156 157     public Integer executeHql(String hql, Object[] param) {158         Query q = this.getCurrentSession().createQuery(hql);159         if (param != null && param.length > 0) {160             for (int i = 0; i < param.length; i++) {161                 q.setParameter(i, param[i]);162             }163         }164         return q.executeUpdate();165     }166 167     public Integer executeHql(String hql, List<Object> param) {168         Query q = this.getCurrentSession().createQuery(hql);169         if (param != null && param.size() > 0) {170             for (int i = 0; i < param.size(); i++) {171                 q.setParameter(i, param.get(i));172             }173         }174         return q.executeUpdate();175     }176 177 }
View Code

至于mybatis,就没必要封装了,因为各xxxMapper接口,注入后可以直接拿来调

5.2 调用示例

 1 package com.cnblogs.yjmyzz.service.support; 2  3 import java.math.BigDecimal; 4 import java.util.*; 5  6 import javax.annotation.Resource; 7  8 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.stereotype.Service;10 11 import com.cnblogs.yjmyzz.convertor.OrderConverter;12 import com.cnblogs.yjmyzz.dao.BaseDAO;13 import com.cnblogs.yjmyzz.dto.Order;14 import com.cnblogs.yjmyzz.entity.TOrder;15 import com.cnblogs.yjmyzz.mybatis.mapper.OrderMapper;16 import com.cnblogs.yjmyzz.service.OrderService;17 18 @Service19 public class OrdersServiceImpl extends BaseServiceImpl implements OrderService {20 21     @Autowired22     OrderMapper orderMapper;23 24     @Resource25     BaseDAO<TOrder> tOrderDAO;26 27     private static final long serialVersionUID = 1513133416493770048L;28 29     @Override30     public Order get(String id) {31         // hibernate实现32         // return OrderConverter.toDto((TOrder) getCurrentSession().get(33         // TOrder.class, new BigDecimal(Integer.parseInt(id))));34         return OrderConverter.toDto(tOrderDAO.get(TOrder.class, new BigDecimal(35                 Integer.parseInt(id))));36 37         // mybatis实现38         // return39         // OrderConverter.toDto(orderMapper.getOrder(Integer.parseInt(id)));40     }41 42     @Override43     public List<Order> getAll() {44         List<TOrder> entities = orderMapper.getAllOrder();45         List<Order> orders = new ArrayList<Order>();46         for (TOrder entity : entities) {47             orders.add(OrderConverter.toDto(entity));48         }49         return orders;50     }51 52     @Override53     public void doSave(Order order) {54         // hibernate55         TOrder entity = OrderConverter.toEntity(order);56         if (entity.getId() != null) {57             entity = (TOrder) getCurrentSession().get(TOrder.class,58                     entity.getId());59 60             // update fields61             entity.setClientname(order.getClientName());62             entity.setAmount(new BigDecimal(order.getAmount()));63         }64         getCurrentSession().saveOrUpdate(entity);65     }66 67     @Override68     public void doRemove(String id) {69         // mybatis70         orderMapper.deleteOrder(Integer.parseInt(id));71 72     }73 74 }
View Code

其它注意事项:

hibernate 4.x以后,entity类上的注解,最好改成@Entity("TABLE_NAME"),而非以前的@Table(xxx),参考:

@Entity(name = "T_ORDER")public class TOrder implements java.io.Serializable {
View Code

 

mybatis3.2.8 + hibernate4.3.6 混用