通讯录项目详解

/**
* @author Mr.Deng
* @since 2016-5-14
* @version 1.0
*使用notepad打开方便阅读
*欢迎纠正错误,写下自己的见解
*/

项目描述:用户登录可以管理对自己的通信录信息进行管理.

项目依赖软件:mysql eclipse.

项目依赖技术:javaSE , JDBC, swing组件

1.架构:3层架构
    1.展示层:1.用户只能对自己和自己的通讯录进行操作(私人权限)
              2.使用java GUI图像界面:
                                1.登录注册主页面界面
                                2.注册页面
                                3.功能页面:按上中下3层界面布局:
                                                         1.上:欢迎窗口
                                                         2.中:展示用户所有通讯录信息详情
                                                         3.下:用户对通讯录操作的按钮                                                                                
      
    2.业务层:1.后台人员对所有用户进行操作(管理员权限)
              2.使用java编写后台程序:编写接口和实现类实现类通过调用持久层编写的接口实现功能
                 
    3.持久层:1.java程序员通过编写源代码实现各种操作(造物主)
              2.使用JDBC连接数据库保存数据
              3.使用配置文件连接JDBC,假如修改了数据库。只需要修改配置文件不需要修改源代码
                           
具体实现:3层架构每层通过接口进行连接(依赖关系)
            
        1.展示层---业务层:1.接口:UsersService,ContactsService
                           2.实现类:UsersServiceImpl,ContactsServiceImpl
                        
        作用:展示层获得的数据或操作传入到业务层
              业务层流程:1.调用持久层的接口
                          2.创建接口对象
                          3.调用接口对象身上的方法进行数据操作
        
        原理:1.接口只定义方法体,没有实现细节,不能直接创建对象
              2.ContactDaoImpl类是实现类,重写了接口的所有方法,并且有实现细节
              3.通过创建实现类对象,实例化接口。接口就可以调用所有实现类的方法,进行操作              
              ContactDao ctd = new ContactDaoImpl();                          
       
       
      2.业务层---持久层:1.接口:UsersDao                       
                         2.实现类:UsersDaoImpl                        
        作用:对数据进行各种操作并放入数据库中
                        
        原理:1.通讯录和用户对象随着方法的调用而存在,方法调用结束对象消失。
              2.对象存在于内存,通过JDBC连接数据库就可以将对象身上的属性保存起来。
                             
      3.持久层---展示层:持久层的所有功能依赖于展示层获得的数据
                         没有数据持久层的存在没有意义      
                          没有持久层的功能实现,展示层也没有任何意义
                       
2.包命名规范:
         1.持久层:1.com.lovo.contacts.bean:实体包存放所有的实体对象,Users,contactsdetail遵循javabean规范,实现序列化接口Serializable
                   2.com.lovo.contacts.dao:接口包存放持久层的所有接口    
                   3.com.lovo.contacts.dao.impl:实现类存放所有实现了dao包接口的类
                   4.com.lovo.contacts.util:工具包存放所有持久层代码需要的工具 如文件,DBUtil
                   
         2.业务层:1.com.lovo.contacts.service:业务层包存放所有业务层接口 UsersService,ContactsService                   
                   2.com.lovo.contacts.service.impl:实现类包存放所有实现业务层包接口的实现类
        
         3.展示层:com.lovo.contacts.gui:图形界面包存放所有界面类
        
         4.javabean规范:1.公共的类
                         2.属性私有化
                         3.提供公共的get,set方法
                         4.不带参的构造方法
                         5.实现序列化接口Serializable
                   
总结:1.命名规范化保证项目的可理解性,方便管理。项目由多个程序员编写一个好的命名规范和结构方便更改实现同步编写
      2.每个项目有自己的命名规范,大体一致

