点我下载工程代码
实体类
Department
package
com.sj.bean;
import
java.util.Set;
import
javax.persistence.CascadeType;
import
javax.persistence.Column;
import
javax.persistence.Entity;
import
javax.persistence.GeneratedValue;
import
javax.persistence.GenerationType;
import
javax.persistence.Id;
import
javax.persistence.OneToMany;
import
javax.persistence.Table;
@Entity
@Table(name
=
"
department
"
,catalog
=
"
sj
"
)
public
class
Department {
private
int
id;
private
String name;
private
Set
<
Employee
>
sets;
@Id
@Column(name
=
"
id
"
)
@GeneratedValue(strategy
=
GenerationType.AUTO)
public
int
getId() {
return
id;
}
public
void
setId(
int
id) {
this
.id
=
id;
}
@Column(name
=
"
name
"
)
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name
=
name;
}
@OneToMany(mappedBy
=
"
department
"
,cascade
=
CascadeType.ALL)
public
Set
<
Employee
>
getSets() {
return
sets;
}
public
void
setSets(Set
<
Employee
>
sets) {
this
.sets
=
sets;
}
}
Employee
package
com.sj.bean;
import
java.io.Serializable;
import
javax.persistence.CascadeType;
import
javax.persistence.Column;
import
javax.persistence.Entity;
import
javax.persistence.GeneratedValue;
import
javax.persistence.GenerationType;
import
javax.persistence.Id;
import
javax.persistence.JoinColumn;
import
javax.persistence.ManyToOne;
import
javax.persistence.Table;
@SuppressWarnings(
"
serial
"
)
@Entity
@Table(name
=
"
employee
"
,catalog
=
"
sj
"
)
public
class
Employee
implements
Serializable{
private
int
id;
private
String name;
private
Department department;
@Id
@GeneratedValue(strategy
=
GenerationType.AUTO)
@Column(name
=
"
id
"
)
public
int
getId() {
return
id;
}
public
void
setId(
int
id) {
this
.id
=
id;
}
@Column(name
=
"
name
"
)
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name
=
name;
}
@ManyToOne(cascade
=
CascadeType.ALL)
@JoinColumn(name
=
"
deptid
"
)
public
Department getDepartment() {
return
department;
}
public
void
setDepartment(Department department) {
this
.department
=
department;
}
}
BaseDAO
package
com.sj.dao;
import
java.util.List;
public
interface
BaseDAO
<
T
>
{
List
<
T
>
listAll();
Object findById(Class
<
T
>
c,
int
id);
boolean
save(Object object);
boolean
update(Object object);
boolean
delete(Object object);
}
BaseDAOImpl
package
com.sj.dao;
import
java.util.List;
import
javax.persistence.EntityManager;
import
javax.persistence.PersistenceContext;
import
javax.persistence.Query;
import
org.springframework.stereotype.Component;
@Component(
"
baseDAO
"
)
public
class
BaseDAOImpl
<
T
>
implements
BaseDAO
<
T
>
{
@PersistenceContext(unitName
=
"
sjPU
"
)
private
EntityManager entityManager;
public
boolean
delete(Object object) {
try
{
entityManager.remove(object);
return
true
;
}
catch
(Exception e) {
e.printStackTrace();
}
return
false
;
}
public
Object findById(Class
<
T
>
c,
int
id) {
try
{
return
entityManager.find(c, id);
}
catch
(Exception e) {
e.printStackTrace();
}
return
null
;
}
public
boolean
save(Object object) {
try
{
entityManager.persist(object);
return
true
;
}
catch
(Exception e) {
e.printStackTrace();
}
return
false
;
}
public
boolean
update(Object object) {
try
{
entityManager.merge(object);
return
true
;
}
catch
(Exception e) {
e.printStackTrace();
}
return
false
;
}
@SuppressWarnings(
"
unchecked
"
)
public
List
<
T
>
listAll() {
try
{
Query query
=
entityManager.createQuery(
"
from Employee
"
);
return
query.getResultList();
}
catch
(Exception e) {
e.printStackTrace();
}
return
null
;
}
}
BaseService
package
com.sj.service;
import
java.util.List;
public
interface
BaseService
<
T
>
{
List
<
T
>
listAll();
Object findById(Class
<
T
>
c,
int
id);
boolean
save(Object object);
boolean
update(Object object);
boolean
delete(Object object);
}
BaseServiceImpl
package
com.sj.service;
import
java.util.List;
import
javax.annotation.Resource;
import
org.springframework.stereotype.Component;
import
org.springframework.transaction.annotation.Propagation;
import
org.springframework.transaction.annotation.Transactional;
import
com.sj.dao.BaseDAO;
@Component(
"
baseServiceImpl
"
)
public
class
BaseServiceImpl
<
T
>
implements
BaseService
<
T
>
{
@Resource(name
=
"
baseDAO
"
)
private
BaseDAO
<
T
>
baseDAO;
public
BaseDAO
<
T
>
getBaseDAO() {
return
baseDAO;
}
public
void
setBaseDAO(BaseDAO
<
T
>
baseDAO) {
this
.baseDAO
=
baseDAO;
}
@Transactional(propagation
=
Propagation.REQUIRED)
public
boolean
delete(Object object) {
return
baseDAO.delete(object);
}
@Transactional(propagation
=
Propagation.REQUIRED)
public
Object findById(Class
<
T
>
c,
int
id) {
return
baseDAO.findById(c, id);
}
@Transactional(propagation
=
Propagation.REQUIRED)
public
List
<
T
>
listAll() {
return
baseDAO.listAll();
}
@Transactional(propagation
=
Propagation.REQUIRED)
public
boolean
save(Object object) {
return
baseDAO.save(object);
}
@Transactional(propagation
=
Propagation.REQUIRED)
public
boolean
update(Object object) {
return
baseDAO.update(object);
}
}
EmployeeAction
package
com.sj.action;
import
java.util.List;
import
javax.annotation.Resource;
import
org.springframework.stereotype.Controller;
import
org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RequestMethod;
import
org.springframework.web.bind.annotation.ResponseBody;
import
org.springframework.web.servlet.ModelAndView;
import
com.sj.bean.Employee;
import
com.sj.service.BaseService;
@Controller
@RequestMapping(
"
/employee.action
"
)
public
class
EmployeeAction {
@SuppressWarnings(
"
unchecked
"
)
@Resource(name
=
"
baseServiceImpl
"
)
private
BaseService service;
@SuppressWarnings(
"
unchecked
"
)
@RequestMapping(method
=
RequestMethod.GET,params
=
"
method=listAll
"
)
public
ModelAndView listAll(){
List
<
Employee
>
list
=
service.listAll();
return
new
ModelAndView(
"
list
"
).addObject(
"
list
"
, list);
}
@ResponseBody
@RequestMapping(params
=
"
method=listOther
"
)
public
String listOther(){
String str
=
"
<font color='red'>HelloWorld</font>
"
;
return
str;
}
}
TestApp
package
com.sj.test;
import
javax.annotation.Resource;
import
org.junit.Test;
import
org.junit.runner.RunWith;
import
org.springframework.test.context.ContextConfiguration;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import
com.sj.bean.Department;
import
com.sj.bean.Employee;
import
com.sj.service.BaseService;
@ContextConfiguration(locations
=
"
file:D:\\Program Files\\MyEclipse 8.5-workspace\\sj\\WebRoot\\WEB-INF\\applicationContext.xml
"
)
@RunWith(SpringJUnit4ClassRunner.
class
)
public
class
TestApp {
@SuppressWarnings(
"
unchecked
"
)
@Resource(name
=
"
baseServiceImpl
"
)
BaseService baseService;
@Test
public
void
save(){
Employee employee
=
new
Employee();
employee.setName(
"
张三
"
);
Department department
=
new
Department();
department.setName(
"
软件测试组
"
);
employee.setDepartment(department);
baseService.save(employee);
}
@SuppressWarnings(
"
unchecked
"
)
@Test
public
void
query(){
Employee employee
=
(Employee) baseService.findById(Employee.
class
,
2
);
System.out.println(employee.getId()
+
"
\t
"
+
employee.getName()
+
"
\t
"
+
employee.getDepartment().getName());
}
}
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:p
=
"
http://www.springframework.org/schema/p
"
xmlns:aop
=
"
http://www.springframework.org/schema/aop
"
xmlns:tx
=
"
http://www.springframework.org/schema/tx
"
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/tx
http:
//
www.springframework.org/schema/tx/spring-tx.xsd
http:
//
www.springframework.org/schema/aop
http:
//
www.springframework.org/schema/aop/spring-aop.xsd
http:
//
www.springframework.org/schema/context
http:
//
www.springframework.org/schema/context/spring-context.xsd">
<
context:annotation
-
config
/>
<
context:component
-
scan base
-
package
=
"
com.sj.*
"
/>
<
aop:aspectj
-
autoproxy
/>
<
tx:annotation
-
driven transaction
-
manager
=
"
transactionManager
"
/>
<
bean id
=
"
entityManagerFactory
"
class
=
"
org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean
"
>
<
property name
=
"
persistenceUnitName
"
value
=
"
sjPU
"
/>
<
property name
=
"
persistenceXmlLocation
"
value
=
"
classpath:META-INF/persistence.xml
"
></
property
>
</
bean
>
<
bean id
=
"
transactionManager
"
class
=
"
org.springframework.orm.jpa.JpaTransactionManager
"
>
<
property name
=
"
entityManagerFactory
"
ref
=
"
entityManagerFactory
"
/>
</
bean
>
</
beans
>
dispatcherServlet-servlet.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:p
=
"
http://www.springframework.org/schema/p
"
xmlns:aop
=
"
http://www.springframework.org/schema/aop
"
xmlns:tx
=
"
http://www.springframework.org/schema/tx
"
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/tx
http:
//
www.springframework.org/schema/tx/spring-tx.xsd
http:
//
www.springframework.org/schema/aop
http:
//
www.springframework.org/schema/aop/spring-aop.xsd
http:
//
www.springframework.org/schema/context
http:
//
www.springframework.org/schema/context/spring-context.xsd">
<
context:component
-
scan base
-
package
=
"
com.sj.action
"
/>
<
bean id
=
"
defaultAnnotationHandlerMapping
"
class
=
"
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
"
/>
<
bean id
=
"
annotationMethodHandlerAdapter
"
class
=
"
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
"
>
<
property name
=
"
messageConverters
"
>
<
list
>
<
bean
class
=
"
org.springframework.http.converter.StringHttpMessageConverter
"
>
<
property name
=
"
supportedMediaTypes
"
>
<
list
>
<
value
>
text
/
html;charset
=
utf
-
8
</
value
>
<
value
>
text
/
xml
</
value
>
<
value
>
text
/
plain
</
value
>
</
list
>
</
property
>
</
bean
>
</
list
>
</
property
>
</
bean
>
<
bean id
=
"
internalResourceViewResolver
"
class
=
"
org.springframework.web.servlet.view.InternalResourceViewResolver
"
>
<
property name
=
"
suffix
"
value
=
"
.jsp
"
></
property
>
<
property name
=
"
prefix
"
value
=
"
/
"
></
property
>
<
property name
=
"
viewClass
"
value
=
"
org.springframework.web.servlet.view.JstlView
"
/>
</
bean
>
</
beans
>
web.xml
<?
xml version
=
"
1.0
"
encoding
=
"
UTF-8
"
?>
<
web
-
app version
=
"
2.5
"
xmlns
=
"
http://java.sun.com/xml/ns/javaee
"
xmlns:xsi
=
"
http://www.w3.org/2001/XMLSchema-instance
"
xsi:schemaLocation
=
"
http://java.sun.com/xml/ns/javaee
http:
//
java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<
welcome
-
file
-
list
>
<
welcome
-
file
>
index.jsp
</
welcome
-
file
>
</
welcome
-
file
-
list
>
<
listener
>
<
listener
-
class
>
org.springframework.web.context.ContextLoaderListener
</
listener
-
class
>
</
listener
>
<
context
-
param
>
<
param
-
name
>
contextConfigLocation
</
param
-
name
>
<
param
-
value
>/
WEB
-
INF
/
applicationContext.xml
</
param
-
value
>
</
context
-
param
>
<
servlet
>
<
servlet
-
name
>
dispatcherServlet
</
servlet
-
name
>
<
servlet
-
class
>
org.springframework.web.servlet.DispatcherServlet
</
servlet
-
class
>
<
load
-
on
-
startup
>
1
</
load
-
on
-
startup
>
</
servlet
>
<
servlet
-
mapping
>
<
servlet
-
name
>
dispatcherServlet
</
servlet
-
name
>
<
url
-
pattern
>*
.action
</
url
-
pattern
>
</
servlet
-
mapping
>
</
web
-
app
>
src/META-INF/persistence.xml
<?
xml version
=
"
1.0
"
encoding
=
"
UTF-8
"
?>
<
persistence xmlns
=
"
http://java.sun.com/xml/ns/persistence
"
xmlns:xsi
=
"
http://www.w3.org/2001/XMLSchema-instance
"
xsi:schemaLocation
=
"
http://java.sun.com/xml/ns/persistence
http:
//
java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version
=
"
1.0
"
>
<
persistence
-
unit name
=
"
sjPU
"
transaction
-
type
=
"
RESOURCE_LOCAL
"
>
<
provider
>
org.hibernate.ejb.HibernatePersistence
</
provider
>
<
properties
>
<
property name
=
"
hibernate.connection.driver_class
"
value
=
"
com.mysql.jdbc.Driver
"
/>
<
property name
=
"
hibernate.connection.url
"
value
=
"
jdbc:mysql://localhost:3306/sj
"
/>
<
property name
=
"
hibernate.connection.username
"
value
=
"
root
"
/>
<
property name
=
"
hibernate.connection.password
"
value
=
"
root
"
/>
<
property name
=
"
hibernate.show_sql
"
value
=
"
true
"
/>
<
property name
=
"
hibernate.format_sql
"
value
=
"
true
"
/>
<
property name
=
"
hibernate.hbm2ddl.auto
"
value
=
"
update
"
/>
</
properties
>
</
persistence
-
unit
>
</
persistence
>
list.jsp
<%
@ page language
=
"
java
"
contentType
=
"
text/html; charset=UTF-8
"
pageEncoding
=
"
UTF-8
"
%>
<%
@ taglib prefix
=
"
c
"
uri
=
"
http://java.sun.com/jsp/jstl/core
"
%>
<!
DOCTYPE html PUBLIC
"
-//W3C//DTD HTML 4.01 Transitional//EN
"
"
http://www.w3.org/TR/html4/loose.dtd
"
>
<
html
>
<
head
>
<
meta http
-
equiv
=
"
Content-Type
"
content
=
"
text/html; charset=UTF-8
"
>
<
title
>
雇员信息列表
</
title
>
</
head
>
<
body
>
<
c:
if
test
=
"
${empty requestScope.list}
"
>
对不起,没有要显示的记录
!!!!
</
c:
if
>
<
c:
if
test
=
"
${!empty requestScope.list}
"
>
<
c:forEach items
=
"
${requestScope.list}
"
var
=
"
s
"
>
<
c:out value
=
"
${s.id}
"
/>
<
c:out value
=
"
${s.name}
"
/>
<
c:out value
=
"
${s.department.name}
"
/>
<
br
/>
</
c:forEach
>
</
c:
if
>
</
body
>
</
html
>
这里重点关注applicationContext.xml、dispatcherServlet-servlet.xml、EmployeeAction。其中dispatcherServlet-servlet.xml文件的命名规则遵循web.xml中配置的dispatcherServlet servlet的servlet-name属性的值。dispatcherServlet-servlet.xml里面配置了开启SpringMVC的注解解析器以及视图渲染器,和处理response时返回给浏览器的头信息.
点我下载工程代码