by Lancer
31. October 2009 17:29
泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
泛型在使用中还有一些规则和限制:
1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
3、泛型的类型参数可以有多个。
4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上成为“有界类型”。
5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName(Java.lang.String)
Base Service 类:
- import java.io.Serializable;
- import java.util.ArrayList;
- import java.util.List;
-
- import javax.persistence.EntityManager;
- import javax.persistence.Query;
-
- import org.jboss.seam.annotations.In;
-
-
- public class BaseService implements Serializable {
- private static final long serialVersionUID = 232790306929537427L;
-
- @In
- EntityManager em;
-
- protected EntityManager getEntityManager() {
- return em;
- }
-
- protected <T> void persist(T t) {
- getEntityManager().persist(t);
- }
-
- protected <T> void update(T t) {
- getEntityManager().merge(t);
- }
-
- protected <T> void remove(T t) {
- getEntityManager().remove(t);
- }
-
- @SuppressWarnings("unchecked")
- protected <T> T getEntityById(String namedQuery, String queryKey, int keyId) {
- T t;
- Query q = getEntityManager().createNamedQuery(namedQuery);
- q.setParameter(queryKey, keyId);
- t = (T) q.getSingleResult();
-
- return t;
- }
-
- @SuppressWarnings("unchecked")
- protected <T> List<T> findResults(String querysql){
- List<T> tl = new ArrayList<T>();
-
- tl = (List<T>)getEntityManager().createQuery(querysql).getResultList();
-
- return tl;
- }
- }
具体实现类:
- import java.util.ArrayList;
- import java.util.List;
- import org.jboss.seam.annotations.Name;
-
- import com.apj.epm.model.Customer;
- import com.apj.epm.model.Project;
- import com.apj.epm.vo.ProjectVO;
-
- @Name("projectService")
- public class ProjectService extends BaseService {
- private static final long serialVersionUID = -4134390648777536330L;
-
- public List<ProjectVO> findAllProjects(String customerId,
- String projectName, String abbrProjectName) {
- List<ProjectVO> pl = new ArrayList<ProjectVO>();
-
- String querysql = "";
-
- if (projectName != null) {
- if (projectName.length() > 0)
- querysql += "AND PROJECT_NAME like '" + projectName + "' ";
- }
-
- if (abbrProjectName != null) {
- if (abbrProjectName.length() > 0)
- querysql += "AND ABBR_PROJECT_NAME like '" + abbrProjectName
- + "' ";
- }
-
- querysql = "select p from Project p where (CUSTOMER_ID = " + customerId + " or 0=" + customerId + ") "
- + querysql;
-
- List<Project> pml = this.findResults(querysql);
-
- for (Project p : pml) {
- pl.add(new ProjectVO(p));
- }
- return pl;
- }
-
- public void Save(ProjectVO p) {
- Project newProject;
- Customer c;
-
- c = this.getEntityById("Customer.findCustomerById", "customerId", p
- .getCustomer().getCustomerId());
-
- newProject = new Project(p.getPiNo(), p.getProjectName(), p
- .getAbbrProjectName(), c, p.getProjectType(), p
- .getProjectStatus(), p.getProjectNature(),
- p.getSystemManager(), p.getGroupBy());
-
- this.persist(newProject);
- }
-
- public void UpdateProject(ProjectVO p) {
- Project newProject;
-
- newProject =this.getEntityById("Project.findProjectById", "projectId", p.getProjectId());
-
- Customer c;
-
- c = this.getEntityById("Customer.findCustomerById", "customerId", p
- .getCustomer().getCustomerId());
-
- newProject.setAbbrProjectName(p.getAbbrProjectName());
- newProject.setCustomer(c);
- newProject.setGroupBy(p.getGroupBy());
- newProject.setPiNo(p.getPiNo());
- newProject.setProjectName(p.getProjectName());
- newProject.setProjectNature(p.getProjectNature());
- newProject.setProjectStatus(p.getProjectStatus());
- newProject.setProjectType(p.getProjectType());
- newProject.setSystemManager(p.getSystemManager());
-
- this.update(newProject);
- }
-
- public void RemoveProject(ProjectVO p) {
- Project newProject;
-
- newProject =this.getEntityById("Project.findProjectById", "projectId", p.getProjectId());
-
- this.remove(newProject);
- }
- }
2149aa28-c589-4782-bae4-54d428b3b303|0|.0
Tags: 泛型, jsf, seam,
技术文章