3.各方法块代码流程:1.获取数据库连接:Connection con = DBUtil.getconnection
                    2.编写SQL语句,使用问号防止SQL注入
                       3.创建预编译处理对象:PreparedStatement pstmt = con.prepardStatement(sql);
                      4.更改问号的值
                    5.执行sql语句:
                             1.增:1.(sql, PreparedStatement.RETURN_GENERATED_KEYS)保证主键自增长,
                                   2.获取对象身上的值,设置到数据库相应的字段中
                                   3.获取数据库结果集,判断将第一个对象的ID设置成1,多个对象实现自增长
                                   4.关闭连接
                                   
                             2.查:1.查询所有字段的值放入结果集,条件id=? and status=1 1表示存在
                                   2.创建新的contactdetail对象,
                                   3.将结果集相应的值设置到contactdetail对象身上
                                   4.关闭连接
                                   
                             3.删:1.status字段表示表的状态,根据查询语句只有status=1时 用户才能查询到这张表
                                   2.设置status=0 用户就不能查询到这张表。逻辑删除:数据还存在,只是用户查询不到。物理删除:数据从数据库消失
                                   3.更新数据库
                                   4.关闭连接
                                   
                             4.改:1.用户传入contactdetail对象,有些字段的值是修改过的
                                   2.获取contactdetail对象身上的值
                                   3.对数据库里contactdetail里字段的每一个字段的值进行覆盖
                                   4.关闭连接

扩展:
    1.自定义异常:1.定义异常类继承Exception的属性和方法
                  2.提供带参和不参的构造方法    
                    public NameNotFoundException() {}
                    public NameNotFoundException(String message) {super(message);}    
                  3.判断语句如果用户名不正确 throw new NameNotFoundException("用户名不存在");
    
    2.try{}finally{}作用:保证try块内发生异常都能执行finally块里的内容                  
                                   
总结:1.对数据库里的数据进行修改后,需要更新。查询不需要
      2.先分析功能理清思路,再写流程注释。最后根据流程注释填充代码。
      3.根据返回类型,参数列表。灵活编写代码,万变不离其宗

4.时间转换:    
    1.util.date---sql.date:     
        1.获取Contact对象身上的时间毫秒数,如果没有获取系统时间的毫秒数,三元运算符:条件 ?表达式1(true): 表达式2(false)
           long time = detail.getCreateTime() == null ? System.currentTimeMillis() : detail.getCreateTime().getTime();
        2. 调用sql.date类的带参构造方法将时间毫秒数传入获取sql包的时间    
           new Date(time))
    2.sql.date---util.date:
        1.获取sql.date的毫秒数,将其作为参数传入util.date的构造方法类
         new java.util.Date(rs.getDate("d.createtime").getTime())

5.属性对象:1.sql user表 与 detail表是1对多关系, 一个用户可以有多个通讯录
          2. 在contactdetail类放一个user对象,将user类与contactdetail类连接
             user.getid() = contactdetail.getuser().getid()          
             实现java user类与contactdetail类 1对多关系
        
 sql.userid----contact.user
       1.创建user对象
       2.将userid设置到user对象身上
       3.分析 user的set方法参数是user对象,将创建的对象传入user的set方法
       
6.二维数组:在业务层定义方法getAllContact 返回类型:Object[][] 参数:useid        
        1.获取contactdetail对象的集合
          List<ContactDetail> list = cd.queryContactListByUser(userId);
        2.定义数组长度,第一个字段表示通讯录实体的个数,第2个字段表示通讯录的信息个数
          Object[][] datas = new Object[list.size()][8];
        3. 循环数组 循环一次第一个括号+1,第2个括号挨个放入通讯录信息
            for (int i = 0; i < list.size(); i++) {
            ContactDetail detail = list.get(i);
            datas[i][0] = detail.getId();
            datas[i][1] = detail.getName();
            。。。。。。。。。。。。。。。。}
        4.返回 datas     
        
eclipse:导入项目:file---import---Existing Projects into Workspace---选择项目路径---finish        
        导入图片:项目名---src---general---file system---文件路径---选择图片--finish---把图片移动到lib包
        生成文档:项目右键---export---java---javadoc---选择生成路径---finish
        java架包:项目右键---export---java---jar file选择生成路径----架包名---finish
        导入架包:复制架包到项目---build path
        界面插件使用:类右键---open with---windowbuilder editor---左下角Design按钮

时间: 2024-10-05 23:16:46

通讯录项目详解的相关文章

直播项目详解

