`
yulon
  • 浏览: 118528 次
  • 性别: 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吗?

相关推荐

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

    【标题】"跟我一起写大虾网(第3天)" 暗示了这是一个关于编程教程的系列,可能是一个在线课程或博客文章的第三部分,专注于构建一个名为“大虾网”的项目。在这个阶段,作者可能讲解了项目的进一步开发、功能实现或者...

    补跟我一起写大虾网(第1天源码)

    标题“补跟我一起写大虾网(第1天源码)”和描述中提到的“博文链接:https://yulon.iteye.com/blog/588083”表明这是一个关于编程学习的系列教程,作者可能正在引导读者逐步了解并编写一个名为“大虾网”的项目。...

    跟我一起写Makefile

    跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟...

    跟我一起写Makefile-陈皓

    《跟我一起写Makefile》是陈皓所著的一本深入探讨Makefile编写的书籍,由祝冬华整理,全文共计78页,于2005年10月14日发布。本书全面覆盖了Makefile的基础知识到高级应用,旨在帮助读者掌握如何有效地编写Makefile,...

    跟我一起写Makefile.pdf

    《跟我一起写Makefile》是陈皓大佬撰写的一份PDF文档,主要讲解了如何编写和理解Makefile,以便于管理程序的编译和链接过程。Makefile是软件开发中的一个重要工具,它帮助自动化构建过程,使得编译和链接更加高效。 ...

    跟我一起写makefile.pdf

    那么,Makefile 将首先编译 dependency1 和 dependency2,然后再编译 target。 4. 变量在 Makefile 中的使用 Makefile 中可以使用变量来简化编译和链接的过程。例如,可以使用 $(CC) 变量来表示编译器的名称: ```...

    Makefile 跟我一起写Makefile

    Makefile 跟我一起写Makefile;Makefile 跟我一起写Makefile;Makefile 跟我一起写Makefile

    跟我一起写 Makefile 作者:陈皓 整理:祝冬华

    《跟我一起写 Makefile》由陈皓撰写,祝冬华整理,是一份深入讲解Makefile的教程。Makefile是Linux环境中用于自动化构建、编译和链接程序的重要工具,它通过简洁的规则定义来管理复杂的项目构建过程。以下是该文档...

    跟我一起写Makefile[陈皓]

    make是一个命令工具,它解释Makefile 中的指令(应该说是规则)。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样...

    跟我一起写 Makefile.pdf

    《跟我一起写 Makefile》是由陈皓编著的一本关于Makefile使用的指南,旨在帮助读者理解和掌握这个在软件开发中至关重要的工具。Makefile是Unix和类Unix系统中用于自动化构建、编译和测试程序的文件,它定义了一系列...

    跟我一起写Makefile (PDF重制版)

    ### 跟我一起写Makefile (PDF重制版) #### 概述 《跟我一起写Makefile (PDF重制版)》是一本详细介绍如何编写Makefile的指南书,适用于希望深入了解并掌握Makefile编写的程序员。Makefile是用于自动化构建过程的一...

    跟我一起写MAKEFILE

    实际上很多接触编程很长时间的人 并不会写MAKEFILE,所以跟我来写MAKEFILE 用ULTRAEDIT来打开。WORD是打不开的

    跟我一起写 Makefile

    跟我一起写 Makefile 在软件开发中,Makefile 是一种非常重要的工具,它帮助开发者自动化构建、编译和链接过程,提高工作效率。本教程将深入探讨 Makefile 的使用方法和核心概念。 1. 概述 Makefile 是一个文本...

Global site tag (gtag.js) - Google Analytics