精华内容
下载资源
问答
  • JPA反向工程生成模板

    2021-01-13 15:52:07
    easycode反向工程生成DAO service层: 通过创建好的数据库使用的技术是jpa 安装easycode: 我使用的是idea进行生成代码,在plugins安装easycode 设置easycode,在模板配置配置jpa: 首先添加分组,我命名为jpa,...

    easycode反向工程生成DAO service层:

    通过创建好的数据库使用的技术是jpa

    安装easycode:

    我使用的是idea进行生成代码,在plugins安装easycode
    在这里插入图片描述

    设置easycode,在模板配置配置jpa:

    在这里插入图片描述

    首先添加分组,我命名为jpa,然后再依次添加生成dao层service层的jpa代码模板。

    service:

    ##定义初始变量
    #set($tableName = tool.append(tool.append(tableInfo.name, “Service”))
    ##设置回调
    !callback.setFileName(!callback.setFileName(tool.append($tableName, “.java”))
    !callback.setSavePath(!callback.setSavePath(tool.append($tableInfo.savePath, “/service”))

    ##拿到主键
    #if(!KaTeX parse error: Expected 'EOF', got '#' at position 35: …isEmpty()) #̲set(pk = $tableInfo.pkColumn.get(0))
    #end

    #if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service;

    import !tableInfo.savePackageName.entity.!{tableInfo.savePackageName}.entity.!{tableInfo.name};
    import java.util.List;
    import org.springframework.data.domain.Page;
    /**

    • !tableInfo.comment(!{tableInfo.comment}(!{tableInfo.name})表服务接口
    • @author zry
    • @since $!time.currTime()
      */
      public interface $!{tableName} {
      !tableInfo.namequeryById(!{tableInfo.name} queryById(!pk.shortType !pk.name);Page<!pk.name); Page<!{tableInfo.name}> queryAllByLimit(int offset, int limit);
      !tableInfo.nameinsert(!{tableInfo.name} insert(!{tableInfo.name} !tool.firstLowerCase(!tool.firstLowerCase(!{tableInfo.name}));
      !tableInfo.nameupdate(!{tableInfo.name} update(!{tableInfo.name} !tool.firstLowerCase(!tool.firstLowerCase(!{tableInfo.name}));
      boolean deleteById($!pk.shortType !pk.name);List<!pk.name); List<!{tableInfo.name}> getall();
      }

    serviceImpl:

    ##定义初始变量
    #set($tableName = tool.append(tool.append(tableInfo.name, “ServiceImpl”))
    ##设置回调
    !callback.setFileName(!callback.setFileName(tool.append($tableName, “.java”))
    !callback.setSavePath(!callback.setSavePath(tool.append($tableInfo.savePath, “/service/impl”))

    ##拿到主键
    #if(!KaTeX parse error: Expected 'EOF', got '#' at position 35: …isEmpty()) #̲set(pk = $tableInfo.pkColumn.get(0))
    #end

    #if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service.impl;

    import !tableInfo.savePackageName.entity.!{tableInfo.savePackageName}.entity.!{tableInfo.name};
    import !tableInfo.savePackageName.dao.!{tableInfo.savePackageName}.dao.!{tableInfo.name}Dao;
    import !tableInfo.savePackageName.service.!{tableInfo.savePackageName}.service.!{tableInfo.name}Service;
    import org.springframework.stereotype.Service;
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.PageRequest;
    import javax.annotation.Resource;
    import java.util.List;
    import org.springframework.data.domain.Page;
    /**

    • !tableInfo.comment(!{tableInfo.comment}(!{tableInfo.name})表服务实现类

    • @author $!author

    • @since !time.currTime()/@Service("!time.currTime() */ @Service("!tool.firstLowerCase($!{tableInfo.name})Service")
      public class $!{tableName} implements $!{tableInfo.name}Service {
      @Resource
      private $!{tableInfo.name}Dao !tool.firstLowerCase(!tool.firstLowerCase(!{tableInfo.name})Dao;

      @Override
      public !tableInfo.namequeryById(!{tableInfo.name} queryById(!pk.shortType KaTeX parse error: Expected '}', got 'EOF' at end of input: … return this.!{tool.firstLowerCase(KaTeX parse error: Expected 'EOF', got '}' at position 19: …ableInfo.name})}̲Dao.getOne(!pk.name);
      }

      @Override
      public List<KaTeX parse error: Expected '}', got 'EOF' at end of input: … return this.!{tool.firstLowerCase($!{tableInfo.name})}Dao.findAll();

      }

      @Override
      public Page<KaTeX parse error: Expected '}', got 'EOF' at end of input: … return this.!{tool.firstLowerCase($!{tableInfo.name})}Dao.findAll(PageRequest.of((offset-1)
      *limit,limit));
      }

      @Override
      public !tableInfo.nameinsert(!{tableInfo.name} insert(!{tableInfo.name} !tool.firstLowerCase(!tool.firstLowerCase(!{tableInfo.name})) {

       return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.save($!tool.firstLowerCase($!{tableInfo.name}));
      

      }

      @Override
      public !tableInfo.nameupdate(!{tableInfo.name} update(!{tableInfo.name} !tool.firstLowerCase(!tool.firstLowerCase(!{tableInfo.name})) {

       return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.save($!tool.firstLowerCase($!{tableInfo.name}));
      

      }

      @Override
      public boolean deleteById($!pk.shortType $!pk.name) {

      try{
      this.KaTeX parse error: Expected '}', got 'EOF' at end of input: …firstLowerCase(!{tableInfo.name})}Dao.deleteById($!pk.name) ;
      }catch (Exception ex){
      return false;
      }
      return true;

      }
      }

    dao:

    ##定义初始变量
    #set($tableName = tool.append(tool.append(tableInfo.name, “Dao”))
    ##设置回调
    !callback.setFileName(!callback.setFileName(tool.append($tableName, “.java”))
    !callback.setSavePath(!callback.setSavePath(tool.append($tableInfo.savePath, “/dao”))

    ##拿到主键
    #if(!KaTeX parse error: Expected 'EOF', got '#' at position 35: …isEmpty()) #̲set(pk = $tableInfo.pkColumn.get(0))
    #end

    #if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}dao;

    import !tableInfo.savePackageName.entity.!{tableInfo.savePackageName}.entity.!{tableInfo.name};

    import java.util.List;
    import org.springframework.data.jpa.repository.JpaRepository;
    /**

    • !tableInfo.comment(!{tableInfo.comment}(!{tableInfo.name})表数据库访问层
    • @author zry
    • @since $!time.currTime()
      */
      public interface !tableNameextendsJpaRepository<!{tableName} extends JpaRepository<!{tableInfo.name} ,$!pk.shortType>{

    }

    配置完成:

    就可以连接数据库,右击选中的表,选中easycode,使用自己配置好的模板即可

    展开全文
  • Hibernate反向工程

    2012-06-04 22:19:47
    Hibernate是一个非常优秀的持久层框架,使用Hibernate技术可以提高80%以上的工作效率,现在Hibernate已经被国内大部分的IT企业所认可,并已经应用于自己的产品当中。
  • 本文是21Dianyuan 社区原创技术文章,作者 zhaohua2764,感谢作者的辛苦付出。(注:由于本帖文字篇幅超长,会分成约1-10篇文章推送,仅为部分内容,本帖图片、附件、视频较多,完整版请跳转到原帖中学习,在此,特别...

    本文是 21Dianyuan 社区原创技术文章,作者 zhaohua2764,感谢作者的辛苦付出。

    (注:由于本帖文字篇幅超长,会分成约1-10篇文章推送,仅为部分内容,本帖图片、附件、视频较多,完整版请跳转到原帖中学习,在此,特别感谢楼主的作者的整理和分享,对于初学者来说,本帖学习攻略完整理论+实践相结合,欢迎受用者转发到朋友圈,QQ空间,微博分享给更多需要的人,谢谢。)

    PCB 抄板过程中反推原理图的方法

    在 PCB 反向技术研究中,反推原理图是指依据 PCB 文件图反推出或者直接根据产品实物描绘出 PCB 电路图,旨在说明线路板原理及工作情况。并且,这个电路图也被用来分析产品本身的功能特征。而在正向设计中,一般产品的研发要先进行原理图设计,再根据原理图进行 PCB 设计。

    无论是被用作在反向研究中分析线路板原理和产品工作特性,还是被重新用作在正向设计中的 PCB 设计基础和依据,PCB 原理图都有着特殊的作用。那么,根据文件图或者实物,怎样来进行 PCB 原理图的反推,反推过程有该注意那些细节呢?

    一、合理划分功能区域

    在对一块完好的 PCB 电路板进行原理图的逆向设计时,合理划分功能区域能够帮工程师减少一些不必要的麻烦,提高绘制的效率。一般而言,一块 PCB 板上功能相同的元器件会集中布置,以功能划分区域可以在反推原理图时有方便准确的依据。

    但是,这个功能区域的划分并不是随意的。它需要工程师对电子电路相关知识有一定的了解。首先,找出某一功能单元中的核心元件,然后根据走线连接可以顺藤摸瓜的找出同一功能单元的其他元件,形成一个功能分区。功能分区的形成是原理图绘制的基础。另外,在这一过程中,不要忘记巧妙利用电路板上的元器件序号,它们可以帮助您更快的进行功能分区。

    二、找对基准件

    这个基准件也可以说是在进行原理图绘制之初所借助的主要部件,在确定基准件之后,根据这些基准件的引脚进行绘制,能够在更大程度上保证原理图的准确性。

    对于工程师而言,基准件的确定不是很复杂的事情,一般情况下,可以选择在电路中起主要作用的元器件作为基准件,它们一般体积较大、引脚较多,方便绘制的进行,如集成电路、变压器、晶体管等等,都可以作为合适的基准件。

    三、正确区分线路,合理绘制布线

    对于地线、电源线、信号线的区分,同样需要工程师有相关的电源知识、电路连接知识、PCB 布线知识等等。这些线路的区分,可以从元器件连接情况、线路铜箔宽度以及电子产品本身的特征等方面进行分析。

    在布线绘制中,为避免线路交叉与穿插,对地线可以大量使用接地符号,各种线路可以使用不同颜色的不同线条保证清晰可辨,对各种有元器件还可以运用专用标志,甚至可以将单元电路分开绘制,最后再进行组合。

    四、掌握基本框架,借鉴同类原理图

    对于一些基本电子电路的框架构成和原理图画法,工程师需要熟练掌握,不仅要能对一些简单、经典的单元电路的基本组成形式进行直接绘制,还要能形成电子电路的整体框架。

    另一方面,不要忽视,同一类型的电子产品在原理图上具有一定的相似性,工程师可以根据经验的积累,充分借鉴同类电路图来进行新的产品原理图的反推。

    五、核对与优化

    原理图绘制完成之后,还要经过测试与核对环节才能说 PCB 原理图的逆向设计结束。对 PCB 分布参数敏感的元件的标称值需要进行核对优化,根据 PCB 文件图,将原理图进行对比分析与核对,确保原理图与文件图的完全一致。

    若在核对中发现原理图布局上与要求不符,还将要进行原理图的调整,直到达到完全的合理与规范,准确和清晰。

    印制电路板设计前的必要工作

    1. 认真校核原理图:任何一块印制板的设计,都离不开原理图。原理图的准确性,是印制板正确与否的前提依据。所以,在印制板设计之前,必须对原理图的信号完整性进行认真、反复的校核,保证器件相互间的正确连接。

    2. 器件选型:元器件的选型,对印制板的设计来说,是一个十分重要的环节。同等功能、参数的器件,封装方式可能有不同。封装不一样,印制板上器件的焊孔(盘)就不一样。所以,在着手印制板设计之前,一定要确定各个元器件的封装形式。

    多层板在器件选型方面,必须定位在表面安装元器件(SMD)的选择上,SMD 以其小型化、高度集成化、高可靠性、安装自动化的优点而广泛应用于各类电子产品上。同时,在器件选用上,不仅要注意器件的特性参数应符合电路的需求,也要注意器件的供应,避免器件停产问题;同时应意识到:目前很多国产器件,如片状电阻、电容、连接器、电位器等的质量已逐渐达到进口器件的水平,且有货源充足、交货期短、价格便宜等优势。所以,在电路许可的条件下,应尽量考虑采用国产器件。

    电路设计中的 IC 代换技巧分析

    一、IC 直接代换

    直接代换是指用其他 IC 不经任何改动而直接取代原来的 IC,代换后不影响机器的主要性能与指标。

    代换原则是:代换 IC 的功能、性能指标、封装形式、引脚用途、引脚序号和间隔等几方面均相同。其中 IC 的功能相同不仅指功能相同;还应注意逻辑极性相同,即输出输入电平极性、电压、电流幅度必须相同。例如:图像中放 ICTA7607 与 TA7611,前者为反向高放 AGC,后者为正向高放 AGC,故不能直接代换。除此之外还有输出不同极性,AFT 电压,输出不同极性的同步脉冲等 IC 都不能直接换即使是同一公司或厂家的产品,都应注意区分。性能指标是指 IC 的主要电参数(或主要特性曲线)、最大耗散功率、最高工作电压、频率范围及各信号输入、输出阻抗等参数要与原 IC 相近。功率小的代用件要加大散热片。其中:

    01

    IC 的代换:同一型号

    同一型号 IC 的代换一般是可靠的,安装集成电路时,要注意方向不要搞错,否则,通电时集成电路很可能被烧毁。有的单列直插式功放 IC,虽型号、功能、特性相同,但引脚排列顺序的方向是有所不同的。例如,双声道功放 IC LA4507,引脚有“正”、“反”之分,其起始脚标注(色点或凹坑)方向不同:没有后缀与后缀为"R",的 IC 等,例如 M5115P 与 M5115RP。

    02

    IC 的代换 :不同型号

    型号前缀字母相同、数字不同 IC 的代换。这种代换只要相互间的引脚功能完全相同,其内部电路和电参数稍有差异,也可相互直接代换。如:伴音中放 IC LA1363 和 LA1365,后者比前者在 IC 第⑤脚内部增加了一个稳压二极管,其它完全一样。

    型号前缀字母不同、数字相同 IC 的代换。一般情况下,前缀字母是表示生产厂家及电路的类别,前缀字母后面的数字相同,大多数可以直接代换。但也有,虽数字相同,但功能却完全不同。例如,HA1364 是伴音 IC,而 uPC1364 是色解码 IC;4558,8脚的是运算放大器 NJM4558,14脚的是 CD4558 数字电路;故二者完全不能代换。

    型号前缀字母和数字都不同 IC 的代换。有的厂家引进未封装的 IC 芯片,然后加工成按本厂命名的产品。还有如为了提高某些参数指标而改进产品。这些产品常用不同型号进行命名或用型号后缀加以区别。例如,AN380 与 uPC1380 可以直接代换;AN5620、TEA5620、DG5620 等可以直接代换。

    二、非直接代换

    非直接代换是指不能进行直接代换的 IC 稍加修改外围电路,改变原引脚的排列或增减个别元件等,使之成为可代换的 IC 的方法。

    代换原则:代换所用的 IC 可与原来的 IC 引脚功能不同、外形不同,但功能要相同,特性要相近:代换后不应影响原机性能。

    01

    不同封装 IC 的代换

    相同类型的 IC 芯片,但封装外形不同,代换时只要将新器件的引脚按原器件引脚的形状和排列进行整形。例如,AFT 电路 CA3064 和 CA3064E,前者为圆形封装,辐射状引脚;后者为双列直插塑料封装,两者内部特性完全一样,按引脚功能进行连接即可。双列 IC AN7114、AN7115 与 LA4100、LA4102 封装形式基本相同,引脚和散热片正好都相差180度。前面提到的 AN5620 带散热片双列直插16脚封装、TEA5620 双列直插18脚封装,9、10脚位于集成电路的右边,相当于 AN5620 的散热片,二者其它脚排列一样,将9、10脚连起来接地即可使用。

    02

    电路功能相同但个别

    引脚功能不同 lC 的代换

    代换时可根据各个型号 IC 的具体参数及说明进行。如电视机中的 AGC、视频信号输出有正、负极性的区别,只要在输出端加接倒相器后即可代换。

    03

    类塑相同但引脚功能不同 IC 的代换

    这种代换需要改变外围电路及引脚排列,因而需要一定的理论知识、完整的资料和丰富的实践经验与技巧。

    04

    有些空脚不应擅自接地

    内部等效电路和应用电路中有的引出脚没有标明,遇到空的引出脚时,不应擅自接地,这些引出脚为更替或备用脚,有时也作为内部连接。

    05

    组合代换

    组合代换就是把同一型号的多块 IC 内部未受损的电路部分,重新组合成一块完整的 IC,用以代替功能不良的 IC 的方法。对买不到原配 IC 的情况下是十分适用的。但要求所利用 IC 内部完好的电路一定要有接口引出脚。

    非直接代换关键是要查清楚互相代换的两种 IC 的基本电参数、内部等效电路、各引脚的功能、IC 部元件之间连接关系的资料。实际操作时予以注意:

    集成电路引脚的编号顺序,切勿接错。

    为适应代换后的工 C 的特点,与其相连的外围电路的元件要作相应的改变,电源电压要与代换后的 IC 相符,如果原电路中电源电压高,应设法降压;电压低,要看代换 IC 能否工作。

    代换以后要测量 IC 的静态工作电流,如电流远大于正常值,则说明电路可能产生自激,这时须进行去耦、调整。若增益与原来有所差别,可调整反馈电阻阻值。代换后 IC 的输入、输出阻抗要与原电路相匹配;检查其驱动能力。

    在改动时要充分利用原电路板上的脚孔和引线,外接引线要求整齐,避免前后交叉,以便检查和防止电路自激,特别是防止高频自激。在通电前电源 Vcc 回路里最好再串接一直流电流表,降压电阻阻值由大到小观察集成电路总电流的变化是否正常。

    06

    分立元件代换 IC

    有时可用分立元件代换工 C 中被损坏的部分,使其恢复功能。代换前应了解该工 C 的内部功能原理、每个引出脚的正常电压、波形图及与外围元件组成电路的工作原理。同时还应考虑:

    (1)信号能否从工 C 中取出接至外围电路的输入端:

    (2)经外围电路处理后的信号,能否连接到集成电路内部的下一级去进行再处理(连接时的信号匹配应不影响其主要参数和性能)。如中放 IC 损坏,从典型应用电路和内部电路看,由伴音中放、鉴频以及晋频放大级成,可用情号汪入法找出损坏部分,若是音频放大部分损坏,则可用分立元件代替。

    看看 PCB 厂家的生产能力(一)

    ▶ PCB 生产能力:

    1.工艺能力:

    (1)钻孔:最小成品孔径 0.25mm

    (2)孔金属化:最小孔径 0.3mm,板厚/孔径比4:1

    (3)导线宽度:最小线宽:金板 0.10mm,锡板 0.125mm

    (4)导线间距:最小间距:金板 0.10mm,锡板 0.125mm

    (5)镀金板:镍层厚度:〉或=2.5μ

        金层厚度:0.05-0.1μm 或按客户要求

    (6)喷锡板:锡层厚度:>或=2.5-5μ

    (7)铣板:线到边最小距离:0.15mm

        孔到边最小距离:0.2mm

        最小外形公差:±0.15mm

    (8)插座倒角:角度:30度、45度、60度

        深度:1-3mm

    (9)V割:角度:30度、35度、45度 深度:板厚2/3

        最小尺寸:100mm*150mm

    (10)通断测试:最大测试面积:400mm*500mm

        最大测试点:8000点

    2.产品类型:双面及多层印制线路板(PCB)

    3.最高测试电压:300V 最高层数:18层

    4.加工板厚度:0.6mm-3.2mm

    5.基材铜箔厚度:18μ(1/2OZ),35μ(1OZ),70μ(2OZ)

    6.常用基材:FR-4,CEM-3,CEM-1,聚四氯乙烯

    7.多层板:最大加工尺寸:双面板:450mm*600mm 400mm*600mm

    PCB 厂家生产工艺能力,交期,报价(二)

    ▶ PCB 生产价格:

    。单/双层板:特价板30元/款,数量 5PCS;FR-4,板厚 1.6MM,长宽在 2cm 以内,一般交期4~5天;

    。单/双层板:特价板50元/款,数量 10PCS;FR-4,板厚 0.8~1.6MM,长宽在 5cm 以内,一般交期3~5天;

    。单/双层板:100元/款,数量 5PCS;FR-4,板厚 0.8~1.6MM,长宽在 10cm 以内,一般交期3~4天;

    。单/双层板:特价板100元/款,数量 10PCS;FR-4,板厚 0.8~1.6MM,长宽在 10cm 以内,一般交期3~4天;

    。四层板:特价板400元/款,数量 5PCS;FR-4,板厚 1.6MM,长宽在 2cm 以内,全测试,一般交期6~8天左右;

    。四层板:特价板450元/款,数量 5PCS;FR-4,板厚 1.0~1.6MM,长宽在 5cm 以内,全测试,一般交期5~7天左右;

    。四层板:500元/款,数量 10PCS;FR-4,板厚 0.8~1.6MM,长宽在 10cm 以内,全测试,一般交期5~7天左右;

    。六层板:特价板1000元/款,数量 5PCS;FR-4,板厚 1.6MM,长宽在 2cm 以内,全测试,一般交期7~8天左右;

    。六层板:特价板1100元/款,数量 5PCS;FR-4,板厚 1.6MM,长宽在 5cm 以内,全测试,一般交期7~8天左右;

    。六层板:1200元/款,数量 10PCS;FR-4,板厚 1.2~1.6MM,长宽在 10cm 以内,全测试,一般交期7~8天左右;

    。八层板:1800元/款,数量 10PCS;FR-4,板厚 1.2~1.6MM,长宽在 10cm 以内,全测试,一般交期8~10天左右。

    以上报价工艺为:FR-4,绿油白字,线宽线距 0.15MM 以上,孔径 0.3mm 以上,有铅喷锡工艺,数量为10片内,(无阻抗要求及高 TG 材料等特殊要求,若有要求,可以不加客户编号等)。

    。防氧化工艺加收50元,镀金工艺加收50元,沉金工艺加收100元,绿油外油墨(白,黑,黄,红,蓝)加收30元。环保无铅工艺加收30元。

    。生产时间加急费:单双面:加急一天200元,加急二天100元,四层:72小时加急费400元,96小时加急费300元。

    。单双面样板全部 QA 目测检查,飞针测试另收费;多层板全部飞针测试(0.5平方内及20片内免费)。

    。超过以上尺寸和数量的报价:板费单双面5分一平方厘米,菲林费5分一平方厘米,工程费(单双面打样10片内120元(小批量150元),四层550元,六层1200元,八层1800元;),测试费按文件报价,单双面拼板费50元/款,四层板拼板费200元/款。

    。打样费计算:如尺寸 10cmX15cm/10片内:打样费=工程费费120元+板费75元/10片+菲林费45元(6张)=240元

    。批量面积达3平方米以上,不收工程费,3~5平米板费:单面板400元一平方米,双面板500元一平方米,四层板950元一平方米。

    。批量面积达5平方以上板费:单面板360元一平方,双面板470元一平方,四层板900元一平方。10平方以上双面板450元一平方。

    。六层板以上层数的板看文件工程审图后报价。

    。以上做板按一般生产工艺,即最小孔径 0.3MM 以上,最小线宽线距 0.15mm 以上;交期时间下单当天不算一天。

    ▶ 一般生产工艺:

    项目

    加工能力

    层数(最大)

    1-10

    板材类型

    FR-4

    最大尺寸

    560mm X610mm

    外形尺寸精度

    ± 0.1mm

    板厚范围

    0.40mm--3.0mm

    (0.2MM 板材需预订)

    板厚公差

    ( t ≥ 0.8mm) ± 10%

    介质厚度

    0.075mm--5.00mm

    最小线宽

    0.15MM (极限 0.1MM)

    最小间距

    0.15MM (极限 0.1MM)

    外层铜厚

    35um-70um

    内层铜厚

    17um--70um

    钻孔孔径

    0.3mm--6.35mm

    (极限 0.2MM)

    成孔孔径

    0.3mm--6.30mm

    孔径公差

    0.08mm

    孔位公差

    0.09mm

    板厚孔径比

    8:1

    阻焊类型

    感光油墨

    最小阻焊桥宽

    0.1mm

    最小阻焊隔离环

    0.1mm

    表面处理类型

    热风整平,喷锡,镀金,沉金,防氧化(OSP),金手指。

    PCB 厂家到底是怎样报价的(打样)?

    由于组成 PCB 价格的各种因素非常之多,很多电子厂家的熟手采购都很难搞的非常清楚,要是刚上手的采购更只能拿以前做板的报价来比较才心里有底了。在线路板厂刚入行的业务如果不了解 PCB 价格构成的因素也是很难报出一个很规范的价格来。

    这里主要是描述组成样板 PCB 价格的各种技术因素,其他影响 PCB 制板费用的因素都将不再一一说明,如选择制板线路板厂家的地域,制板电路板厂家的工艺专长,制板 pcb 厂商的角色和品质定位等等。我们讲解的前提条件是在一家比较固定的合作 PCB 供应商的样板 PCB 报价。

    一,首先影响样板 PCB 费用的是是否加急,因为打样都是要求时间比较紧张的,跟这项因素关联很大,一般的单双面样板如果要做24小时加急交货则可能会收取约200元的加急费。

    二,发票费用,有的电子厂财务手续非常正规,故每次发生的采购项目都需要提供发票,此项大家都非常明白,出票都是要收税的,故线路板厂家一般也会在价格上加上此发票税费。

    三,快递费用,一般合作久的公司且地域比较近的都会司机免费送货,而地域远且合作金额少的故都会采取快递方式,普通的快递一般都不收费,涉及到顺风快递的价格比较高就可能收取运费,具体运费价格见快递公司网站。

    四,飞针测试费用,一般样板数量少且资料简单的大都是不飞测或者飞测全部免费,涉及到资料非常复杂且数量较多的会非常占用电路板生产厂家的机时,故飞测则也会收费。

    五,表面处理的费用,由于线路板不同表面处理的成本差异非常大,如沉金的金是非常贵的,故沉金工艺的板一般要比普通喷锡工艺的电路板价格高上约100元。

    六,油墨费用,在 PCB 的制作中大部分的阻焊字符油墨都选用的是绿油白字和普通油墨,如果制板时有特殊需求而订单量又非常少时则厂家会浪费许多的油墨,故选用非绿油白字时或者指定某品牌油墨时价格可能会高上几十块。

    七,板费,此主要是 PCB 板的尺寸,尺寸越大的 PCB 板则耗用越多的 PCB 基材,而 PCB 基材是电路板生产中原材料开支最大的一块,故一般价格计算都是按尺寸乘上固定板费系数。

    八,其他的费用如固定的工程费和菲林费用,菲林费用的价格基数是不变的,但是电路板层数越多则耗用的菲林张数越多,故费用也将越高,工程费主要涉及到工程资料的处理和生产工具的制作,层数约多的板制作时间越长,则工程费收的也越高,但此费用一般是固定。

    以上都是描述的电路板打样的价格组成,而因为涉及的项目比较多,一般的人很难弄的很清楚并且也比较麻烦,另外由于样板大都涉及的金额也不高且一般都是批量生产前的打样,故很多合作的线路板厂商都采取按层数包干形式制作。如单面板打样一款多少钱,多层板打样一款又是多少钱,因为是等着样板确认好做后面的批量,故按款数算的样板报价都是非常优惠的。一般样板如果不多几乎都是亏本做的。而专门靠打样盈利的 PCB 厂家和专门只做方案设计的电子公司则喜欢采取上面按项目收费的方式合作。两种方式各有优劣,取决于合作的双方的需求。

    PCB 板高精密度化技术

    埋、盲、通孔结合技术也是提高印制电路高密度化的一个重要途径。一般埋、盲孔都是微小孔,除了提高板面上的布线数量以外,埋、盲孔都是采用“最近”内层间互连,大大减少通孔形成的数量,隔离盘设置也会大大减少,从而增加了板内有效布线和层间互连的数量,提高了互连高密度化。所以埋、盲、通孔结合的多层板比常规的全通孔板结构,在相同尺寸和层数下,其互连密度提高至少3倍,如果在相同的技术指标下,埋、盲、通孔相结合的印制板,其尺寸将大大缩小或者层数明显减少。

    因此在高密度的表面安装印制板中,埋、盲孔技术越来越多地得到了应用,不仅在大型计算机、通讯设备等中的表面安装印制板中采用,而且在民用、工业用的领域中也得到了广泛的应用,甚至在一些薄型板中也得到了应用,如各种 PCMCIA、Smard、IC 卡等的薄型六层以上的板。

    激光打孔常规的数控钻床和钻头来钻微小孔的确存在很多问题。曾阻碍着微小孔技术的进展,因而激光蚀孔受到重视、研究和应用。但是有一个致命的缺点,即形成喇叭孔,并随着板厚增加而严重化。加上高温烧蚀的污染(特别是多层板)、光源的寿命与维护、蚀孔的重复精度以及成本等问题,因而在印制板生产微小孔方面的推广应用受到了限制。但是激光蚀孔在薄型高密度的微孔板上仍得到了应用,特别是在 MCM—L 的高密度互连(HDI)技术,如 M.C.Ms 中的聚酯薄膜蚀孔和金属沉积(溅射技术)相结合的高密度互连中得到应用。在具有埋、盲孔结构的高密度互连多层板中的埋孔形成也能得到应用。但是由于数控钻床和微小钻头的开发和技术上的突破,迅速得到推广与应用。因而激光钻孔在表面安装印制板中的应用不能形成主导地位。但在某个领域中仍占有一席之地。

    数控钻床目前数控钻床的技术已取得了新的突破与进展。并形成了以钻微小孔为特点的新一代数控钻床。微孔钻床钻小孔(小于 0.50mm)的效率比常规的数控钻床高1倍,故障少,转速为 11-15r/min;可钻 0.1-0.2mm 微孔,采用含钴量较高的优质小钻头,可三块板(1.6mm/块)叠起进行钻孔。钻头断了能自动停机并报知位置,自动更换钻头和检查直径(刀具库可容几百支之多),能自动控制钻尖与盖板之恒定距离和钻孔深度,因而可钻盲孔,也不会钻坏台面。数控钻床台面采用气垫和磁浮式,移动更快、更轻、更精确,不会划伤台面。这样的钻床,目前很紧俏,如意大利 Prurite 的 Mega 4600,美国 ExcelIon 2000 系列,还有瑞士、德国等新一代产品。

    (1) 细密导线技术,今后的高细密线宽/间距将由 0.20mm-0.13mm-0.08mm-0.005mm,才能满足 SMT 和多芯片封装(Multichip Package,MCP)要求。因此要求采用如下技术。

      ①采用薄或超薄铜箔(<18um)基材和精细表面处理技术。

      ②采用较薄干膜和湿法贴膜工艺,薄而质量好的干膜可减少线宽失真和缺陷。湿法贴膜可填满小的气隙,增加界面附着力,提高导线完整性和精度。

      ③采用电沉积光致抗蚀膜(Electro—deposited Photoresist,ED)。其厚度可控制在5-30/um范围,可生产更完美的精细导线,对于狭小环宽、无环宽和全板电镀尤为适用,目前全球已有十多条 ED 生产线。

      ④采用平行光曝光技术。由于平行光曝光可克服“点”光源的各向斜射光线带来线宽变幅等的影响,因而可得线宽尺寸精确和边缘光洁的精细导线。但平行曝光设备昂贵,投资高,并要求在高洁净度的环境下工作。

      ⑤采用自动光学检测技术(Automatic Optic Inspection,AOI)。此技术已成为精细导线生产中检测的必备手段,正得到迅速推广应用和发展。如 AT&T 公司有11台AoI,}tadco 公司有21台 AoI 专门用来检测内层的图形。

    有关 PCB 板高精密度化是指采用细密线宽/间距、微小孔、狭窄环宽(或无环宽)和埋、盲孔等技术达到高密度化。而高精度是指“细、小、窄、薄”的结果必然带来精度高的要求,以线宽为例:0.20mm 线宽,按规定生产出0.16-0.24mm 为合格,其误差为(0.20土0.04)mm;而 0.10mm 的线宽,同理其误差为(0.10±0.02)mm,显然后者精度提高1倍,依此类推是不难理解的,因此高精度要求不再单独论述。但却是生产技术中一个突出的难题。

    (2) 微孔技术表面安装用的印制板的功能孔主要是起电气互连作用,因而使微孔技术的应用更为重要。采用常规的钻头材料和数控钻床来生产微小孔的故障多、成本高。所以印制板高密度化大多是在导线和焊盘细密化上下功夫,虽然取得了很大成绩,但其潜力是有限的,要进一步提高细密化(如小于 0.08mm 的导线),成本急升,因而转向用微孔来提高细密化。

    近几年来数控钻床和微小钻头技术取得了突破性的进展,因而微小孔技术有了迅速的发展。这是当前印制板生产中主要突出的特点。今后微小孔形成技术主要还是靠先进的数控钻床和优良的微小头,而激光技术形成的小孔,从成本和孔的质量等观点看仍逊色于数控钻床所形成的小孔。

    -----------工欲善其事,必先利其器-----------

    -----------上传传说中的抄板利器-----------

    -----------请移步到原帖下载工具-----------

    -----------以上二个是反原理图的软件-----------

    -----------下面的软件才是正主·见原帖-----------

    ----------PROTEL 99SE·完整版 302M----------

    * 本文为 21Dianyuan 社区原创文章,未经授权禁止转载。请尊重知识产权,违者本司保留追究责任的权利。

    往期推荐

    初学者收藏版 | 详解 PCB 反向工程实战过程连载(一) | 内含图文+附件+视频

    ?更多精彩内容,请期待后续文章呦~

    87291a801c158bcc216439b9a79d2511.gifdba845ab713c7878b9c7ee768b2c6ece.gif377639e936d39d7b8cb5fd79bbf3ccae.gif

    展开全文
  • PowerDesigner配置Oracle数据库反向工程 作者:邓家海 贴吧:软件频道吧 1.前言: PowerDesigner是Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与IT结合起来,可帮助部署有效的企业体系架构,并为...

    PowerDesigner配置Oracle数据库反向工程

                      作者:邓家海

                           贴吧:软件频道吧

    1. 前言:

    PowerDesigner是Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与IT结合起来,可帮助部署有效的企业体系架构,并为研发生命周期管理提供强大的分析与设计技术。PowerDesigner独具匠心地将多种标准数据建模技术(UML、业务流程建模以及市场领先的数据建模)集成一体,并与 .NET、WorkSpace、PowerBuilder、Java™、Eclipse 等主流开发平台集成起来,从而为传统的软件开发周期管理提供业务分析和规范的数据库设计解决方案。此外,它支持60多种关系数据库管理系统(RDBMS)/版本。PowerDesigner运行在Microsoft Windows平台

    2. 建立Oracle反向工程

    1) 打开PowerDesigner

     

     

    2) 点击file->Reverse Engineer->Database

     

    3) 点击下一步

     

     

     

    4) 有数据源:如果已经有数据源,则选择数据源,按照步骤,最后执行步骤5测试一下连接,如果成功,则反回上一界面,如果失败就会报错。如果没有,跳过

     

     

    5) 无数据源:如果没有数据源,则走下面步骤,最后重走有数据源的步骤(就是上一步):

     

    6) 添加数据源:

     

     

    7) 新建数据源:

     

    8) 下一步:

     

     

    9) 下一步:

     

     

    10) 点击完成

     

     

     

    11) 回到步骤4

     

     

    12) 确定:

     

     

    13) 点击OK

     

     

     

    14) 等待读取数据,反向工程就完成了。

                                       原创资料,版权所有,如有引用,请加上下面声明

                                                                作者:邓家海

                                                                贴吧:软件频道吧

                                                                  

         

    转载于:https://www.cnblogs.com/dengjiahai/p/4484901.html

    展开全文
  • 第一:概念 1.hibernate:是对jdbc的轻量级封装(轻量级的意思是不用加载大量的资源)。hibernate跟struts一样是开源的框架,我们可以直接加入jar包2.hibernate按照mvc来说是模型层...4.由表到类是反向工程。5.由类生...

    第一:概念

    1.hibernate:是对jdbc的轻量级封装(轻量级的意思是不用加载大量的资源)。hibernate跟struts一样是开源的框架,我们可以直接加入jar包
    2.hibernate按照mvc来说是模型层,按照框架来分是数据访问层。数据访问层的技术包括jdbc、hib、ibatise(爱被ts)
    3.利用框架这个半成品我们可以根据数据表直接生成类。
    4.由表到类是反向工程。
    5.由类生成表是正向工程:先写好类和对象关系映射
    6.hibernate完成对数据库的crud操作,也就是说hibernate帮我们完成了对象关系映射的部分和对sql的封装(把sql封装成hql语句)。
    7.hibernate3.3,第一个方块是注解,第二个是核心包,第三个不选。最下面的两个是说把jar包放在哪个位置。下一步新建,下一步jdbc连接数据库。新建
    8.方言是指各个数据库底层的sql语句的差异性。
    9.hibernate的配置文件同样在src下,因为也要随着类的加载而加载。
    10.session:session是个接口,里面是静态方法。
    11.oracle(thin),wugui(这个是配置数据库的连接字符串),chu1,1234,,加入jar,测试时候输入密码。
    12.hibernate文件有三个,配置,视图,代码,在配置中找到我要连接的那个字符串,也就是wugui,这时候在hibernate配置文件中就会出现这几个连接数据库的内容
    13pojo:是简单的java对象。做数据的封装。
    14.对象关系映射中在hibernate核心包中能够找到他的dtd规则。
    15.hibernate配置文件中的hbm2ddl:ddl是定义数据(创建、删除、修改)表,里面写的是create是创建,表明每次都重新创建这个表。如果是update表示有表就增加,没有就创建,只是主键加1.
    mapping中写一个属性resource资源里写一个类,表明去解析这个表(意思是根据这个表创建类)。
    16.加载hib主配置文件。configuration(肯非哥)类(在hibernatesessionfactory中能够找到)的作用是获得加载配置文件的对象,然后用这个对象加载主配置文件。
     获得session工厂就相当于获得了数据源(连接数据库的四个参数),下面我们就可以获得session对象连接数据库了。session就是获得连接
    17.hibernate主配置文件中的配置其实给hibernate框架中的属性赋值。看sf这个对象
    18:正向过程步骤:1、加jar包、2用myeclipse连接数据库、3写映射文件、4在hibernate写三个语句和对象关系映射文件

    19.查询可以不用事务,因为查询对数据库没有影响。
    20.get是单条查找,load也是单条查找
    21.hibernate_seqence.nextval
    22.查询query,criteria
    23.分页:setmaxResult:每页有几个,setfirstResult:起始页。默认数据库中的数据的下标是从0开始的
    scheam:是当前用户。关注jqueryui。。。注意springmvc跟struts是相同的。ibatise跟hibernate是相同的
    --------------
    Criteria  c =session.createCriteria(News.class);是查询全部的一种方法,
    c.setMaxResults(3);和c.setFirstResult(1);是分页要用的
    ------------
    Hibernate是对JDBC的轻量级对象封装, Hibernate本身是不具备事务处理功能的,Hibernate事务实际上是底层的JDBC事务的封装,或者是JTA事务的封装Hibernate的JDBCTransaction根本就是conn.commit而已,根本毫无神秘可言,
    只不过在Hibernate中, Session打开的时候,就会自动conn.setAutoCommit(false),不像一般的JDBC,默认都是true,所以你最后不写 commit也没有关系,
    由于Hibernate已经把AutoCommit给关掉了,所以用Hibernate的时候,你在程序中不写Transaction的话,数据库根本就没有反应。

     

    ----------------------------------------------------------------------

    <property name="hibernate.hbm2ddl.auto">     </property>

    这个属性标签中有四个参数可以写,这四个参数是对数据库中插入的进行不同的操作,分别为:

    (1)create-drop

    (2)create

    (3)update

    (4)validate

    下面分别来介绍他们的作用以及对数据库中的影响

    (1)<property name="hibernate.hbm2ddl.auto"> create-drop </property>

    create-drop:表示在hebarinate初始化时创建表格,程序运行结束的时候会删除相应的表格,在实际项目中不用

    (2)<property name="hibernate.hbm2ddl.auto">create</property>

    在hibernate初始化时会创建表格,在运行结束之后不删除表格,而是在下一次运行的时候如果有旧的删掉,没有旧的,重新建表格

    (3)<property name="hibernate.hbm2ddl.auto">update</property>

    只是根据映射文件去和数据库中的表对应起来,如果不一致,就更新表的结构

    (4)<property name="hibernate.hbm2ddl.auto">validate</property>

    校验映射文件和数据库中的表是不是能对应起来,不能对应报错,实际中常用

    注:在使用的时候必须要慎重,我就是在当时学习的时候所设置的属性是validate,所以只要改了数据库名就会抛初始化异常,当时我郁闷了半天都不知道是怎么回事,没有往这方面想,后来才知到balidate是在没有数据库名的时候不让你创建,会抛异常的。

     

    第二:带注释的说明

    1.实体类

    package com.pojo;

    public class TestTable {
     private int tid;
     private String tname;
     
     public int getTid() {
      return tid;
     }
     public void setTid(int tid) {
      this.tid = tid;
     }
     public String getTname() {
      return tname;
     }
     public void setTname(String tname) {
      this.tname = tname;
     }

     
     

    }

    2.映射文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
        <!--
             注意:上面的dtd文件是从jar包中的hibernate3.org.hiberante中的hibernate-mapping-3.0.dtd找到的。其中mapping是映射的意思,他是是帮助我们写映射文件的。
                    
     注意:当我们的主键生成策略是<generator class="native"></generator>的时候,就会产生下面的sql语句。native是本地的意思,表示根据本地数据表的格式来自动增长,例如oracle,mysql等
     其中hibernate_sequence.nextval 表示序列的意思。由于是oracle数据库,因此产生了这个序列的sql语句,也就是说在我们写增加的时候,hibernate找到我们当前使用的oracle数据库的自动增长方式
     给我们新添加的这条数据一个新的序列号。
     select
            hibernate_sequence.nextval
        from
            dual -->
    <hibernate-mapping package="com.pojo">
         <class name="TestTable" table="chu_testtable" >
            <id name="tid" column="tid" type="int">
               <generator class="native"></generator>
            </id>
            <property name="tname" column="tname" type="java.lang.String"> </property>
         </class>
     
    </hibernate-mapping>

     

     

    3.hibernate主配置文件

    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
              "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

    <!-- Generated by MyEclipse Hibernate Tools.                   -->
    <hibernate-configuration>
    <!-- 注意: <property name="hbm2ddl.auto">update</property>表示的意思是根据映射文件去和数据库中的表对应起来,如果不一致,就更新表的结构 ,也就是增加
    <property name="hibernate.hbm2ddl.auto">create-drop</property>表示在hebarinate初始化时创建表格,程序运行结束的时候会删除相应的表格,在实际项目中不用
    <property name="hbm2ddl.auto">create</property>表示在hibernate初始化时会创建表格,在运行结束之后不删除表格,而是在下一次运行的时候如果有旧的删掉,没有旧的,重新建表格
    <property name="hibernate.hbm2ddl.auto">validate</property>表示校验映射文件和数据库中的表是不是能对应起来,不能对应报错,实际中常用
    其中hbm2ddl中的hbm指的是映射文件,2是to的意思,ddl是数据定义语言(增删改),其中update是改,create-drop是增、删,create是增。
    -->

    <!--
    注意:上面规定的dtd文件是来源于的hibernate3这个jar包中的org.hibernate-configuration-3.0.dtd,
    其中configuration是配置的意思,也就表明这个dtd文件是针对hibernate主配置文件而规定的。
    1.<property name="myeclipse.connection.profile">chu</property>是表明这个是配置数据库的连接字符串,其实
    就是表明在myeclipse中的数据库中连接的是chu这个名字的,(除了这个名字,我还有一个名字mysql的)
    2.<mapping resource="com/pojo/TestTable.hbm.xml"/>表明解析这个映射文件.
    注释:<property name="hbm2ddl.auto">create</property>表明每次都会重新创建表,也就是会导致以前的数据没有了。因此当我们正向生成之后就把这句话去掉,或者改成update
    <property name="hbm2ddl.auto">update</property>是每次更新表,可以留着
     -->


    <session-factory>
     <property name="myeclipse.connection.profile">chu</property>
     <property name="connection.url">
      jdbc:oracle:thin:@localhost:1521:ORCL
     </property>
     <property name="connection.username">chu1</property>
     <property name="connection.password">1234</property>
     <property name="connection.driver_class">
      oracle.jdbc.OracleDriver
     </property>
     <property name="dialect">
      org.hibernate.dialect.Oracle9Dialect
     </property>
         <property name="hbm2ddl.auto">update</property>
      <property name="show_sql">true</property>
      <property name="format_sql">true</property>
    <mapping resource="com/pojo/TestTable.hbm.xml"/>
    </session-factory>

    </hibernate-configuration>

     

     

    4.公共的hibernate工厂类

    package com;

    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.cfg.Configuration;

    /**
     * Configures and provides access to Hibernate sessions, tied to the
     * current thread of execution.  Follows the Thread Local Session
     * pattern, see {@link http://hibernate.org/42.html }.
     */
    public class HibernateSessionFactory {

        /**
         * Location of hibernate.cfg.xml file.
         * Location should be on the classpath as Hibernate uses 
         * #resourceAsStream style lookup for its configuration file.
         * The default classpath location of the hibernate config file is
         * in the default package. Use #setConfigFile() to update
         * the location of the configuration file for the current session.  
         */
        private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
     private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
        private  static Configuration configuration = new Configuration();   
        private static org.hibernate.SessionFactory sessionFactory;
        private static String configFile = CONFIG_FILE_LOCATION;

     static {
         try {
       configuration.configure(configFile);
       sessionFactory = configuration.buildSessionFactory();
      } catch (Exception e) {
       System.err
         .println("%%%% Error Creating SessionFactory %%%%");
       e.printStackTrace();
      }
        }
        private HibernateSessionFactory() {
        }
     
     /**
         * Returns the ThreadLocal Session instance.  Lazy initialize
         * the <code>SessionFactory</code> if needed.
         *
         *  @return Session
         *  @throws HibernateException
         */
        public static Session getSession() throws HibernateException {
            Session session = (Session) threadLocal.get();

      if (session == null || !session.isOpen()) {
       if (sessionFactory == null) {
        rebuildSessionFactory();
       }
       session = (sessionFactory != null) ? sessionFactory.openSession()
         : null;
       threadLocal.set(session);
      }

            return session;
        }

     /**
         *  Rebuild hibernate session factory
         *
         */
     public static void rebuildSessionFactory() {
      try {
       configuration.configure(configFile);
       sessionFactory = configuration.buildSessionFactory();
      } catch (Exception e) {
       System.err
         .println("%%%% Error Creating SessionFactory %%%%");
       e.printStackTrace();
      }
     }

     /**
         *  Close the single hibernate session instance.
         *
         *  @throws HibernateException
         */
        public static void closeSession() throws HibernateException {
            Session session = (Session) threadLocal.get();
            threadLocal.set(null);

            if (session != null) {
                session.close();
            }
        }

     /**
         *  return session factory
         *
         */
     public static org.hibernate.SessionFactory getSessionFactory() {
      return sessionFactory;
     }

     /**
         *  return session factory
         *
         * session factory will be rebuilded in the next call
         */
     public static void setConfigFile(String configFile) {
      HibernateSessionFactory.configFile = configFile;
      sessionFactory = null;
     }

     /**
         *  return hibernate configuration
         *
         */
     public static Configuration getConfiguration() {
      return configuration;
     }

    }

     

     

    5.真正的dao层调用

    package com.dao;

    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;

    import com.pojo.TestTable;

    public class TestDao {
     public static void main(String[] args) {
      // 加载hibernate的配置文件
      //1 创建Configuration对象,在HibernateSessionFactory这个里面可以看到,我们要获得Configuration对象之后才能加载主配置文件
      Configuration cfg = new Configuration();
      //2 加载配置文件
      cfg.configure("/hibernate.cfg.xml");
      //3 获得SessionFactory对象。通过hibernate.cfg.xml文件我们可以看到,主配置文件里面跟标签就是<session-factory>标签,因此加载了主配置文件后就能获得session工厂了。
      SessionFactory sf  =cfg.buildSessionFactory();
      System.out.println("sf="+sf);//输出:org.hibernate.impl.SessionFactoryImpl

      //4通过session工厂 获得session对象  ----相当于jdbc中的Connection对象。
      Session session =sf.openSession();
      //5 开启事务---由于对数据库有影响,因此要开启事务
      Transaction  tr = session.beginTransaction();
      //6 进行crud操作,执行增删改查,这里我们是增加的方法,传入一个实体类对象之后,数据库就能增加一条记录,为什么?
       //答:由于有映射文件。主配置文件在src目录下,当项目部署到tomact服务器的时候就会把主配置文件加载了,而我们的映射文件在主配置文件中已经配置了,
      //此时也就是说在上面的第三步的时候已经把映射文件加载好了,映射文件里写的是实体类和数据表的关系,因此在我们执行save方法的时候就能把这个参数(对象)转化成数据表的列(字段)
      TestTable tt=new TestTable();
      tt.setTid(1);
      tt.setTname("张三");
      session.save(tt);
      //7 事务处理,提交事务,当我们提交事务的时候hibernate框架会向oracle数据库发送一条insert语句。
      tr.commit();
      
      //8 关闭session,为了防止资源的浪费。
      session.close();

     }
    }

     

    展开全文
  • 点下方蓝色字体可见重点培训内容!!北京特惠!1月22日-3000元含两人!申报受理最新要求及合规的资料撰写实战1月22日南京-2020年度行政检查缺陷及整改要点...2021药品技术转移、工艺验证和清洁验证最新要求与合规操...
  • 它是通过对芯片内部电路的提取与分析、整理,实现对芯片技术原理、设计思路、工艺制造、结构机制等方面的深入洞悉,可用来验证设计框架或者分析信息流在技术上的问题,也可以助力新的芯片设计或者产品设计方案。...
  • CV 在前,NLP 在后,迁移学习技术的应用为这两个领域所带来的进展和突破,不可谓不瞩目。其中,预训练模型作为当下迁移学习的一种主流方法,让“从零开始训练一个新模型”的时代一去不复返。这类在大型数据集上训练...
  • Java技术栈www.javastack.cn关注阅读更多优质文章1. 拷贝 Mybatis 反向工程配置文件到项目的根目录下2. 根据项目及表的情况,修改 GeneratorMappe...
  • 本文是21Dianyuan 社区原创技术文章,作者 zhaohua2764,感谢作者的辛苦付出。(注:由于本帖文字篇幅超长,会分成约1-10篇文章推送,仅为部分内容,本帖图片、附件、视频较多,完整版请跳转到原帖中学习,在此,特别...
  • 我曾遇到过一些拥有十分美观的 UML 图的项目 ...或者需要将宝贵的时间浪费在将源代码手动 反向工程到模型中。这两种情况都不尽如人意。如果模型无法如实地展示签入到版本控制库中的代码,那么这个 UML 图构造的再...
  • PyREBox是Python脚本化的反向工程沙箱。 它基于QEMU,其目标是通过提供不同角度的动态分析和调试功能来帮助进行逆向工程。 通过在python中创建简单的脚本来自动执行任何类型的分析,PyREBox可以检查正在运行的QEMU ...
  • 程序员的成长之路互联网/程序员/技术/资料共享关注阅读本文大概需要 5 分钟。来自:https://blog.csdn.net/m0_37922192/article/details/1...
  • 数据恢复是数字取证研究... 实验表明,该软件可以成功解密SSD闪存驱动器中的数据,而不管SSD控制器中加密器的内部结构如何,并且可以生成未加密的物理映像,在该映像上大多数现有的数据恢复技术都可以有效地发挥作用。
  • 这两天使用hibernate生成POJO遇到了很多麻烦,纠结的一比,一度想砸了电脑,有时候编程对于技术小白真的是很刁难,越是小白,遇到的问题越多,本人最讨厌各种插件,各种版本的配置了(T T~): 截图较多,很多都是...
  • 自己定义哪个字段生成何种类型的控件等等),原作者不再升级,所以他将源码公布于网上,本人就将其源码升级,新增了很多新功能,最新最牛气的代码生成器,带视频演示,只需设计好数据库,新增数据库反向工程,支持多...
  •  介绍 Themida是一个强劲的保护系统, 专为了那些想保护自己的程式不被先进的反向工程和黑客软件破解的软件开发者而开发的。开发者不需要更改任何的原代码,和不需要程式编制的经验使用WinLicense。 Themida使用...
  • 摘要 .NET 体系结构的一个优势是:利用它构建的程序集包含...此处作者提供的程序模糊处理作为一种阻止反向工程的方法。此外,他们还讨论了可用的不同类型的模糊处理技术,并说明了包含在 Visual Studio .NET 2003 中的
  • 芯片失效分析属于芯片反向工程开发范畴。芯片失效分析主要提供封装去除、层次去除、芯片染色、芯片拍照、大图彩印、电路修改等技术服务项目。有集成电路失效分析实验室,配备了国外先进的等离子蚀刻机(RIE)、光学...
  • 基于反向复用技术的100G光传输系统借鉴于《基于方向复用技术的100G光传输的设计与实现》作者:欧阳长冬,刘其超,史朝翔,常建新,高猛(重庆邮电大学通信与信息工程学院,重庆400065;新普矽谷(北京)科技有限公司...
  • 一次mac上的反向工程实录

    千次阅读 2008-04-24 15:51:00
    连续参加了四天的Debugging培训,知道了不少Visual Studio Debugger和WindDBG的窍门,新鲜内容不多,...事先声明,本次crack纯属技术演练,无其他用意。涉及到该程序的内容,会尽量用xxx表示。首先启动程序,程序停留
  • 基于传统石门揭煤技术及目前石门揭煤中存在的技术难题基础上,深入探讨由煤层揭露岩层的石门反向揭煤技术原理及技术路线,结合现场淮南矿业集团潘一矿11-2煤层西翼轨道石门反向揭煤研究及应用,较传统石门揭煤技术大大...
  • 反向工程.exe和DLL文件以检测可执行文件是否可能被篡改或用于有害目的的Web应用程序 会员 技术栈/依赖关系 Django的 设置 的Python 3.9.1 的Django 3.1.6 仓库中的叉子代码 在终端:pip install django 导航到...
  • 有关更多技术细节,下载和文档,请访问: 在线界面: 什么是源代码混淆? 混淆是将AutoIt源代码转换成自身受保护版本的过程。 脚本功能保持不变,所有功能均相同,但源代码受到保护,无法进行分析,所有变量均已...
  • 系统介绍4种反向凿井施工方法、工艺过程、特点及施工装备。结合我国在煤矿、非煤矿山、水利水电、交通等地下工程建设中采用的反井施工法,通过分析不同深度、不同倾角井筒以及井筒所处围岩水文地质条件、下水平巷道...
  • 摘要 .NET 体系结构的一个优势是:利用它构建的...此处作者提供的程序模糊处理作为一种阻止反向工程的方法。此外,他们还讨论了可用的不同类型的模糊处理技术,并说明了包含在 Visual Studio .NET 2003 中的新的模糊处
  • 这段时间事情比较多一直没有写博客,现在事情忙完了,公司的书柜里有一堆关于Hibernate、Struts和Spring的书,翻了翻发现书中的内容基本上都过时,我喜欢从官方网站上看资料学习最新的技术,这次是我阅读了Hibernate...
  • Themida是先进的微软视窗软件保护系统,专为了那WinLicense 结合了 Themida 保护功能以及高级注册管制。它提供了最强和具伸缩性的技术,使开发者可以安全地分发他们软件的试用版和完全版。 ...
  • 整个体系内容包括200+课时,20个项目实战,完美覆盖当下热门技术与经典框架实战。学习路线主要包括三大阶段:1.掌握Python在自然语言处理领域必备工具包使用方法 2.机器学习与深度学习在NLP领域常用算法原理与...
  • 这些电路可以说是五花八门,是我们学习模拟电子技术的一个重要内容,更是一个电子工程师必须掌握的电路之一。运放电路有多种类型,是不是我们把它们牢牢记住就行了呢??显然不是啦!作为知识的搬运工,我很不建议...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 592
精华内容 236
关键字:

反向工程技术