项目下载地址 项目文件结构: Login : 登录页面集成了友盟第三方登录微信和QQ,新浪授权登录是请求新浪官方的OAuth请求,以及一些登录所需要的资源 Main :主要包含标签视图控制器UITabBarController .导航控制器UINavigationController.数据请求工具类XLLiveTool.业务逻辑类XLDealData.代理类.pch文件和单例的头文件,都是一些全局都能用的东西. Home : 首页,主要包括热门,最新和关注三部分,把这三部分添加到(XLHomeV

eclipse里面构建maven项目详解(转载)

本文来源于:http://my.oschina.net/u/1540325/blog/548530 eclipse里面构建maven项目详解 1       环境安装及分配 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具.Maven主要服务于基于java平台的项目构建.依赖管理和项目信息管理,无论是小型的开源类库项目,还是大型的企业级应用,maven都能大显身手. 置于maven的安装过程及在eclipse里面配置maven,请看我在

tomcat通过conf-Catalina-localhost目录发布项目详解 摘自:http://www.cnblogs.com/iyangyuan/archive/2013/09/12/3316444.html

Tomcat发布项目的方式大致有三种,但小菜认为通过在tomcat的conf/Catalina/localhost目录下添加配置文件,来发布项目,是最佳选择. 因为这样对tomcat的入侵性最小,只需要新增一个配置文件,不需要修改原有配置:而且支持动态解析,修改完代码直接生效(修改配置除外). 但是网上关于这种方法的介绍很简单,小菜来补充一下. 1.直接在eclipse中添加一个server,添加过程中指明tomcat的路径即可. 2.在tomcat服务器的conf\Catalina\local

tomcat通过tomcat 安装根目录下的conf-Catalina-localhost目录发布项目详解

tomcat通过conf-Catalina-localhost目录发布项目详解 Tomcat发布项目的方式大致有三种,但小菜认为通过在tomcat的conf/Catalina/localhost目录下添加配置文件,来发布项目,是最佳选择. 因为这样对tomcat的入侵性最小,只需要新增一个配置文件,不需要修改原有配置:而且支持动态解析,修改完代码直接生效(修改配置除外). 但是网上关于这种方法的介绍很简单,小菜来补充一下. 1.直接在eclipse中添加一个server,添加过程中指明tomca

android通讯录数据库详解

查看手机的手机库导出这个文件其实用到的表也就四张, 注: 1.contacts 表 _id :表的ID,主要用于其它表通过contacts 表中的ID可以查到相应的数据.display_name: 联系人名称photo_id:头像的ID,如果没有设置联系人头像,这个字段就为空times_contacted:通话记录的次数last_time_contacted: 最后的通话时间 lookup :是一个持久化的储存 因为用户可能会改名子 但是它改不了lookup 2.data表 raw_contac

[转帖](整理)GNU Hurd项目详解

(整理)GNU Hurd项目详解 http://www.ha97.com/3188.html 发表于: 开源世界 | 作者: 博客教主 标签: GNU,Hurd,详解,项目 Hurd原本是要成为GNU操作系统的真正内核,然而它从未真正降临人间.Linus Torvalds曾经写过,如果GNU kernel在1991年春天发布,他不会启动Linux项目.GNU操作系统项目始于1984年,在Linux出现之前它有7到8年的时间创造出一个可用的内核,然而它的开发进程,不时被频繁的改变中断.Richar

Usage、Usage Minimum和Usage Maximum项目详解

(1)一个产生多个数据域(Report Count>1)的主项目之前有一个以上的[用途]时,每个[用途]与一个数据域依次对应,如果数据域个数(Report Count)超过[用途]的个数,则剩余的数据域都对应于最后一个[用途]. (2)Usage.Usage Minimum和Usage Maximum项目关系 这3个项目输入Local类型项目. Usage项目和Global类型的Usage Page项目协同描述项目或集合的功能. 一个报表可以指定一个Usage给许多个Report Count(数

Mac下Intellij IDea发布Web项目详解一

Step1 新建JavaEE Project并进行相应设置 1.1 如图 1.2 填下项目名,我写WebWorkSpace.这里相当于Eclipse中的workspace,写完点[Finish] 1.3 如图,按照1==>2==>==>4的步骤一路向下  1.4 新建项目后,Intellij Idea中是酱了滴~ 1.5 鼠标单击WebWorkSpace1项目名,然后右键,选[Open Module Settings]  1.6 进到这个页面后,按照这里写的一路向下走 1.7 点path

Maven搭建SpringMVC+Hibernate项目详解

前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这篇主要搭建SpringMVC4.1.4和Hibernate4.3.8,之前也打了好多SpringMVC的,这部分已经非常的熟悉了,毕竟业开发过一年多SpringMVC的,这次持久层采用Hibernate,数据源采用c3p0,数据库暂采用MySQL,主要是想复习一下Hibernate.搭建Spring