当前位置: 首页 > news >正文

dw简述网站开发流程软件开发项目甘特图

dw简述网站开发流程,软件开发项目甘特图,网络规划设计师备考需要多久,公共服务标准化指南【JavaEE】MyBatis框架要点总结#xff08;3#xff09; 文章目录 【JavaEE】MyBatis框架要点总结#xff08;3#xff09;1. 多表查询1.1 映射表resultMap1.2 只有部分属性跨表查询1.2.1 依照常规去写代码1.2.2 用标签去实现接口 1.3 分多步的解决方案1.4 与多线程的结合 … 【JavaEE】MyBatis框架要点总结3 文章目录 【JavaEE】MyBatis框架要点总结31. 多表查询1.1 映射表resultMap1.2 只有部分属性跨表查询1.2.1 依照常规去写代码1.2.2 用标签去实现接口 1.3 分多步的解决方案1.4 与多线程的结合 2. 动态SQL2.1 if 标签2.2 test值2.3 trim标签2.4 where标签2.5 set标签2.6 foreach标签2.6.1 通过Integer数组批量删除2.6.2 通过UserInfo集合批量插入2.6.3 传入多个集合 3. 最后的碎碎念 of MyBatis完结✿✿ヽ(°▽°)ノ✿ 【JavaEE】MyBatis框架要点总结3 上一篇文章我们学习了MyBatis框架对数据库的各种单表操作想必已经对增删改查语法已经熟悉很多了 但是我们学习的只是一些固定的功能更复杂的业务要求还是不能满足 insert一个对象如果这个对象有些属性是没有被赋值的则插入的时候values中不传值 因为对象属性的默认值并不一定是数据库表的字段的默认值 批量增删…多表查询…等等… 我们先从多表查询讲起~ 1. 多表查询 有些时候我们要的信息并非在同一张表中其实很少因为一般一个实体类就代表一张表 这个时候就需要联合查询了~ 1.1 映射表resultMap 这种方法很麻烦无非就是能手动加一些映射关系而实现功能个人觉得比较暴力 大概代码差不多长这样 resultMap idBaseMap” typecom.example.demo .model.ArticleInfo.id propertyid” columnid/idresult propertytitle columntitle/resultresult propertycontent columncontent/resultresult propertycreatetime columncreatetime/resultresult propertyupdatetime columnupdatetime/resultresult propertyuid columnuid/resultresult propertyrcount columnrcount/resultresult propertystate” columnstate/resultassociation propertyuser resultMapcom.example.demo.mapper.UserMapper.BaseMap columnPrefixu_/association /resultMap select idgetAll resultMapBaseMapselect a.*,u.username u username from articleinfo aleft join userinfo u on a.uidu.id /select association标签可实现一篇文章对应一个作者 除此之外还有collection标签去实现一个用户对应多篇文章 太麻烦了可读性不高基本不会有人会用的所以我不演示了~ 1.2 只有部分属性跨表查询 对于这种情况的话就不需要查询出另一张表的整个实体对象了~ 例如一篇博客文章联合上作者的名字 当然如果你要携带一个对象也不是不行把他的属性全部写一遍~ 特别不建议这样很不美观并且只能一对一不能一对多 其实一遍情况下这样是够用的因为我们在实际场合中一对一都只需要另一张表的几个重要信息 这种情况则跟平常的写法一致 因为 “赋值规则” 是以 最终呈现的表的情况为准 即 只要通过联合查询方式出现的列都能赋值给属性 创建对应的mapper接口和xml文件 低耦合高内聚封装和隔离嘛 1.2.1 依照常规去写代码 ?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.example.demo.mapper.ArticleMapper/mapper测试 效果 原理就是 最终呈现的表的列是可以赋值的 1.2.2 用标签去实现接口 注解代替xml的原理 Select代替select标签 增删改查对应增删改查的注解 加在哪个方法上id就是啥resultType就是其返回类型注解内的字符串就是原标签内部的sql代码 测试 结果一致 在这样的简单内部sql代码而言这样写很方便而在复杂的操作下并不是很方便~ 例如等一下要讲的动态sql代码弊端引号限制书写字符串禁锢思想… 1.3 分多步的解决方案 对于一对多例如一个作者携带多篇文章情况我们一般采取 分多步的解决方案数据库没有集合类型 假设要找的用户为id1 在userinfo中去找id等于1的用户对象在articleinfo中去找uid等于1的文章对象合并结果 实现 效果 1.4 与多线程的结合 有时候面试官可能会问你你的项目有没有结合多线程呢 你可能不知道怎么回答但是你可以说多表查询的时候可以用到线程池 两张表同时查后一起合并~没有线程安全问题提高CPU利用率提高代码效率 代码实现 线程池博客【JavaEE】线程案例-定时器-线程池 and 工厂模式_s:103的博客-CSDN博客等待线程结束方法博客【JavaEE】Callable接口(NO.6线程创建方法)-JUC的常见类-与线程安全有关集合类_s:103的博客-CSDN博客 获得线程池 用计数员CountDownLatch去判断线程是否结束 等待两个线程结束才继续后面的内容 效果 多表查询讲完后就是MyBatis篇章的最后一个内容动态SQL 2. 动态SQL 主要是因为这是xml去实现接口的方法并不像jdbc编程我们可以用java做一些自定义的业务逻辑去构造sql字符串到目前为止的功能似乎都是我们写死的但是如果要用jdbc结合java代码去写一些操作也是麻烦的 例如 我们并不能给枚举每个种情况写那么多的方法 然后通过笨方法去判断使用哪个方法 因此MyBatis在xml是实现接口中加入了语法动态SQL 在标签中编写sql代码的杂合语法标签进行一些业务逻辑再呈现出最终的SQL语句 千万别把这个过程看成写字符串而是书写代码 即让方法实现有了逻辑的是活的是动态的SQL又让方法实现更加简单这就是框架的意义 接下来讲解实现常见逻辑的便签等一下记得题一下注解这样写不方便还有引号不方便开发不方便写字符串的限制… 2.1 if 标签 对于这个要求其实在很多场合都会出现例如填报信息中的*必选项和非必选项 这样导致最终提交的信息属性的赋值情况参差不齐啥情况都有 而if标签实现的逻辑就可以很好的解决这个问题 补充 state的值是0或者是1而对象中没有被赋值是0无法判断这个值是否是有效值所以state在定义时应该改为Integer类型 可以看出基本数据类型的包装类只有在不得不写的时候才会用~ xml实现 显然这段代码不能复制给之前注解实现的方法的括号里因为写法不方便并且有引号的限制 测试 效果 数据库 数据库 想必你能感受到一点“动态”的感觉动态SQL就是MyBatis的一个强大特性 2.2 test值 test值的内容就是一段java代码的逻辑表达式结果true或者是false test值中的对象的变量名 传入自定义对象的属性名由于传入自定义对象就必然是单参所以就只是这个对象中的属性传入多个参数的参数名默认/自己设置 不需要#{}去包起来就看成java代码直接使用变量名代表变量 不规范写法就等着报错吧 (╬▔皿▔)凸 传入多个参数 效果 数据库 2.3 trim标签 其实刚才的要求并没有完成还是有可能会出bug 报错可以但是报的错应该是必选项没有填而不是sql语句错误 正确的报500 这个错是因为数据库的userinfo表规定了username和password是不能为空的也就是说 必须传这两个值否则就会这样报错以此实现“必选项”的功能 错误的报500 原因是SQL语句变成了 insert into userinfo(username, password,) values(#{username}, #{password},)那两个逗号导致sql语句不符合语法 而trim标签的出现就是为了避免这样以及类似的语法错误 trim标签的 “修理功能”可以有效解决这些前缀后缀分隔符的问题 trim标签的功能分为四个属性 prefix 如果语块内进行一系列标签的逻辑操作动态变化后最终不为空增加前缀prefix suffix 如果语块内进行一系列标签的逻辑操作动态变化后最终不为空增加后缀suffix prefixOverrides 如果语块内进行一系列标签的逻辑操作动态变化后前缀为prefixOverrides则删除 suffixOverrides 如果语块内进行一系列标签的逻辑操作动态变化后后缀为prefixOverrides则删除 优化刚才的代码 方法的实现 测试 效果 多余的后缀去掉了并且括号加上了 数据库 补充可想而知如果啥也不传就是 insert into userinfo values;显然是语法错误的但是也正常因为啥也不传本来就不合理啥也没有干哈子添加操作~ 即使一张表每个字段都有默认值但是一个都不传本身就是不合实际的这个点不需要解决就该报500 在sql语句后加一些空格、换行、tab等空白符不会影响后缀的判断 不演示… 2.4 where标签 其实trim的功能更加灵活可以实现的功能很全面了静待你的发挥 而where标签则是trim中的一种特殊而且常见的情况用于条件查询的where条件 select * from userinfo where username #{username} and password #{password} and state #{state};这个方法的功能是查询所有跟传过来的userinfo已有属性值都相同的用户 如果userinfo中属性都没被赋值则就是全表查询被赋值的越少条件越简单 xml实现 但是你也会很快意识到这会出现 where and的情况出现 测试 效果 错误效果 where没去掉 出现了where and 所以就有了where标签 如果语块最终非空则默认在前面加where前缀如果语块最终的前缀and或者or会去除 没有涉及NOT只适合简单的删除前缀and/or不涉及其他复杂的逻辑表达式其实sql本身逻辑表达式在实际情况里不会很复杂最多就这样了标签的功能是有限的我们要遵守框架规则才能吃到框架的红利 在前面就不要加where了否则就会出现两个where的情况 效果 where本质其实就是这样 trim prefixwhere prefixOverridesandtrim prefixOverridesor/trim /trim测试 注意 删除and/or只是前缀后缀不行 效果 2.5 set标签 跟where标签一样也是trim标签的一种特殊的创建情况主要是代替修改操作的set语句 update username set state 0, username 尊嘟假嘟 where id #{id};同样的里面的逗号,可能会出现set ,的尴尬情况 所以set标签能解决这个问题 语句非空加前缀set抹除后缀的逗号, 相当于这个trim标签 trim prefixset suffixOverrides,/trim接口方法 要求根据这个用户信息的id将username password state属性更新到表里对应的用户 xml实现 测试 效果 用户名赋值的是尊嘟假嘟 密码赋值的是666哦 数据库 注意前缀逗号不会被去掉的并且前面别加set否则会出现set set的情况其他应用猜猜就能写了交给你了… 2.6 foreach标签 顾名思义就是遍历集合/数组的意思这个标签常常用于批量增删的操作 并且没有这个标签是不能传入ListObject 或者Object[]因为数据读不了~批量操作的出现概率也比较低之前我们对于批量操作是用for循环进行n次的数据库操作而不是一次到位 foreach有以下属性 collection绑定方法参数中的集合名 可以是ListMapSet数组… item遍历时的每一个对象open和close语句非空时的前后缀separator每次遍历的数据之间的分隔符index循环变量从0开始一次循环加一不常用~ java代码的理解伪代码 String subSQL delete from userinfo where id in ; subSQL (; for(Object item : collection) {subSQL #{item.property};//自动检测要不要添加分隔符separator } subSQL );2.6.1 通过Integer数组批量删除 xml实现 就是打算将Integer集合转化为(1,2,3)的这种形式跟in搭配 测试 效果 数据库 2.6.2 通过UserInfo集合批量插入 xml实现 我写的测试用例信息全面重点突出foreach标签的功能虽然可以和其他标签结合使用发挥更大的功能所以我的写法并不全面通用性不高~ 这里讲基础更多想法和应用交给你咯 但是在这里还是以讲解foreach功能为主 测试 准备测试用例 注意添加不带参数的构造方法不然Bean对象无法存储 因为我们自己写的构造方法会顶替原来的构造方法 效果 数据库 2.6.3 传入多个集合 我猜测主要是因为传入的集合的有可能是IntegerString…的非自定义对象集合我们有时候需要传入多个这样的不同类型的集合原本的Param显然不适用了~ 所以foreach标签提供的机制是 collection去连接集合item规定对象名 非自定义类型集合中的一个的包装类元素起了个名item可以#{item} 直接跟元素已是最小单元建立对应 自定义类型集合中的一个对象元素起了个名item可以#{item.property} 间接跟元素的属性建立对应 因此我们反而可以传入两个自定义类型集合等多个集合因为不会出现冲突 效果 数据库 3. 最后的碎碎念 of MyBatis完结✿✿ヽ(°▽°)ノ✿ 在MyBatis的学习过后想必你有很多想法因为我讲的毕竟是常见写法至于他们杂合起来是什么样的这就是你可以发挥的了 如果可以可以去学习MyBatis Plus的语法 实际后端需要的sql有关的逻辑不会再复杂了即使有也应该在使用接口方法前进行简化趋向于按照框架的规定进行操作所以不要焦虑于用这些标签进行复杂逻辑操作 其实后端程序操作数据库都应该是简单且安全的sql语句所以创建库创建表删库删表等操作都不是程序来操作的虽然jdbc能够实现这些操作但是学了没用 我们学会的就是技能用这些技能有了思想要怎么实现功能能实现什么功能发挥你的头脑去自由的应用吧都能实现的了的 你可能发现你的知识按照这个逻辑来实现某个功能是可行的对就这么去猜然后去实践它 我做不到把每个属性每个语法都讲但是这些足以实现会遇到的问题了 即使会遇到不会的就上网去学因为更多巧妙的东西还可以进一步去学主打个“有需要再学” 文章到此结束谢谢观看 可以叫我 小马我可能写的不好或者有错误但是一起加油鸭 代码位置mybatis_demo/src · 游离态/马拉圈2023年8月 - 码云 - 开源中国 (gitee.com)
http://www.dnsts.com.cn/news/45546.html

