首页 > 代码库 > 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>
最终打包后,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>
有几个关键点:
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>
五、代码调用
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 }
其它各业务服务实现类,都继承自它。当然,也可以弄在一个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 }
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 }
至于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 }
其它注意事项:
hibernate 4.x以后,entity类上的注解,最好改成@Entity("TABLE_NAME"),而非以前的@Table(xxx),参考:
@Entity(name = "T_ORDER")public class TOrder implements java.io.Serializable {
mybatis3.2.8 + hibernate4.3.6 混用