一、设计用户相关实体类
积分等级类:
@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
分享到:
相关推荐
【标题】"跟我一起写大虾网(第3天)" 暗示了这是一个关于编程教程的系列,可能是一个在线课程或博客文章的第三部分,专注于构建一个名为“大虾网”的项目。在这个阶段,作者可能讲解了项目的进一步开发、功能实现或者...
标题“补跟我一起写大虾网(第1天源码)”和描述中提到的“博文链接:https://yulon.iteye.com/blog/588083”表明这是一个关于编程学习的系列教程,作者可能正在引导读者逐步了解并编写一个名为“大虾网”的项目。...
跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟我一起写Makefile跟...
《跟我一起写Makefile》是陈皓所著的一本深入探讨Makefile编写的书籍,由祝冬华整理,全文共计78页,于2005年10月14日发布。本书全面覆盖了Makefile的基础知识到高级应用,旨在帮助读者掌握如何有效地编写Makefile,...
《跟我一起写Makefile》是陈皓大佬撰写的一份PDF文档,主要讲解了如何编写和理解Makefile,以便于管理程序的编译和链接过程。Makefile是软件开发中的一个重要工具,它帮助自动化构建过程,使得编译和链接更加高效。 ...
那么,Makefile 将首先编译 dependency1 和 dependency2,然后再编译 target。 4. 变量在 Makefile 中的使用 Makefile 中可以使用变量来简化编译和链接的过程。例如,可以使用 $(CC) 变量来表示编译器的名称: ```...
Makefile 跟我一起写Makefile;Makefile 跟我一起写Makefile;Makefile 跟我一起写Makefile
《跟我一起写 Makefile》由陈皓撰写,祝冬华整理,是一份深入讲解Makefile的教程。Makefile是Linux环境中用于自动化构建、编译和链接程序的重要工具,它通过简洁的规则定义来管理复杂的项目构建过程。以下是该文档...
make是一个命令工具,它解释Makefile 中的指令(应该说是规则)。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样...
《跟我一起写 Makefile》是由陈皓编著的一本关于Makefile使用的指南,旨在帮助读者理解和掌握这个在软件开发中至关重要的工具。Makefile是Unix和类Unix系统中用于自动化构建、编译和测试程序的文件,它定义了一系列...
### 跟我一起写Makefile (PDF重制版) #### 概述 《跟我一起写Makefile (PDF重制版)》是一本详细介绍如何编写Makefile的指南书,适用于希望深入了解并掌握Makefile编写的程序员。Makefile是用于自动化构建过程的一...
实际上很多接触编程很长时间的人 并不会写MAKEFILE,所以跟我来写MAKEFILE 用ULTRAEDIT来打开。WORD是打不开的
跟我一起写 Makefile 在软件开发中,Makefile 是一种非常重要的工具,它帮助开发者自动化构建、编译和链接过程,提高工作效率。本教程将深入探讨 Makefile 的使用方法和核心概念。 1. 概述 Makefile 是一个文本...