【第62、63天】使用H+前端框架,MyBatis介绍,Servlet+MyBatis制作一个医疗管理Demo

1 需求

1.1 页面布局

       首页布局采用左侧菜单,右侧Iframe实现,点击左侧菜单标题,右侧显示对应的列表。菜单标题分为:医生信息管理、就诊信息管理。

1.2 数据字典

1.2.1 医生信息表(t_doctor)
字段含义字段名类型是否为空
编号dnovarcharN
姓名dnamevarcharN
性别dsexintN
所属科室departmentvarcharN
职务级别positionvarcharN
联系方式phonevarcharN
看诊人数countintN
1.2.2 病人就诊表(t_patient)
字段含义字段名类型是否为空
病历编号pnovarcharN
姓名pnamevarcharN
身份证号identityvarcharN
性别psexintN
年龄ageintN
主治医师dnamevarcharN
就诊科室departmentvarcharN
就诊费用totalcostdouble(18,2)N
就诊时间treatdatedateN
入院时间arrivedatedateY
就诊费用totalcostdouble(18,2)N
备注notesvarcharY
1.2.3 科室表(t_department)
字段含义字段名类型是否为空
编号denointN
名称departmentvarcharN
1.2.4 职位表(t_position)
字段含义字段名类型是否为空
编号ponointN
名称positionvarcharN
所属科室departmentvarcharN

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层相关)

config.xml
XxMapper.xml

  • 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 dual

    MySQL:
    数字类型主键:
    自动增长:因为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()

SF.java

       建立工厂类,以供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()

XxService.java

       在service层中,先getSession()调用getMapper(Class)接口,通过动态代理将配置文件中的内容加载执行。对于DML语句(对表有改动的语句)需要session.commit(),如果出现异常,最后执行session.rollback()。最后都要执行session.close()。

2.4 Mapper方式实现Mybatis需要注意的问题

  1. SQL映射文件Mapper中的属性namespace值需要与接口Mapper名字一致
  2. SQL映射文件中的id与接口Mapper中的对应方法名字一一对应

3 技术选型

前端技术:H+ + JQuery
前端验证:JQuery Validate
后端技术:Java Servlet + MyBatis
数据库:MySQL

4 源码地址

源码在这里~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值