项目记录3:基础功能

本文内容来自:《传智播客-OA项目》

1,设计 BaseDao 与 BaseDaoImpl
    1,设计接口 BaseDao
        1,每个实体都应有一个对应的Dao接口,封装了对这个实体的数据库操作。例
            实体            Dao接口                实现类
            ========================================================
            User            --> UserDao            --> UserDaoImpl
            Role            --> RoleDao            --> RoleDaoImpl
            Department        --> DepartmentDao    --> DepartmentDaoImpl
            Article            --> ArticleDao        --> ArticleDaoImpl
            ...
        2,在每个Dao接口中都应有一个基本的增删改查的方法,
            但每个Dao接口中都写一遍就是重复的代码,可以把这些方法抽取到一个父接口中,定义为:
            public interface BaseDao<T> {
                save(entity : T) : void
                delete(id : Serializable) : void
                update(entity : T) :void
                getById(id : Serializable) : T
                getByIds(ids : Serializable[]) : List<T>
                findAll() : List<T>
            }
        3,说明:
            1,使用泛型的技术,可以在使用时更方便,如:User user = userDao.getById(1L); // 不需要强制转型
            2,getById(id : Long) 与 getByIds(ids : Long[]) 不要合并为一个有可变参数的方法,
                因为那个用起来就不方便了,比如要经常使用的根据一个id获取一个对象时就很不方便:
                List<User> list = userDao.getByIds(1L); User user = list.size() > 0 ? list.get(0) : null。
            3,以后再有Dao接口就可以继承这个 BaseDao,以拥有基本的增删改查方法,如:
                UserDao extends BaseDao<User>
                RoleDao extends BaseDao<Role>
    2,设计实现类 BaseDaoImpl
        1,每个Dao的接口还要有相应的实现类才可以,在每个DaoImpl中都要实现Dao接口中定义的所有方法,
            当然也包括公共的增删改查方法(BaseDao中定义的6个基本方法)。
        2,每个DaoImpl中都实现一遍公共方法显示是重复的,所以也可以抽取出来为一个父类BaseDaoImpl,
            在BaseDaoImpl中实现了BaseDao接口的所有方法,我们的DaoImpl只需要继承他就可以不用重复的写公共方法的实现了。
            声明如下:
                public class BaseDaoImpl<T> implements BaseDao<T> {
                    @Resource private SessionFactory sessionFactory; // 让Spring注入sessionFactory
                    private Class<T> clazz; // 要想办法得到T的Class

public void save(T entity) { }
                    public void delete(Long id) { }
                    public void update(T entity) { }
                    public T getById(Long id) { }
                    public List<T> getByIds(Long[] ids) { }
                    public List<T> findAll() { }
                }
            在实现方法时,获取Session的代码为:sessionFactory.getCurrentSession()
        3,在获取clazz时有两种方法
            1,方法一:
                1,把clazz声明成protected修饰符的,这样子类中就可以访问了,
                2,在每个子类的构造方法中传递这个属性的值,如:
                    public RoleDaoImpl() { clazz = Role.class; }
                    public UserDaoImpl() { clazz = User.class; }
            2,方法二:使用反射的方式:
                1,在BaseDaoImpl的默认构造方法中写如下代码就可以了:
                    ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
                    clazz = (Class) pt.getActualTypeArguments()[0];
                2,说明:BaseDaoImpl不能直接使用,只能使用他的子类,否则这段代码就无效了。

2,页面中的JS表单验证(使用jQuery.validate)
    1,基本用法
        1,导入JS文件
            <script type="text/javascript" src="lib/jquery.js"></script>
            <script type="text/javascript" src="lib/jquery.metadata.js"></script>
            <script type="text/javascript" src="jquery.validate.js"></script>
        2,指定哪个表单要在提交前要先进行验证
            $(function(){
                $("form").validate();    
            })
        3,指定表单中字段的验证规则
            <input type="text" name="name" class="required" />
    2,指定验证规则的方式
        1,多个class之间使用空格隔开,如 class="required email"
        2,使用json方式,如 class="{required: true, minlength: 2}"
        3,混合方式一与方式二,如 class="required {minlength: 2}"
    3,内置的验证规则
        有很多,见文档
    4,修改提示消息
        1,默认提示
        2,针对某个表单的个性化提示
    5,修改提示消息的样式
        <style type="text/css">
            label.error{
                margin-left: 10px;
                color: red;
            }
        </style>

项目记录3:基础功能

时间: 2024-08-12 00:59:51

项目记录3:基础功能的相关文章

项目开发--&gt;基础功能汇总

