以下是个人的感悟,如有不当之处,还希望大佬们赐教!
servlet主要是这几层结构,即控制层(controller层),业务层(service层),数据访问层(Dao层),和视图层(view层)。
举个例子,这可以比作是一个酒楼:
1.数据访问层是酒楼的拣货员,负责业务需要的食材,它的作用就是直接从数据库选取,插入,删除指定的数据,只写对数据库操作的语句。
2.业务层是厨房,负责加工食材并完成菜品的,它的作用就是实现各种功能。对控制层和数据访问层起到承上启下的作用。
3.控制层是服务员,负责记录客户的要求和传菜的职责,它的作用就是接收前端请求并传递给业务层处理,也要从业务层处理好的功能返回给视图层。
4.视图层是客户的视角,看最终的菜品,是展示网页的最终界面的。
下面我们来看看代码(目前只完成了数据访问层→业务层→控制层→视图层的单向操作)
首先是设置Dao层基本属性的类文件:
import com.alibaba.druid.pool.DruidDataSource;
import java.sql.Connection;
public class MySqlDbUtil {
private static DruidDataSource dataSource = null;
private static void initDataSource() throws Exception{
if (dataSource == null){
dataSource = new DruidDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/hospital?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8");//连接数据库的路径和时区
dataSource.setUsername("root");//输入自己的数据库用户名
dataSource.setPassword("123456");//输入数据库用户名的密码
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");//输入Driver的路径,注意:路径大小写敏感!
//上面代码即可完成连接,但要提高配置的性能,还可加入以下代码
dataSource.setInitialSize(2);//设置初始化参数为2个连接数
dataSource.setMinIdle(2);//设置最小连接数为2
dataSource.setMaxActive(20);//设置最大连接数为10
dataSource.setMaxWait(20000);//设置最大等待相应时间(单位毫秒)此时为20秒(连接不上需要等待的时间)
dataSource.setTimeBetweenEvictionRunsMillis(20000);//设置检查无响应的时间长度,若无响应则断开,此时为20秒
dataSource.setValidationQuery("SELECT 'x'");//时不时返回引号内的内容以提醒用户连接未断开,仍有效
dataSource.setTestWhileIdle(true);//判断用户空闲时,再发送上条判断连接是否正常的提示
dataSource.setTestOnBorrow(true);//空余时再去处理
}
}
public static Connection getConnection() throws Exception{
initDataSource();
return dataSource.getConnection();
}
}
接着是Dao层的类文件(还要先定义一个接口来规范它):
package cn.edu.mju.hospital1.persiste;
import cn.edu.mju.hospital1.entity.PatientInfo;
import cn.edu.mju.hospital1.entity.PatientLogin;
public interface IPatientLoginDao {
public PatientLogin findPatLogin(Integer idPat,String pwdPat,String namePat