因为期末考的原因一直没时间看DAO这一块的视频,所以JSP中从el表达式之后就跟不上了,昨天刚考完期末考。终于有些时间来整这玩意了,要乘课程设计这段时间把前面落下的JAVA内容都补回来,加油吧。
概念:
DAO(数据访问对象),到数据库存取数据的对象
通常的包名:dao
感想:
DAO其实就是简化了JDBC的代码,让JSP页面上看起来更简洁,但是为了一张表需要封装至少三个类(UserInfoDao类,DbUtil类,UserInfo类),而且每张表的三个类都不一样,真的还蛮辛苦的,并没有简化多少操作,不知道值不值得。总之先学下去,后面可能会发现别的东西,未完待续
代码全部
public class UserInfoDao{//extends DbUtil
//不建议使用继承实现,会让DAO对DbUtil类产生强依赖(强耦合)
private DbUtil db = new DbUtil();//JDBC的封装类对象
//通过属性的方式,使用接口变成可以降低对DbUtil的依赖
//还需要通过set方法配合。或者通过构造函数配合
//这一过程叫作解耦合
//set方法配合
public void setDb(DbUtil db){
this.db=db;
}
//不带参数的构造方法
public UserInfoDao(){
this.db=new DbUtil();
this.db.setDatabaseName("chatroomsystem");
}
//带参数的构造方法
public UserInfoDao(DbUtil db){
this.setDb(db);
}
//新增方法
//新增操作,需要的参数其实是表中每个字段的数据
public boolean add(UserInfo userInfo){
return false;
}
//删除方法
public boolean remove(UserInfo userInfo){
return this.remove(userInfo.getUserId());
}
public boolean remove(int pkId){
return false;
}
//修改方法
public boolean merge(UserInfo userInfo){
return false;
}
//查询方法
//1.根据主键ID
public UserInfo findById(int pkId){
return null;
}
//2.查全部
public List<UserInfo> findAll(){
List<UserInfo> List=new ArrayList<UserInfo>();
//构建查询语句
StringBuffer sb=new StringBuffer();
sb.append("select u_id,u_pwd,u_name,u_pwd,u_nick,u_img,u_email,");
sb.append("u_phone,u_card_id,u_register_time,u_state,u_remark");
sb.append("from tb_user_info;");
return list;
try{
//执行查询语句
ResultSet rs=this.db.doQuery(sb.toString());
//封装结果
return this.buildList(rs);
}catch(SQLException){
e.printStackTrace();
}
}
//3.根据条件查
public List<UserInfo> findByExample(UserInfo userInfo){
List<UserInfo> List=new ArrayList<UserInfo>();
return list;
}
//4.根据SQL查
public List<UserInfo> findBySQL(String sql,Object... params){
List<UserInfo> List=new ArrayList<UserInfo>();
try{
ResultSet rs = this.db.doQuery(sql,params);
return this.buildList(rs);
}catch(SQLException e){
e.printStackTrace();
}
return null;
}
public UserInfo builtObject(ResultSet rs) throws SQLException{
//将一行数据封装成一个实体对象
UserInfo userInfo=new UserInfo();
userInfo.setUserId(rs.getInt("u_id"));
userInfo.setUserName(rs.getString("u_name"));
userInfo.setUserPwd(rs.getString("u_pwd"));
userInfo.setUserNick(rs.getString("u_nick"));
userInfo.setUserImg(rs.getString("u_img"));
userInfo.setUserEmail(rs.getString("u_email"));
userInfo.setUserPhone(rs.getString("u_phone"));
userInfo.setUserCardId(rs.getString("u_card_id"));
userInfo.setUserRegisterTime(rs.getDate("u_register_time"));
userInfo.setUserState(rs.getBoolean("u_state"));
userInfo.setUserRemark(rs.getString("u_remark"));
return userInfo;
}
public List<UserInfo> buildList(ResultSet rs) throws SQLException{
List<UserInfo> list = new ArrayList<UserInfo>();
rs.beforeFirst();
while(rs.next(){
list.add(this.buildObject(rs));
}
return list;
}
}
文章浏览阅读4k次,点赞3次,收藏11次。Sklearn中predict_proba函数用法及数学原理详解(以logistic回归为例)_predict_prob
文章浏览阅读1.4k次。MVCC解决什么问题?原理是什么?_mvcc解决了什么问题
文章浏览阅读383次。根据邱维声老师的高等代数课程,整理的笔记。_比较消元法和初等变换求线性方程组的异同,并阐述自己的收获
文章浏览阅读281次。Android HyBridge 开发一、三种App开发方式对比1. Native App特点:UI元素、数据内容、逻辑架构都安装在手机终端,导致不可跨平台,每次版本升级都要重新打包。缺点:无法跨平台、升级麻烦、开发成本高(指跨平台开发成本高)优点:速度快,用户体验好。2. Web App定义:可理解为移动端的网站,将网页部署在服务器上,用户通过各大浏览器来访问。缺点:页面访问速度慢、用户体验差。..._安卓应用商店app demo
文章浏览阅读318次。Stable Diffusion 图生图知识思维导图;使用 5W1H 框架启动一个可控的AI项目;培生集团将生成式AI学习工具引入在线高等教育平台;前 Meta AI 高管离职创业,做教育类 ChatGPT 应用……点击阅读全文_inscode deecamp x csdn ai应用创新大赛
文章浏览阅读814次,点赞9次,收藏7次。作者简介:我目前是一个在校学生,现在不敢说自己擅长什么,但是我想通过自己的学习努力让自己的技术、知识都慢慢提升,希望我们一起学习呀~。有话想说:写博客、记笔记并不是一种自我感动,把学到的东西记在脑子里才是最重要的,在这个过程中,不要浮躁,希望我们都可以越来越优秀!由于算法不会改变原有的元素集合,只需要一个额外的变量控制索引变化,所以空间复杂度为常数级:O(1)️兴趣领域:目前偏向于前端学习 算法学习。语言说明:代码实现我会用Python/C++~空间复杂度:O(1)
文章浏览阅读353次,点赞2次,收藏5次。Debruijn问题 超星作业题目描述:输入输出要求:解题:备注:题目描述:输入输出要求:输入:n(n<=4)输出:按照字典序输出符合的答案(当出现多组本质不同的解时,仅输出字典序中最小的那个序列);每行数字间以一个西文空格间隔,行末有一个换行符。样例1:输入:3输出:0 0 0 1 0 1 1 1解题://准备#include<stdio.h>#include<math.h>int m[16]={0}; //数组 int fl_debruijn
文章浏览阅读1.1k次,点赞33次,收藏21次。javaAPI(java Application Programming Interface)即java应用程序编程接口,它是运行库的集合,预先定义了一些接口和类,程序员可以直接使用这些已经被打包的接口和类开发具体的应用来节约大量的时间和精力。API除了有"应用程序编程接口"的意思,还特指API的说明文档,也被称为API帮助文档。java语言的强大之处在于它提供了多种多样的类库,从而大大提高了程序的编程效率和质量,javaAPI提供常用的包如下。
文章浏览阅读541次。提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、tkinter窗口1.简介2.Tkinter 控件二、1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、tkinter窗口1.简介Tkinter 是使用 python 进行窗口视窗设计的模块,是 python 自带的、可_python窗体类库
文章浏览阅读825次。基于STM32F7通过cube软件配置:读写QSPI接口64M flash和64M PSRAM参考教程核心板:NUCLEO-F767ZIFlash:NM25Q64EB(64M)PSRAM:IPS6404L(64M)配置文件请使用stm32cubemx打开程序请使用keil5MDK打开NUCLEO-F767ZI上引出的QSPI引脚如下,NM25Q64EB和IPS6404L都是分别接到同样..._stm32f7 单片机 64引脚
文章浏览阅读388次。pNewRaster是你的Raster图层IRasterBandCollection pRasterBC =(IRasterBandCollection ) pNewRaster;IRasterBand pRasterBand = pRasterBC.Item(0);ITable pTable = pRasterBand.AttributeTable;IQueryFilter pQueryFilter=new QueryFilterClass ();pQueryFilter .WhereClau._r raster getvalue
文章浏览阅读226次。如果你曾经写过或者用过 Python,你可能已经习惯了看到 Python 源代码文件;它们的名称以.Py 结尾。你可能还见过另一种类型的文件是 .pyc 结尾的,它们就是 Python “字节码”文件。(在 Python3 的时候这个 .pyc 后缀的文件不太好找了,它在一个名为__pycache__的子目录下面。).pyc文件可以防止Python每次运行时都重新解析源代码,该文件大大节省了时间。..._python反编译class文件