spring hibernatee注解映射集合 spring配置的HQL中怎么引入包

一、注解类
声明了该实体bean映射指定的表(table),目录(catalog)和schema名字
声明了该实体bean的标识属性(对应表中的主键)。
3. @Column
声明了属性到列的映射。该注解有如下的属性:
name 可选,列名(默认值是属性名)
unique 可选,是否在该列上设置唯一约束(默认值false)
nullable 可选,是否设置该列的值可以为空(默认值false)
insertable 可选,该列是否作为生成的insert语句中的一个列(默认值true)
updatable 可选,该列是否作为生成的update语句中的一个列(默认值true)
columnDefinition 可选,为这个特定列覆盖sql ddl片段(这可能导致无法在不同数据库间移植)
table 可选,定义对应的表(默认为主表)
length 可选,列长度(默认值255)
precision 可选,列十进制精度(decimal precision)(默认值0)
scale 可选,如果列十进制数值范围(decimal scale)可用,在此设置(默认值0)
4. @GeneratedValue
声明了主键的生成策略。该注解有如下属性:
strategy 指定生成的策略(JPA定义的),这是一个GenerationType。默认是GenerationType. AUTO
GenerationType.AUTO 主键由程序控制
GenerationType.TABLE 使用一个特定的数据库表格来保存主键
GenerationType.IDENTITY 主键由数据库自动生成(主要是自动增长类型)
GenerationType.SEQUENCE 根据底层数据库的序列来生成主键,条件是数据库支持序列。这个值要与generator一起使用,generator 指定生成主键使用的生成器(可能是orcale中的序列)。
5. GenericGenerator
声明了一个hibernate的主键生成策略。支持十三种策略。该注解有如下属性:
name 指定生成器名称,它被应用于@GeneratedValue的generator的值。
strategy 指定具体生成器的类名(指定生成策略)。
parameters 得到strategy指定的具体生成器所用到的参数。
6. @Transient
声明了非持久化属性,即数据库中没有相应的映射字段,是一个普通属性。
7. @Temporal
声明了日期类型。
TemporalType.DATE 日期,例:
TemporalType.TIME 时间,例:22:50:30
TemporalType.TIMESTAMP 日期和时间,例: 22:51:30
二、看例子
Role.class
@Table(name="role")
public class Role implements Serializable{
private String roleId;
private String roleN
@Column(name="roleid")
@GenericGenerator(name="generator", strategy = "uuid.hex")
@GeneratedValue(generator="generator")
public String getRoleId() {
return roleId;
public void setRoleId(String roleId) {
this.roleId = roleId;
@Column(name="rolename")
public String getRoleName() {
return roleN
public void setRoleName(String roleName) {
this.roleName = roleN
Student.class
@Table(name="student")
public class Student implements Serializable{
private String stuId;
private String stuN
@Column(name="stuid")
@GenericGenerator(name="generator",strategy="uuid.hex")
@GeneratedValue(generator="generator")
public String getStuId() {
return stuId;
public void setStuId(String stuId) {
this.stuId = stuId;
@Column(name="stuno")
public String getStuNo() {
return stuN
public void setStuNo(String stuNo) {
this.stuName = stuNo;
三、在spring容器的配置
实体类写好之后,需要在spring容器中加载,在配置sessionFactory时进行配置,有两种配置的方式
1、使用annotatedClasses
&bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"&
&property name="dataSource" ref="dataSource" /&
&property name="hibernateProperties"&
&prop key="hibernate.dialect"&org.hibernate.dialect.MySQL5Dialect&/prop&
&/property&
&!-- &property name="packagesToScan"
value="com.demo.entity"/& --&
&property name="annotatedClasses"&
&value&com.demo.entity.Role&/value&
&value&com.demo.entity.Student&/value&
&/property&
2、使用packagesToScan直接对实体类进行扫描
&bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"&
&property name="dataSource" ref="dataSource" /&
&property name="hibernateProperties"&
&prop key="hibernate.dialect"&org.hibernate.dialect.MySQL5Dialect&/prop&
&/property&
&property name="packagesToScan"
value="com.demo.entity"/&
阅读(...) 评论()用spring,hibernate注解打成jar包后,在其他项目中无法识别的问题 - ITeye问答
情况是这样的:
我用spring和hibernate写了一个日志记录的组件,该程序本身使用了hibernate和spring的注解实现数据库对象映射和DAO的依赖注入等。
之后我把该工程导出为jar包,本意是希望在其他项目中可以直接调用封装的Logger对象,来完成操作日志记录和异常日志记录。但是现在在其他项目中,无法自动扫描出Logger组件(以及相应的DAO组件)。经过在spring.xml文件中手工配置Logger组件和DAO组件,可以被识别了。但domain中的数据库映射对象又无法识别出来,报unknown entity异常。
请问如何是好?谢谢大家
在你的jar包内有spring.xml配置文件,在引用你jar包的工程内也有spring的配置文件,注意加载配置文件的顺序,需要先夹在你jar包的配置文件spring.xml然后再加载工程内的配置文件,这样就不需要手工配置Logger组件和DAO组件。
PS:spring夹在配置文件的顺序是关键。
已解决问题
未解决问题博客分类:
个人努力,请不要转载,收藏就好
本工程为Maven工程,可以下载maven-eclipse插件进行项目导入
如果在eclipse中用WTP插件配置Tomcat运行,需要把maven项目转成Eclipse工程
请下载附件,解压后在工程文件夹运行以下maven命令:
call mvn eclipse:eclipse -Dwtpversion=2.0
以下是工程的pom.xml文件,用来管理所有依赖的jar包:
&?xml version="1.0" encoding="GBK"?&
&project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&
&modelVersion&4.0.0&/modelVersion&
&groupId&com.tianlihu.projects&/groupId&
&artifactId&S2S3H3_demo&/artifactId&
&version&1.0.0&/version&
&packaging&war&/packaging&
&properties&
&springframe.version&3.1.4.RELEASE&/springframe.version&
&unitils.version&3.1&/unitils.version&
&/properties&
&dependencies&
&dependency&
&groupId&xalan&/groupId&
&artifactId&xalan&/artifactId&
&version&2.7.1&/version&
&scope&runtime&/scope&
&/dependency&
&dependency&
&groupId&javax.servlet&/groupId&
&artifactId&servlet-api&/artifactId&
&version&2.5&/version&
&scope&provided&/scope&
&/dependency&
&dependency&
&groupId&javax.servlet&/groupId&
&artifactId&jsp-api&/artifactId&
&version&2.0&/version&
&scope&provided&/scope&
&/dependency&
&dependency&
&groupId&org.apache.struts&/groupId&
&artifactId&struts2-core&/artifactId&
&version&2.3.8&/version&
&/dependency&
&dependency&
&groupId&org.apache.struts&/groupId&
&artifactId&struts2-convention-plugin&/artifactId&
&version&2.3.8&/version&
&/dependency&
&dependency&
&groupId&org.apache.struts&/groupId&
&artifactId&struts2-spring-plugin&/artifactId&
&version&2.3.8&/version&
&/dependency&
&dependency&
&groupId&org.apache.struts&/groupId&
&artifactId&struts2-tiles-plugin&/artifactId&
&version&2.3.8&/version&
&/dependency&
&dependency&
&groupId&org.apache.tiles&/groupId&
&artifactId&tiles-jsp&/artifactId&
&version&2.0.4&/version&
&/dependency&
&dependency&
&groupId&javax.servlet&/groupId&
&artifactId&jstl&/artifactId&
&version&1.1.0&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-core&/artifactId&
&version&${springframe.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-aop&/artifactId&
&version&${springframe.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-context-support&/artifactId&
&version&${springframe.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-context&/artifactId&
&version&${springframe.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-aspects&/artifactId&
&version&${springframe.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-web&/artifactId&
&version&${springframe.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-beans&/artifactId&
&version&${springframe.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-jdbc&/artifactId&
&version&${springframe.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-asm&/artifactId&
&version&${springframe.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-tx&/artifactId&
&version&${springframe.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-webmvc&/artifactId&
&version&${springframe.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-orm&/artifactId&
&version&${springframe.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-struts&/artifactId&
&version&${springframe.version}&/version&
&/dependency&
&dependency&
&groupId&org.hibernate&/groupId&
&artifactId&hibernate-core&/artifactId&
&version&3.6.10.Final&/version&
&/dependency&
&dependency&
&groupId&org.hibernate&/groupId&
&artifactId&hibernate-ehcache&/artifactId&
&version&3.6.10.Final&/version&
&/dependency&
&dependency&
&groupId&aopalliance&/groupId&
&artifactId&aopalliance&/artifactId&
&version&1.0&/version&
&/dependency&
&dependency&
&groupId&org.aspectj&/groupId&
&artifactId&aspectjrt&/artifactId&
&version&1.6.9&/version&
&/dependency&
&dependency&
&groupId&org.aspectj&/groupId&
&artifactId&aspectjweaver&/artifactId&
&version&1.6.9&/version&
&/dependency&
&dependency&
&groupId&cglib&/groupId&
&artifactId&cglib&/artifactId&
&version&2.2&/version&
&/dependency&
&dependency&
&groupId&c3p0&/groupId&
&artifactId&c3p0&/artifactId&
&version&0.9.1.2&/version&
&/dependency&
&dependency&
&groupId&mysql&/groupId&
&artifactId&mysql-connector-java&/artifactId&
&version&5.1.23&/version&
&/dependency&
&dependency&
&groupId&commons-dbcp&/groupId&
&artifactId&commons-dbcp&/artifactId&
&version&1.4&/version&
&/dependency&
&dependency&
&groupId&commons-lang&/groupId&
&artifactId&commons-lang&/artifactId&
&version&2.5&/version&
&/dependency&
&dependency&
&groupId&commons-io&/groupId&
&artifactId&commons-io&/artifactId&
&version&2.0&/version&
&/dependency&
&dependency&
&groupId&commons-httpclient&/groupId&
&artifactId&commons-httpclient&/artifactId&
&version&3.1&/version&
&/dependency&
&dependency&
&groupId&commons-beanutils&/groupId&
&artifactId&commons-beanutils&/artifactId&
&version&1.8.3&/version&
&/dependency&
&dependency&
&groupId&commons-collections&/groupId&
&artifactId&commons-collections&/artifactId&
&version&3.2.1&/version&
&/dependency&
&dependency&
&groupId&junit&/groupId&
&artifactId&junit&/artifactId&
&version&4.8.1&/version&
&scope&test&/scope&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-test&/artifactId&
&version&${springframe.version}&/version&
&scope&test&/scope&
&/dependency&
&dependency&
&groupId&org.unitils&/groupId&
&artifactId&unitils-core&/artifactId&
&version&${unitils.version}&/version&
&scope&test&/scope&
&/dependency&
&dependency&
&groupId&org.unitils&/groupId&
&artifactId&unitils-dbunit&/artifactId&
&version&${unitils.version}&/version&
&scope&test&/scope&
&exclusions&
&exclusion&
&groupId&org.hibernate&/groupId&
&artifactId&hibernate&/artifactId&
&/exclusion&
&/exclusions&
&/dependency&
&dependency&
&groupId&org.unitils&/groupId&
&artifactId&unitils-easymock&/artifactId&
&version&${unitils.version}&/version&
&scope&test&/scope&
&/dependency&
&dependency&
&groupId&org.unitils&/groupId&
&artifactId&unitils-spring&/artifactId&
&version&${unitils.version}&/version&
&scope&test&/scope&
&/dependency&
&dependency&
&groupId&org.unitils&/groupId&
&artifactId&unitils-mock&/artifactId&
&version&${unitils.version}&/version&
&scope&test&/scope&
&/dependency&
&dependency&
&groupId&org.unitils&/groupId&
&artifactId&unitils-inject&/artifactId&
&version&${unitils.version}&/version&
&scope&test&/scope&
&/dependency&
&dependency&
&groupId&org.dbunit&/groupId&
&artifactId&dbunit&/artifactId&
&version&2.4.8&/version&
&scope&test&/scope&
&/dependency&
&dependency&
&groupId&ch.qos.logback&/groupId&
&artifactId&logback-classic&/artifactId&
&version&0.9.28&/version&
&/dependency&
&/dependencies&
&groupId&org.apache.maven.plugins&/groupId&
&artifactId&maven-compiler-plugin&/artifactId&
&version&2.3.2&/version&
&configuration&
&source&1.6&/source&
&target&1.6&/target&
&compilerVersion&1.6&/compilerVersion&
&encoding&GBK&/encoding&
&fork&true&/fork&
&meminitial&128m&/meminitial&
&maxmem&512m&/maxmem&
&/configuration&
&groupId&org.apache.maven.plugins&/groupId&
&artifactId&maven-resources-plugin&/artifactId&
&version&2.6&/version&
&configuration&
&encoding&GBK&/encoding&
&/configuration&
&/plugins&
&/project&
以下是web.xml,已经配置了Struts和Spring:
&?xml version="1.0" encoding="UTF-8"?&
&web-app version="2.5" xmlns="/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_2_5.xsd"&
&!-- 加载struts2核心 --&
&filter-name&struts2&/filter-name&
&filter-class&org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter&/filter-class&
&filter-mapping&
&filter-name&struts2&/filter-name&
&url-pattern&*&/url-pattern&
&/filter-mapping&
&filter-name&encodingFilter&/filter-name&
&filter-class&org.springframework.web.filter.CharacterEncodingFilter&/filter-class&
&init-param&
&param-name&encoding&/param-name&
&param-value&GBK&/param-value&
&/init-param&
&filter-mapping&
&filter-name&encodingFilter&/filter-name&
&url-pattern&*&/url-pattern&
&/filter-mapping&
&!-- 指明spring配置文件在何处 --&
&context-param&
&param-name&contextConfigLocation&/param-name&
&param-value&classpath*:applicationContext.xml&/param-value&
&/context-param&
&!-- 加载spring配置文件applicationContext.xml --&
&listener&
&listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&
&/listener&
&welcome-file-list&
&welcome-file&index.jsp&/welcome-file&
&/welcome-file-list&
&/web-app&
Spring主配置文件applicationContext.xml:
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"&
&context:annotation-config /&
&context:component-scan base-package="com.tianlihu.projects.ssh" /&
&context:property-placeholder location="classpath:hibernate.properties"/&
&import resource="classpath:hibernate.cfg.xml"/&
Struts用默认配置,因此不放置struts.xml
Hibernate的Spring配置hibernate.cfg.xml文件如下:
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"&
&!-- C3P0 数据源 --&
&bean id="dataSource" class="com.mchange.boPooledDataSource"&
&property name="driverClass" value="${hibernate.connection.driver_class}" /&
&property name="jdbcUrl" value="${hibernate.connection.url}" /&
&property name="user" value="${hibernate.connection.username}" /&
&property name="password" value="${hibernate.connection.password}" /&
&property name="initialPoolSize" value="${hibernate.connection.initialPoolSize}" /&
&property name="minPoolSize" value="${hibernate.connection.minPoolSize}" /&
&property name="maxPoolSize" value="${hibernate.connection.maxPoolSize}" /&
&property name="preferredTestQuery" value="select 1 from dual " /&
&!-- SessionFactory --&
&bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"&
&property name="dataSource" ref="dataSource" /&
&property name="packagesToScan" value="com.tianlihu.projects.ssh.*.po" /&
&property name="useTransactionAwareDataSource" value="true" /&
&property name="hibernateProperties"&
&prop key="hibernate.dialect"&${hibernate.dialect}&/prop&
&prop key="hibernate.show_sql"&${hibernate.show_sql}&/prop&
&prop key="hibernate.format_sql"&${hibernate.format_sql}&/prop&
&prop key="hibernate.temp.use_jdbc_metadata_defaults"&${hibernate.temp.use_jdbc_metadata_defaults}&/prop&
&prop key="hibernate.hbm2ddl.auto"&${hibernate.hbm2ddl.auto}&/prop&
&prop key="hibernate.cache.provider_class"&${hibernate.cache.provider_class}&/prop&
&prop key="hibernate.cache.use_query_cache"&${hibernate.cache.use_query_cache}&/prop&
&prop key="hibernate.cache.use_second_level_cache"&${hibernate.cache.use_second_level_cache}&/prop&
&prop key="hibernate.connection.autocommit"&false&/prop&
&prop key="hibernate.current_session_context_class"&thread&/prop&
&/property&
&!-- 配置事务管理 --&
&bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"&
&property name="sessionFactory" ref="sessionFactory" /&
&bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"&
&property name="sessionFactory" ref="sessionFactory" /&
&aop:aspectj-autoproxy /&
&tx:annotation-driven /&
以下这句用来指明,数据事务用Spring的声明式事务,即使用@Transactional注解
&tx:annotation-driven /&
数据库的属性配置文件hibernate.properties如下:
## hibernate
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.hbm2ddl.auto=create-drop
hibernate.temp.use_jdbc_metadata_defaults=false
## hibernate cache
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.cache.use_query_cache=false
hibernate.cache.use_second_level_cache=true
## C3P0 configuration
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GBK
hibernate.connection.username=root
hibernate.connection.password=root
hibernate.connection.initialPoolSize=1
hibernate.connection.minPoolSize=1
hibernate.connection.maxPoolSize=3
logback日志配置文件logback.xml如下:
&?xml version="1.0" encoding="GBK"?&
&configuration&
&appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"&
&pattern&%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{36} - %msg %n &/pattern&
&/encoder&
&/appender&
&appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender"&
&rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"&
&FileNamePattern&
logs/ssh.%d{yyyy-MM-dd-HH}.log
&/FileNamePattern&
&MaxHistory&10&/MaxHistory&
&/rollingPolicy&
&layout class="ch.qos.logback.classic.PatternLayout"&
%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{36} - %msg %n
&/Pattern&
&/appender&
&logger name="root" level="ERROR"&
&appender-ref ref="stdout" /&
&appender-ref ref="logfile" /&
&logger name="java.sql" level="DEBUG"&
&appender-ref ref="stdout" /&
&appender-ref ref="logfile" /&
&logger name="com.tianlihu" level="DEBUG"&
&appender-ref ref="stdout" /&
&appender-ref ref="logfile" /&
&/configuration&
以上是所有的配置文件。
JSP代码不再贴出,请下载附件。
以下是java程序代码
用于接收请求的Struts的Action类:UserAction.java
package com.tianlihu.projects.ssh.account.
import java.util.L
import org.apache.struts2.convention.annotation.A
import org.apache.struts2.convention.annotation.N
import org.apache.struts2.convention.annotation.ParentP
import org.apache.struts2.convention.annotation.R
import org.springframework.beans.factory.annotation.A
import org.
import com.tianlihu.projects.ssh.account.po.U
import com.tianlihu.projects.ssh.account.service.UserS
@ParentPackage("struts-default")
@Namespace("/account")
@Component
public class UserAction {
@Autowired
private UserService userS
private List&User&
private String userId;
@Action(value = "createUser", results = { @Result(name = "success", location = "/WEB-INF/userForm.jsp") })
public String createUser() {
message = "创建用户";
return "success";
@Action(value = "create", results = { @Result(name = "success", type = "redirect", params = { "encode", "true" }, location = "fetchUsers?message=${message}") })
public String create() {
User user = getUser();
userService.createUser(user);
message = "创建用户'" + userId + "'成功";
return "success";
@Action(value = "updateUser", results = { @Result(name = "success", location = "/WEB-INF/userForm.jsp") })
public String updateUser() {
User user = userService.findByUserId(userId);
name = user.getName();
password = user.getPassword();
age = String.valueOf(user.getAge());
message = "修改用户'" + userId + "'";
return "success";
@Action(value = "update", results = { @Result(name = "success", type = "redirect", params = { "encode", "true" }, location = "fetchUsers?message=${message}") })
public String update() {
User user = getUser();
userService.updateUser(user);
message = "修改用户'" + userId + "'成功";
return "success";
@Action(value = "delete", results = { @Result(name = "success", type = "redirect", params = { "encode", "true" }, location = "fetchUsers?message=${message}") })
public String deleteUser() {
userService.deleteUser(userId);
message = "删除用户'" + userId + "'成功";
return "success";
@Action(value = "fetchUsers", results = { @Result(name = "success", location = "/WEB-INF/users.jsp") })
public String fetchUsers() {
users = userService.findAll();
return "success";
private User getUser() {
User user = new User();
user.setUserId(userId);
user.setName(name);
user.setPassword(password);
user.setAge(Integer.parseInt(age));
public String getUserId() {
return userId;
public void setUserId(String userId) {
this.userId = userId;
public String getName() {
public void setName(String name) {
this.name =
public String getPassword() {
public void setPassword(String password) {
this.password =
public String getAge() {
public void setAge(String age) {
this.age =
public String getMessage() {
public void setMessage(String message) {
this.message =
public List&User& getUsers() {
public void setUsers(List&User& users) {
this.users =
处理逻辑的Service:UserService.java
因为Service只是处理增删改查,没有验证数据,所以比较简单,值得注意的是,@Transactional事务注解只能写在Service层,不能写在Action层,不然会出错,估计是对Spring3对Struts2支持的不太好
package com.tianlihu.projects.ssh.account.
import java.util.L
import org.springframework.beans.factory.annotation.A
import org.springframework.stereotype.S
import org.springframework.transaction.annotation.T
import com.tianlihu.projects.ssh.account.dao.GeneralD
import com.tianlihu.projects.ssh.account.po.U
public class UserService {
@Autowired
private GeneralDao generalD
public User findByUserId(String userId) {
return generalDao.findById(User.class, userId);
public List&User& findAll() {
return generalDao.findAll(User.class);
@Transactional
public void createUser(User user) {
generalDao.save(user);
@Transactional
public void updateUser(User user) {
generalDao.update(user);
@Transactional
public void deleteUser(String userId) {
generalDao.deleteById(User.class, userId);
@Transactional
public void deleteUser(User user) {
generalDao.delete(user);
Hibernate的PO对象:User.java
不再需要用XML进行表和实体类的映射了
package com.tianlihu.projects.ssh.account.
import java.io.S
import javax.persistence.C
import javax.persistence.E
import javax.persistence.Id;
@Entity(name = "AC_USER")
public class User implements Serializable {
private static final long serialVersionUID = -8707683L;
@Column(name = "USER_ID", length =50, nullable = false)
private String userId;
@Column(name = "NAME", length = 50, nullable = false)
@Column(name = "PASSWORD", length = 50, nullable = false)
@Column(name = "AGE", length = 20, nullable = false)
public String getUserId() {
return userId;
public void setUserId(String userId) {
this.userId = userId;
public String getName() {
public void setName(String name) {
this.name =
public String getPassword() {
public void setPassword(String password) {
this.password =
public int getAge() {
public void setAge(int age) {
this.age =
数据存储层通用DAO接口定义:GeneralDao.java
package com.tianlihu.projects.ssh.account.
import java.io.S
import java.util.L
public interface GeneralDao {
public &T& T findById(Class&T& type, Serializable id);
public &T& List&T& findAll(Class&T& type);
public void save(Object... entities);
public void update(Object... entities);
public void saveOrUpdate(Object entity);
public void delete(Object... entities);
public void deleteById(Class&?& type, Serializable id);
public void refresh(Object... entities);
public void flush();
DAO的实现类:GeneralDAOImpl.java
package com.tianlihu.projects.ssh.account.
import java.io.S
import java.util.L
import org.springframework.beans.factory.annotation.A
import org.springframework.orm.hibernate3.HibernateT
import org.springframework.stereotype.R
@Repository
public class GeneralDAOImpl implements GeneralDao {
@Autowired
private HibernateTemplate hibernateT
public &T& T findById(Class&T& type, Serializable id) {
return hibernateTemplate.get(type, id);
public &T& List&T& findAll(Class&T& type) {
return hibernateTemplate.loadAll(type);
public void save(Object... entities) {
for (Object entity : entities) {
hibernateTemplate.save(entity);
public void saveOrUpdate(Object entity) {
hibernateTemplate.saveOrUpdate(entity);
public void update(Object... entities) {
for (Object entity : entities) {
hibernateTemplate.update(entity);
public void delete(Object... entities) {
for (Object entity : entities) {
if (entity != null) {
hibernateTemplate.delete(entity);
public void deleteById(Class&?& type, Serializable id) {
if (id == null) {
Object entity = findById(type, id);
if (entity == null) {
delete(entity);
public void refresh(Object... entities) {
for (Object entity : entities) {
hibernateTemplate.refresh(entity);
public void flush() {
hibernateTemplate.flush();
这就是整个搭建框架,是一个内核。在应用时,可以配置freemarker之类的其余框架进来,用于实际开发
纯注解形式的代码有助于代码开发和管理,很代码更整洁,测试代码也可以用注解形式,也方便测试。因为注解形式把配置和代码放在一起,维护比较方便,减少了配置和代码的同步,也减少了代码量,使BUG数降低。个人推荐使用注解形式的配置
注解形式的代码,可以算一程契约形式的编程,只关心我想做什么,不关心怎么做,代码的耦合比较小,模块化比较强。JDK7也在主推模块化,这两个方向是以后的发展趋势
下载次数: 307
浏览 11340
浏览: 244549 次
来自: 石家庄
之前总会看到不定长参数,现在大概知道意思了。
因为当LRU用你就可以从头删了
一直对maven了解不多,准备借鉴一下。
建议写点源码安装的,这个没难度
谢谢 ,学到很多东西}

我要回帖

更多关于 spring hibernate 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信