1 需求
1.1 页面布局
首页布局采用左侧菜单,右侧Iframe实现,点击左侧菜单标题,右侧显示对应的列表。菜单标题分为:医生信息管理、就诊信息管理。
1.2 数据字典
1.2.1 医生信息表(t_doctor)
字段含义 | 字段名 | 类型 | 是否为空 |
---|---|---|---|
编号 | dno | varchar | N |
姓名 | dname | varchar | N |
性别 | dsex | int | N |
所属科室 | department | varchar | N |
职务级别 | position | varchar | N |
联系方式 | phone | varchar | N |
看诊人数 | count | int | N |
1.2.2 病人就诊表(t_patient)
字段含义 | 字段名 | 类型 | 是否为空 |
---|---|---|---|
病历编号 | pno | varchar | N |
姓名 | pname | varchar | N |
身份证号 | identity | varchar | N |
性别 | psex | int | N |
年龄 | age | int | N |
主治医师 | dname | varchar | N |
就诊科室 | department | varchar | N |
就诊费用 | totalcost | double(18,2) | N |
就诊时间 | treatdate | date | N |
入院时间 | arrivedate | date | Y |
就诊费用 | totalcost | double(18,2) | N |
备注 | notes | varchar | Y |
1.2.3 科室表(t_department)
字段含义 | 字段名 | 类型 | 是否为空 |
---|---|---|---|
编号 | deno | int | N |
名称 | department | varchar | N |
1.2.4 职位表(t_position)
字段含义 | 字段名 | 类型 | 是否为空 |
---|---|---|---|
编号 | pono | int | N |
名称 | position | varchar | N |
所属科室 | department | varchar | N |
1.3 详细功能
1.3.1 医生信息管理
1.3.1.1 新增页
根据数据表设计的字段完成新增页,并且满足以下要求:
a.医生编号总共12位,由字母DC+年月+4位数字编号组成(如DC2017070001),必须唯一,在新增时自动生成,数字编号自动增长。
b. 姓名不能重复,如果存在相同姓名,则添加科室作为后缀用以区分。如:张三,张三(外科)。
c. 性别采用单选按钮控件展示,默认为“男”;“1”表示男,“0”表示女。
d. 所属科室和职务级别采用下拉列表级联展示;级联关系如下:
五官科:主治医师、手术师;
外科:主治医师、副主治医师;
内科:主任、专家、助理;
e. 联系方式需要进行电话格式验证。
f. 看诊人数默认为0,自动生成,不可手动修改,每添加一次就诊信息,对应医生的看诊人数+1,实现累加。
1.3.1.2 列表页
展示所有医生信息:
a.顶部添加工具栏,显示新增、删除选中按钮;右侧放置查询条件。
b.查找功能可以通过医生姓名进行模糊查找。
c.列表中需要提供复选框,可实现行数据的逐个和批量删除,删除前弹框提示。
d.在列表中新增“修改”列,点击修改可在弹出页面中修改当前行数据。
1.3.1.3 修改页
a.页面能够读取到各字段的原有值。
b.只允许修改“所属科室”、“联系方式”两个字段,其余为默认值。
1.3.1.4 删除
删除医生信息后,医生对应的病人就诊信息也一并删除。
1.3.2 就诊信息管理
1.3.2.1 新增页
在系统中实现就诊记录的新增:
a.病例编号采用UUID自动生成唯一编号,不需要手动填写。
b.身份证号需要进行数字验证;能够通过身份证号码计算出病人的性别(取特定位数值)和年龄(精确到整数,四舍五入)。
c.主治医生使用下拉列表选择医生数据表中添加的数据。
d.就诊科室能够通过主治医生自动关联查找到,不需要手动填写。
e.就诊时间默认为当前时间,自动生成,不需填写。
f.住院时间默认为当前时间,且不得早于当前时间,精确到日,可修改,使用日期控件;不需住院则为空。
g.就诊费用默认为0,精确到两位小数。
h.同一天,同一医师最多接诊2名病人,超过则弹框提示。
1.3.2.2 列表页
a.顶部添加工具栏,显示新增、删除选中按钮;右侧放置查询条件。
b.能够按照主治医生姓名查找到其对应的所有就诊病人。
2 MyBatis介绍
MyBatis是一个Java持久化框架,是ORM(Object Relational Mapping,对象关系映射)技术的实现,侧重于dao层,与之相同的还有hibernate等。它通过XML描述符或注解把对象与存储过程或SQL语句关联起来。
- 数据库实例:能识别读取数据库文件的软件。
2.1 ORM技术
对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
2.2 与DBUtils的关系
DBUtils:只是一个简单的JDBC封装包,一个小组件。将JDBC多打了一层,更易用了而已,实际还是JDBC并没有实现对象关系映射。可以选用连接池,如DBCP、Druid等。
MyBatis:是一个全面的ORM持久化框架,其中带有一个连接池,当然可以配置选用其他连接池。
2.3 与Servlet、Struts整合使用的流程
在使用Spring的IOC容器注入使用配置文件整合之前,Servlet、Struts与MyBatis整合的套路一致。
2.3.1 两个配置文件:config.xml(数据库相关)和XXMapper.xml(SQL语句dao层相关)
-
Oracle/MySQL如何使用MyBatis生成自增整型数字和uuid字符串的主键?
Oracle:
数字类型主键:
1.序列: select test_seq.nextval as id from dual
2.查询最大id+1 select max(id)+1 as id from xxx字符串类型的主键:
select sys_guid() as id from dualMySQL:
数字类型主键:
自动增长:因为MySQL支持整型数字自增,所以可以直接insert数据到数据库
或select last_insert_id() from xxx字符串类型的主键: uuid()
select replace(uuid(),’-’’’) as id from xxx<insert> <selectKey keyProperty="xx" resultType="int/String" order="AFTER/BEFORE"> <selectKey> insert ... </insert>
需要注意的是,获取生成的ID直接调当前实体类的getXx属性即可。另外,注意order的含义,主键需要生成后再存储写BEFORE,如果是使用已存储的上一条数据的主键,将order定义为AFTER。
-
当类和表不一致时,添加和查询如何处理?
添加时使用#{}:#{类中的属性名}查询时:
1.起别名:字段名 as 别名(使之一致)
2.使用resultMap指定映射关系 -
#和$的区别?
#:表示底层使用PreparedStatement处理SQL语句,所以支持?占位符。但并不是所有的地方都使用 “?”,如需要字符串拼接时:select * from “+tableName+” where …/select * from xx where name like ‘"+name+"’$:底层使用的是Statement,所以不支持?占位符,所有参数都是通过拼装的方式组装的。 有些情况需要使用$,不过安全系数低,除非一定要拼接字符串,否则使用“#”
-
MyBatis中的动态标签?
<if>
<where>
<foreach>
<sql>
<include>
<trim>
2.3.2 SqlSessionFactoryBuilder--->build(reader)
2.3.3 SqSessionFactory--->openSession()
建立工厂类,以供service层getSession()继而调用getMapper(Class)。
2.3.4 SqlSession--->insert update delete select getMapper()
2.3.5 commit()
2.3.6 rollback()
2.3.7 close()
在service层中,先getSession()调用getMapper(Class)接口,通过动态代理将配置文件中的内容加载执行。对于DML语句(对表有改动的语句)需要session.commit(),如果出现异常,最后执行session.rollback()。最后都要执行session.close()。
2.4 Mapper方式实现Mybatis需要注意的问题
- SQL映射文件Mapper中的属性namespace值需要与接口Mapper名字一致
- SQL映射文件中的id与接口Mapper中的对应方法名字一一对应
3 技术选型
前端技术:H+ + JQuery
前端验证:JQuery Validate
后端技术:Java Servlet + MyBatis
数据库:MySQL