- 浏览: 72871 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
L504919167:
有个问题,“1.一对一主键关联 ”的时候。使用XML方式配置时 ...
hibernate和jpa注解关联总结 -
pangbuddy:
men4661273 写道一个都没看过,,,我也不是神,那就是 ...
程序员有影响的书 -
men4661273:
一个都没看过,,,我也不是神,那就是我out了
程序员有影响的书
spring+jpa的整合
数据库文件
实体类
泛型dao
泛型dao的实现
定义一个具体的dao继承泛型dao
GoodsDao的实现,这里继承泛型dao的实现
GoodsService 代码
Goodsservice实现
测试代码
spring的配置文件
数据库文件
/* Navicat MySQL Data Transfer Source Server : mysql Source Server Version : 50165 Source Host : localhost:3306 Source Database : testdb Target Server Type : MYSQL Target Server Version : 50165 File Encoding : 65001 Date: 2012-09-11 12:46:12 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `goods` -- ---------------------------- DROP TABLE IF EXISTS `goods`; CREATE TABLE `goods` ( `goodsId` int(11) unsigned NOT NULL AUTO_INCREMENT, `price` double(10,2) NOT NULL, `goodName` varchar(20) NOT NULL, PRIMARY KEY (`goodsId`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of goods -- ---------------------------- INSERT INTO `goods` VALUES ('1', '1.54', '冰激凌'); INSERT INTO `goods` VALUES ('2', '3.60', '面包'); INSERT INTO `goods` VALUES ('7', '5200.00', 'thinkpad笔记本'); INSERT INTO `goods` VALUES ('8', '5200.00', 'thinkpad笔记本');
实体类
package com.own.entity; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Goods implements Serializable { @Id @GeneratedValue(strategy=GenerationType.AUTO) public int getGoodsId() { return goodsId; } public void setGoodsId(int goodsId) { this.goodsId = goodsId; } public String getGoodName() { return goodName; } public void setGoodName(String goodName) { this.goodName = goodName; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } private int goodsId; private String goodName; private double price; }
泛型dao
package com.own.dao; import java.io.Serializable; public interface GenericDao<T extends Serializable,PK extends Serializable> { /** * 保存一个对象 * @param obj */ void saveObject(T obj); /** * 删除一个对象 * @param obj */ void deleteObject(T obj); /** * 更新一个对象 * @param ojb */ void updateObject(T ojb); /** * 根据主键id找到一个对象 * @param id */ T findObject(PK id); }
泛型dao的实现
package com.own.dao.impl; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import com.own.dao.GenericDao; public abstract class GenericDaoImpl<T extends Serializable ,PK extends Serializable> implements GenericDao<T,PK>{ @PersistenceContext protected EntityManager em; private Class<T> entityClass; @SuppressWarnings("unchecked") public GenericDaoImpl(){ /** * 获取泛型的实际类型 */ ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass(); entityClass = (Class<T>)type.getActualTypeArguments()[0]; } @Override public void deleteObject(T obj) { // TODO Auto-generated method stub em.remove(em.merge(obj)); } @Override public T findObject(PK id) { // TODO Auto-generated method stub return (T)em.find(entityClass,id); } @Override public void saveObject(T obj) { // TODO Auto-generated method stub em.persist(obj); } @Override public void updateObject(T obj) { // TODO Auto-generated method stub em.merge(obj); } }
定义一个具体的dao继承泛型dao
package com.own.dao; import com.own.entity.Goods; public interface GoodsDao extends GenericDao<Goods,Integer> { /** * 添加需要的方法 */ }
GoodsDao的实现,这里继承泛型dao的实现
package com.own.dao.impl; import org.springframework.stereotype.Repository; import com.own.dao.GoodsDao; import com.own.entity.Goods; @Repository("goodsDao") public class GoodsDaoImpl extends GenericDaoImpl<Goods,Integer> implements GoodsDao { }
GoodsService 代码
package com.own.service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.own.entity.Goods; public interface GoodsService { @Transactional(propagation=Propagation.REQUIRED,rollbackFor=RuntimeException.class) void saveGoods(Goods goods); @Transactional(propagation=Propagation.REQUIRED,rollbackFor=RuntimeException.class) void removeGoods(Goods goods); //查找方法不需要配置事务 Goods getGoodsById(int id); /** * 配置事务 * */ @Transactional(propagation=Propagation.REQUIRED,rollbackFor=RuntimeException.class) void updateGoods(Goods goods); }
Goodsservice实现
package com.own.service.impl; import javax.annotation.Resource; import org.springframework.stereotype.Service; import com.own.dao.GoodsDao; import com.own.entity.Goods; import com.own.service.GoodsService; @Service("goodsService") public class GoodsServiceImpl implements GoodsService { @Resource(name="goodsDao") private GoodsDao goodsDao; @Override public Goods getGoodsById(int id) { // TODO Auto-generated method stub return goodsDao.findObject(id); } @Override public void removeGoods(Goods goods) { // TODO Auto-generated method stub goodsDao.deleteObject(goods); } @Override public void saveGoods(Goods goods) { // TODO Auto-generated method stub goodsDao.saveObject(goods); } @Override public void updateGoods(Goods goods) { // TODO Auto-generated method stub goodsDao.updateObject(goods); } }
测试代码
package com.own.service; import static org.junit.Assert.*; 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.own.entity.Goods; @ContextConfiguration(locations={"classpath:applicationContext.xml"}) @RunWith(SpringJUnit4ClassRunner.class) public class GoodsServiceTest { @Resource(name="goodsService") private GoodsService goodsService; @Test public void testSaveGoods() { Goods goods = new Goods(); goods.setGoodName("电视机"); goods.setPrice(2300); goodsService.saveGoods(goods); } @Test public void testRemoveGoods() { Goods goods = new Goods(); goods.setGoodsId(2); //Goods good = (Goods)goodsService.getGoodsById(1); goodsService.removeGoods(goods); } @Test public void testGetGoodsById() { Goods good = (Goods)goodsService.getGoodsById(1); String name = good.getGoodName(); System.out.println(good.getGoodName()); assertEquals("冰激凌",name); } @Test public void testUpdateGoods() { Goods good = new Goods(); good.setGoodsId(7); good.setGoodName("巧克力"); goodsService.updateGoods(good); } }
spring的配置文件
<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:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" 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 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <!-- 配置连接池 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" > <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/shopping?useUnicode=true&characterEncoding=UTF-8" /> <property name="username" value="root" ></property> <property name="password" value="zyp" ></property> <property name="maxActive" value="20" ></property> <property name="initialSize" value="3" > </property> <property name="maxWait" value="60000" ></property> <property name="maxIdle"><value>20</value></property> <property name="minIdle"><value>0</value></property> </bean> <!-- 配置jap实现提供商的特性 --> <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" > <property name="database" value="MYSQL" ></property> </bean> <!-- 持久化提供商 --> <bean id="persistenceProvider" class="org.hibernate.ejb.HibernatePersistence"/> <!--配置spring对jpa的支持 --> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" > <property name="dataSource"> <ref bean="dataSource" /> </property> <!-- 持久化单原名称 --> <property name="persistenceUnitName" value="zyp" /> <!-- 持久化提供商 --> <property name="persistenceProvider" > <ref bean="persistenceProvider" /> </property> <!-- 特性提供商配置 --> <property name="jpaVendorAdapter" > <ref bean="jpaVendorAdapter" /> </property> <!-- jpa 属性配置 --> <property name="jpaProperties"> <props> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.max_fetch_depth">3</prop> <prop key="hibernate.hbm2ddl.auto">false</prop> <prop key="hibernate.jdbc.fetch_size" >18</prop> <prop key="hibernate.jdbc.batch_size" >10</prop> <prop key="hibernate.format_sql" >true</prop> </props> </property> </bean> <context:component-scan base-package="com.own" /> <!-- 配置事物管理 --> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <tx:annotation-driven transaction-manager="transactionManager"/> </beans>
发表评论
-
mysql sqlserver oracel分页sql语句
2013-04-07 21:59 1325项目一直都用的hibernate,很少对分页查询写sql语句, ... -
数据库事物乐观锁和悲观锁
2012-10-16 00:09 1131数据库事物单个逻辑单元工作执行的一系列操作,就是一些sql语句 ... -
jpa persist,meger,remove,find方法介绍
2012-09-17 11:18 9126jpa规范提供了EntityManager接口来操作数据库,它 ... -
spring事务管理
2012-09-13 17:41 1422spring 提供了声明事务管 ... -
mybatis入门例子
2012-09-11 12:55 3809mybatis是由ibatis发展而来的,是一个很好用的jav ... -
测试访问时间的Filter
2012-08-24 13:54 865今天写了一个测试访问某个资源花费多少时间的过滤器,给大家分享一 ... -
servelt filter listener 的生命周期
2012-08-17 15:24 42261. servlet 当第一次请求一个servlet资 ...
相关推荐
在学习jpa时候做的一个struts2+spring+jpa整合的完整例子 包含分页,一个简单的 资产入库系统 并实现了登陆等。
spring+jpa+全局异常+单元测试spring+jpa+全局异常+单元测试spring+jpa+全局异常+单元测试spring+jpa+全局异常+单元测试spring+jpa+全局异常+单元测试
基于_Struts_2+Spring+JPA_框架的WEB_应用
Spring+Struts2+JPA入门小例子
基于Spring+JPA+Velocity+Ehcache的商城系统源码.zip
SpringMVC+Spring+JPA+LayUI+JSP学生选课系统 本项目为计算机学生选课系统,可作为期末作品,供参考 项目技术: SpringMVC Spring SpringDataJPA LayUI JSP MySQL5.7
JSF+Spring+JPA(Hibernate实现)的环境搭建.doc JSF+Spring+JPA(Hibernate实现)的环境搭建.doc
Struct + spring + jpa
使用Struts2.2.3+Spring3.0.5+JPA2.0框架案例。 包含包。使用eclipse导入,直接可以运行。编码使用GBK。 出现乱码的话,把默认编码改为GBK就OK了。
play +spring +jpa +scala 简单的例子
spring注解完整版+spring data jpa官方文档中文翻译+JPA2.0官方文档 文档内容齐全 值得参考学习
该项目是一个基于Spring+Spring Boot+JPA+Thymeleaf+Bootstrap+Mysql实现的单表增删改查。
Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA
spring+springmvc+hibernate+jpa环境搭建
持久层框架:Spring boot Jpa 安全框架:Spring Security 缓存框架:Redis 日志打印:logback+log4jdbc 接口文档 swagger2 其他:fastjson,aop,MapStruct等。 页面框架:Vue 前端源码:eladmin-qt 后端源码:el...
SpringMVC+Spring+JPA+Maven的框架搭建的详细说明文档。具体包括项目整体结构,及如何使用Maven构建
strut2+spring+jpa开发权限管理系统。
IDEA + SpringBoot + SpringSecurity + JPA 实现用户角色权限登录认证,security过滤请求资源,用户登录获取用户角色权限,过滤用户非法请求等
Struts2+Spring+Jpa+ExtJS Crud mysql 含jar文件 myeclipse版本
Struts+Hibernate+spring+jpa+lucene+jbpm+compass配置文件