• 十五、抽象出基础接口


    1.将EmployeeServie和departmentService中共有的方法(如增加,执行sql语句的查询,通过id查询出对象等)抽取出来

    1.1新建包com.myz.basic,在包下新建基础接口BasicServiceInterface

    package com.myz.basic;
    
    import java.io.Serializable;
    import java.util.List;
    
    public interface BasicServiceInterface {
    
        public Object getObjectByid(Class clazz,Serializable id);//通过id获取对象
        
        public List excuteQuery(String hql,Object parameters[]);//执行hql语句查询对象,返回list
        
        public List excuteQueryByPage(String hql,Object parameters[],int pageNow,int pageSize);//带分页的hql查询方法
        
        public void add(Object obj);//添加一个对象
        
        public Object uniqueQuery(String hql,Object parameters[]);//执行hql语句查询对象,返回唯一的一条记录
        
    }

    1.2在包com.myz.basic包下新建类BasicService,实现BasicServiceInterface接口

    package com.myz.basic;
    
    import java.io.Serializable;
    import java.util.List;
    
    import javax.annotation.Resource;
    
    import org.hibernate.Query;
    import org.hibernate.SessionFactory;
    import org.springframework.transaction.annotation.Transactional;
    
    @Transactional
    public class BasicService implements BasicServiceInterface {
    
        @Resource
        private SessionFactory sessionFactory;
        
        public SessionFactory getSessionFactory() {
            return sessionFactory;
        }
    
        public void setSessionFactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
        }
    
        public void add(Object obj) {
            // TODO Auto-generated method stub
            sessionFactory.getCurrentSession().save(obj);
        }
    
        public List excuteQuery(String hql, Object[] parameters) {
            // TODO Auto-generated method stub
            Query query = this.sessionFactory.getCurrentSession().createQuery(hql);
            
            //注入属性值
            if(parameters!=null && parameters.length>0){
                for(int i=0;i<parameters.length;i++){
                    query.setParameter(i, parameters[i]);
                }
            }
    
            return query.list();
        }
    
        public List excuteQueryByPage(String hql, Object[] parameters, int pageNow,
                int pageSize) {
            // TODO Auto-generated method stub
            Query query = this.sessionFactory.getCurrentSession().createQuery(hql);
            if(parameters!=null && parameters.length>0){
                for(int i=0;i<parameters.length;i++){
                    query.setParameter(i, parameters[i]);
                }
            }
            return query.setFirstResult((pageNow-1)*pageSize).setMaxResults(pageSize).list();
        }
    
        public Object getObjectByid(Class clazz, Serializable id) {
            // TODO Auto-generated method stub
            return this.sessionFactory.getCurrentSession().get(clazz, id);
        }
    
        public Object uniqueQuery(String hql, Object[] parameters) {
            // TODO Auto-generated method stub
            Query query = this.sessionFactory.getCurrentSession().createQuery(hql);
            if(parameters!=null && parameters.length>0){
                for(int i=0;i<parameters.length;i++){
                    query.setParameter(i, parameters[i]);
                }
            }
            return query.uniqueResult();
        }
    
    }

    1.3在applicationContext.xml中配置BasicService

    <bean name="basicService" class="com.myz.basic.BasicService"></bean>

    2.修改DepartmentService

      2.1修改DepartmentServiceInterface

    public interface DepartmentServiceInterface extends BasicServiceInterface{
        //Department有独立的方法再声明到这里
    }

      2.2修改DepartmentService,需要的函数都在父类里了,自己不用写任何函数

    public class DepartmentService extends BasicService implements DepartmentServiceInterface {
    
    
    }

     

    3.修改EmployeeService

      3.1修改EmployeeServiceInterface,仅有一个登录验证 的独立方法需要保留

    public interface EmployeeServiceInterface extends BasicServiceInterface{
        public Employee loginCheck(Employee e);//登录验证
    }

      3.2修改EmployeeService,重写其loginCheck方法

    public class EmployeeService extends BasicService implements EmployeeServiceInterface {
        
        
        //登录验证,如果验证成功则返回该employee对象,否则返回空
        public Employee loginCheck(Employee e) {
            // TODO Auto-generated method stub
            String hql="from Employee where id=? and password=?";
            Object[] parameters={e.getId(),e.getPassword()};
            
            List list = excuteQuery(hql, parameters);
            if(list.size()>0) return (Employee) list.get(0);
            else return null;
        }
        
        
    
    }

    4.修改EmployeeAction中的addEmp方法

    //添加雇员
        public ActionForward addEmp(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response)
                throws Exception {
            // TODO Auto-generated method stub
            EmployeeForm employeeForm=(EmployeeForm) form;
            
            Employee e=new Employee();
            e.setName(employeeForm.getName());
            e.setEmail(employeeForm.getEmail());
            e.setGrade(employeeForm.getGrade());
            e.setId(employeeForm.getId());
            e.setHiredate(new Date());
            e.setPassword(employeeForm.getPassword());
            e.setSalary(employeeForm.getSalary());
            e.setDepartment((Department)departmentService.getObjectByid(Department.class, employeeForm.getId()));
            
            try {
                employeeService.add(e);
            } catch (Exception e2) {
                // TODO: handle exception
                return mapping.findForward("err");
            }
            return mapping.findForward("ok");
        }

    5.测试,依然能够执行登录、增加员工的操作,成功!

  • 相关阅读:
    JS常用方法【笔记整理】持续整理中
    JS中常用的几种时间格式处理【笔记整理】
    Css中部分知识点整理【笔记整理】
    Http相关知识整理【笔记整理】
    Echarts环形进度使用2 接上一篇中记录Echarts进度环使用【不同状态不同进度环颜色及圈内文字】
    NodeJS+Express+MongoDB 简单实现数据录入及回显展示【Study笔记】
    mongodb中的populate方法【转载】
    Echarts环形进度使用 1【简单的使用示例】
    Java的八种基本数据类型及其包装类
    Java文件的写入
  • 原文地址:https://www.cnblogs.com/myz666/p/8444326.html
Copyright © 2020-2023  润新知