`
yulon
  • 浏览: 116948 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

跟我一起写大虾网(第2天)

阅读更多

一、设计用户相关实体类

   积分等级类:

@Entity
public class UserGrade implements Serializable{

	private static final long serialVersionUID = 552495765344987180L;
	private long gradeid;
	/**积分**/
	private long score=BaseConfig.getInitScore();  //初始化积分为100
	/**等级**/
	private int grade;
	private User user ;
	/**荣誉称号*/
	private String honour ;
	
	private int solvecount=0;
	
	@OneToOne(cascade={CascadeType.REFRESH}) @JoinColumn(name="userid")
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	@Column
	public int getSolvecount() {
		return solvecount;
	}
	public void setSolvecount(int solvecount) {
		this.solvecount = solvecount;
	}
	@Id @GeneratedValue
	public long getGradeid() {
		return gradeid;
	}
	public void setGradeid(long gradeid) {
		this.gradeid = gradeid;
	}
	public long getScore() {
		return score;
	}
	public void setScore(long score) {
		this.score = score;
	}
	@Column(length=5)
	public int getGrade() {
		return grade;
	}
	public void setGrade(int grade)  {
		this.grade = IntegralGrade.getInstance().getGrade(this.getScore());
	}

	@Transient
	public String getHonour() {
		return honour;
	}
	public void setHonour(String honour) {
		this.honour = IntegralGrade.getInstance().getHonour(this.getGrade());
	}
	
}

 知识提示:@GeneratedValue表示由jpa自动选择标识字段生成策略; @OneToOne(cascade={CascadeType.REFRESH}) @JoinColumn(name="userid")  与User类一对一关系,级联刷新,维护字段是userid;@Transient不与数据库表字段进行映射.

 

二、接口类设计

 

 

 

说明:Service具体实现类交给了Spring容器管理,通过注解方式或XML配置文件的方式将其注入到相应的接口,这样就实现了接口与实现分离的效果,便于系统日后的维护与升级。本系统采用JPA注解方式实注入功能
 

BaseDaoImpl类的实现代码:

 

@Transactional
public  abstract class BaseDaoImpl<T> implements BaseDao<T> {
	private Class<T> entityClass = GenericsUtils.getSuperClassGenricType(this.getClass());
	//注入一个实体管理器,spring会从EntityManagerFactory里得到一个
	//EntityManager对象
	@PersistenceContext(unitName="mydaxia") 
	protected EntityManager em;
	
	public void delete(Serializable... ids) {   
		for(Serializable id :ids){
			em.remove(em.getReference(this.entityClass, id));
		}
	}
	@Transactional(propagation=Propagation.NOT_SUPPORTED)
	public T find(Serializable entityId) {
		return em.find(this.entityClass, entityId);
	}
	@Transactional(propagation=Propagation.NOT_SUPPORTED)
	public T getReference(Serializable entityId){
		return em.getReference(this.entityClass, entityId);
	}
	public void save(T entity) {
		em.persist(entity);
	}
	public void update(T entity) {
		//游离状态下更新
		em.merge(entity);
	}
	@Transactional(propagation=Propagation.NOT_SUPPORTED)
	public List<T> getDatas() {
		String entityName = getEntityName(this.entityClass);
		return em.createQuery("from "+entityName).getResultList();
	}
	/**
	 * 获取实体类简单名称
	 * @param <E>
	 * @param entityClass
	 * @return
	 */
	private static <E> String getEntityName(Class<E> entityClass) {
		String entityName = entityClass.getSimpleName();//类的简单类名
		return entityName;
	}
}

 

知识提示: 对于只用于读取数据的业务方法,一般不要开启事务,因为开启事务会对执行效率产生影响(需要时间).GenericsUtils.getSuperClassGenricType(this.getClass()),GenericsUtils是一个工具类,此方法是获取当前类的类实例,即Class实例.

三、测试CURD方法

public class CURDTest {
	private static ApplicationContext act = null;
	private static UserService userService = null;
	private static UserRoleService userRoleService=null;
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		act = new ClassPathXmlApplicationContext("beans.xml");
		userService = (UserService)act.getBean("userServiceBean");
		userRoleService=(UserRoleService)act.getBean("userRoleServiceBean");
	}

	@Test
	public void saveUser(){
		User user = new User();
		user.setUsername("test");
		user.setPassword("123456");
		user.setEmail("andyeveny@126.com");
		user.setUserrole(userRoleService.find("user"));
		userService.save(user);
	}
	@Test
	public void saveUserRoles(){
		UserRole userRole=new UserRole();
		userRole.setName("普通用户");
		userRole.setSn("user");
		userRoleService.save(userRole);
	}
}

 

  • 大小: 28.9 KB
  • 大小: 16.2 KB
1
0
分享到:
评论
1 楼 east_java 2010-02-09  
lz的这个usergrade怎么与user关联的?

是在每次有积分变动的时候去重新设置user当前的grade吗?

相关推荐

Global site tag (gtag.js) - Google Analytics