祭奠曾经逝去的青春…… 1.基础功能汇总-->身份认证及用户登录模块 2.基础功能汇总-->一键登录功能汇总 3.堆和栈 4.变量

谷歌Chrome浏览器开发者工具的基础功能

上一篇我们学习了谷歌Chrome浏览器开发者工具的基础功能,下面介绍的是Chrome开发工具中最有用的面板Sources.Sources面板几乎是最常用到的Chrome功能面板,也是解决一般问题的主要功能面板.通常只要是开发遇到了js报错或者其他代码问题,在审视一遍代码而一无所获之后打开Sources进行js断点调试,几乎能解决8成的代码问题. js断点功能让人兴奋不已,以前只能在IE中靠alert弹出窗口调试js代码,那样的开发环境对于前端程序员来说简直是一场噩梦.本篇介绍Sources的具体

菜鸟的成长记录--linux基础命令

以下是我学习时接触的命令,后续会慢慢添加 1.tty:查看终端类型 虚拟终端:/dev/tty# 伪终端:/dev/pts/# 控制台:/dev/console 串行终端:/dev/ttyS# 2.startx:启动图形界面 3.ifconfig:查看网卡信息 4.cd:进入用户主目录 cd ~:进入用户主目录 cd ~USERNAME:进入其他用户主目录 cd -:在前一个目录和当前目录来回切换 cd .:当前目录 cd ..:上一级目录 cd ../..:返回上两级目录 cd !$:把上一个

(转载)ASP.NET三大核心对象及基础功能解析

原文链接:http://tech.it168.com/a2011/1207/1284/000001284879_all.shtml 想当初在只使用WebForms框架并以服务端为中心的开发模式时,发现Asp.net好复杂.一大堆服务端控件,各有各的使用方法,有些控件的事件也很重要,必须在合适地时机去响应,还真有些复杂.后来逐渐发现这些复杂的根源其实就是服务器控件相关的抽象逻辑.随着Ajax越用越多,可能有些人也做过这些事情:[新建一个ashx文件,读取一些用户的输入数据,Form, QueryS

MES系统之设备管理的基础功能

设备是制造企业进行生产的主要物质技术基础,制造企业的生产率.产品质量.生产成本都与设备直接相关.因此,正确使用.定时保养.及时检修维护设备,并对设备的运行性能进行分析,使设备处于良好的状态,才能保证企业进行高质量.低成本的生产,并按计划完成生产任务,从而提高企业的经济效益. 但是,目前国内大部分制造企业的设备管理工作还处在低效率的台账方式,存在管理信息量少.信息之后.差错率高.查询不变等问题. 尤其是在设备的检修.评估以及日常维护中需要大量有关设备的基础数据.统计结果和图纸资料,传统的设备管理方

KVM的基础功能(网络、内存、cpu、存储的配置)

KVM的基础功能(网络.内存.cpu.存储的配置) cpu的配置 1)查看cpu插槽数量 [[email protected] ~]# cat /proc/cpuinfo |grep "physical id" |wc -l 24 2)查看cpu核心数量 [[email protected] ~]# cat /proc/cpuinfo |grep "core id"| wc -l 24 3)查看cpu的模型 [[email protected] ~]# cat /p

jmeter 基础功能详解

jmeter 基础功能详解 thread group:包含一组线程,每个线程独立地执行测试计划. sampler:采样器,有多种不同的sample实现,用来发起各种请求,如http请求,jdbc请求,javaTest请求等等. logic controller:逻辑控制器有多种不同的实现,可以决定每个sample的执行顺序. listener:有多种不同的实现,主要用于统计测试接话运行中的数据并展示,如可以进行图形化方式展示响应时间. timer:定时器,有多种不同的实现,可用作每个请求见的停顿

六、EnterpriseFrameWork框架基础功能之权限管理

回<[开源]EnterpriseFrameWork框架系列文章索引> 从本章开始进入框架的第二块内容“EnterpriseFrameWork框架的基础功能”,包括:权限管理.字典数据管理.报表管理和消息管理四块,这些功能又包括两个版本,Web版和Winform版也就是说有两套界面: 既然开始讲基础功能,顺便说一下EnterpriseFrameWork框架的适用范围,前面也有提到过就是此框架适合中小团队这是一方面,还一方面就是此框架适合行业应用系统软件的开发,你用它做一个“超市库存管理系统”.“

项目记录:spring+springmvc 项目中 @Transactional 失效的解决方法

第一步,修改spring的配置文件和springmvc的配置文件 --------------------------------applicationContext.xml <context:annotation-config/>  <context:component-scan base-package="com.xxx"> <context:exclude-filter type="annotation" expression=&