相关文章:

  • 长春个人网站制作公司wordpress 预览pdf
  • 个人兴趣网站设计电子商务具体干嘛的
  • 深圳外贸网站建设服务商高性能网站建设进行指南
  • u盘搭建网站开发环境方法快速搭建企业网站
  • 破解软件网站安徽六安特产
  • 上海做网站比较有名的公司网站建设 运维 管理
  • 房地产网站建设公司网网站建设与设计
  • 常州做网站价位万网域名解析后台
  • 建设信用卡网站免费房屋设计装修
  • 西安做网站哪家公司好如何制作一个公司网站
  • 厦门建设公司网站龙岩网站建设哪里比较好
  • 站长之家网站素材网站建设和购买区别
  • 百度网站推广网络网站建设专家评审意见
  • 网络销售怎么做自己的网站买了域名之后怎么用
  • 蒙古文门户网站建设督导品牌建设教材
  • 重庆网站推广怎么查询网站开发时间
  • 网站收费板块怎么做公司宣传推广方案
  • 电商运营网站哪里做公司网站
  • 口碑好的天津网站建设wordpress 授权协议
  • 网站建设可行性研究报告范文百度云搜索引擎入口百度网盘
  • 硬件开发公司外贸网站seo招聘
  • wordpress制作网站佛山网站seo公司
  • 中国建设招标网是私人网站吗线上装修设计
  • 专业制作网站用哪些软件wordpress文章页面
  • 营销导向网站建设流程整站优化外包服务
  • 古蔺中国建设银行网站wordpress 询盘
  • 个人网站注册平台要多少钱苏州建站公司选苏州聚尚网络
  • 信息科技公司网站怎么做数学网站怎么做
  • 网站开发公司业务员培训跨境一件代发平台
  • nas可以做网站服务器吗我注册过的网站