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

网站建设方案书模版怎么建立一个网站链接

网站建设方案书模版,怎么建立一个网站链接,好看的网站 你明白吗,卡一卡二卡三入口20211. 前言 本节和大家一起聊聊 Hibernate 是如何自动生成 SQL 语句的。通过本节的学习#xff0c;你将了解到#xff1a; 反射在框架中的重要性#xff1b;元数据描述对 Hibernate 的重要性。 2. 理想状态 Hibernate 是全自动的 JDBC 框架#xff0c;能自动构建 SQL 语句、…1. 前言 本节和大家一起聊聊 Hibernate 是如何自动生成 SQL 语句的。通过本节的学习你将了解到 反射在框架中的重要性元数据描述对 Hibernate 的重要性。 2. 理想状态 Hibernate 是全自动的 JDBC 框架能自动构建 SQL 语句、能自动封装数据。 做为开发者不能在使用的便利性中迷失自己应该要学会多思考Hibernate 是如何自动构建 SQL 语句的 答案本身很简单使用反射机制。 先来一个最理想化的构建实例假设实体类名和表名相同、实体类中的属性和表中的字段命名相同。 编写自己的 Session 类 public class MySessionT {public T get(Class clz,Serializable id) { String sqlcreateSql(clz,id);//其它操作…… return null;}private String createSql(Class clz, Serializable id) { return null;} }get()方法接受 2 个参数这 2 个参数便是构建 SQL 的核心。传递给内部的 createSql()方法用来进行 SQL 语句构造。 关注 createSql() 方法中的代码 1声明变量。 // SQL 查询模板String sql select {0} from {1} where {2} {3};// 表名String tableName null;// 字段列表StringBuffer selFields new StringBuffer();// 主键字段String keyField null;2看来就是要为 SQL 查询模板中的占位符找到具体值。因为类名和表名相同所以表名很容易找到。 // 类名就是表名tableName clz.getSimpleName();3因为属性名与表中的字段名相同所以表的字段信息也很容易找到。 // 属性名就是查询的字段名找到属性等于找到字段信息Field[] fields clz.getDeclaredFields();4这里有一个较麻烦的地方怎么找到主键字段这里假设第一个属性对应的是主键字段。 Field[] fields clz.getDeclaredFields();for (int i 0; i fields.length; i) {if (i 0)keyField fields[i].getName();selFields.append(fields[i].getName()).append(,);}// 删除最后一个,selFields.deleteCharAt(selFields.length() - 1);5最后构建 SQL 。 sql MessageFormat.format(sql, new Object[] {selFields,tableName,keyField,id});测试输出大家自己去完成。 3. 非理想状态 前面假设了一种特别理想的状态。但是现实总比理想残酷。 很多情况下表名与类名、属性名和字段名都不同名主键字段对应的属性也不一定放在第一个。 这种情形下又如何构建 SQL 。此时注解就起到了作用。大家还记得常用的注解吗 TableIdColumn。 有了这 3 个注解查找表名、字段信息、主键字段就不需要再靠强制性的代码规范了。 重构 createSql() 方法中的代码。 本质上没有发生改变还是为 SQL 查询模板中的占位符找到所有具体值。 1找到表名。其本思路是如果有 Table 注解表名就是注解提供的名字如果没有注解则表名与类名相同 // 查找类上面是否有 Table 注解Table tableAnnotaion (Table) clz.getAnnotation(Table.class);if(tableAnnotaionnull) //则认为类名与表名相同tableName clz.getSimpleName();else //表名为注解中提供的值tableNametableAnnotaion.name();2找到表的所有字段信息。为了简化代码假设 Id 或 Column 注解直接标注在属性上面。即使标注在 get方法上面也不难 // 属性信息Field[] fields clz.getDeclaredFields();//是否存在 Id 注解boolean ishasIdAnnotation false;Id idAnnotationnull;Column columnAnnotation null;String fieldName null;for (Field field : fields) {// Id 注解idAnnotation field.getAnnotation(Id.class);// Column 注解columnAnnotation field.getAnnotation(Column.class);if (idAnnotation ! null) {keyField field.getName();ishasIdAnnotation true;}if (columnAnnotation null)// 有 Column 注解则从注解中取值fieldName field.getName();else//没有 Column 注解则和属性表相同fieldName columnAnnotation.name();selFields.append(fieldName).append(,);}if (!ishasIdAnnotation) {throw new Exception(Id 注解是必须的);}// 删除最后一个,selFields.deleteCharAt(selFields.length() - 1);3构建 SQL 语句。 sql MessageFormat.format(sql, new Object[] { selFields, tableName, keyField, id });测试 createSql方法在控制台可看到通过反射自动构建的 SQL 语句 select stuId,stuName,stuSex,stuPassword from student where stuId 1测试结果需要以你自己的实体类和表做参考。 4. 小结 本节给出了 2 种情形下构建 SQL 语句的实现。 一种对编码规范要求非常严格因为编码规范有很多人为因素很难保证类结构和表结构如同镜像不出现差异性。显然在这种严格的编码规范下构建 SQL 的性能消耗是最低的所以一入职场第一堂课就是培训编码规范性。 第二种情形应该是一种常态所以需要使用注解的方式标识差异性当然反射时付出的性能代价会增加。 本节没有讨论构建多表查询的实现有了这些基础相信都将不会很难。
http://www.hkea.cn/news/14573614/

相关文章:

  • 阿里巴巴有几个网站是做外贸的重庆网站建设jccit
  • 网站建设要注意些什么seo刷关键词排名优化
  • 大连专业制作网站宿州市住房和城乡建设局网站
  • 网站 宣传册你在四川省建设安全与质量监督网站
  • 交互设计个人网站wordpress页面 文章页 分类
  • 黑龙江网上建设局报建网站企业信用不良记录查询
  • 网站基础建设和管理暂行办法南京建设工程公共资源交易中心网站
  • 如何建设内部网站西安优化外包
  • 有做足球裁判跑动数据的网站吗厦门app开发网站开发公司电话
  • 怎么学建网站A华企网络网站建设
  • 浙江省建设工程质监站网站wordpress 外部页面
  • 厦门礼品网站商城制作案例顺德网站建设价位
  • 联通的网站是谁做的不用备案的网站
  • 网站后台如何添加代码cms网站
  • 贵州黔东南双控体系建设网站苏州网网站建设
  • 大同做网站网站注销主体注销
  • 怎么模仿一个网站兔展制作h5页面模板
  • 免费建企业网站哪个好校园超市网站开发
  • 简单的电商网站开发seo及网络推广招聘
  • 网站关键词价格百度seo优化及推广
  • 广州旅游网站建设设计艺术设计类网站
  • 做暧暧网站免费手机优化游戏性能的软件
  • 关于网站建设的参考文献网页设计建网站流程
  • cnzz网站排名是怎么做的网站投注建设
  • 网站维护需要做什么可以做网站的电脑软件
  • 宿州做网站的公司互联网外包公司名单
  • 怎么做网站底部文件wordpress 主题新建页面
  • 网站的竞争对手摄影师招聘网站
  • 网站入口你会回来感谢我的办公系统
  • 视觉设计工作室惠州seo关键词排名