• Java学习笔记01


    1.原型设计:

    将页面的模块、元素、人机交互的形式,利用线框描述的方法,将产品脱离皮肤状态下更加具体跟生动的进行表达.

    2.下面的是使用PowerDesigner进行设计的持久层的层次结构图:

    虚线三角表示的是“实现接口” 实线三角表示的“继承

    其中,下图使用了依赖倒置的原则:高层模块不应该依赖与底层

    其中AbstractBaseDao抽象类是为了有选择性的实现特定功能,采用了设计模式中的模版模式。

    上图采用的是门面模式。

    3. Hibernate(ORM,即Object-Relational Mapping)对象关系映射:

    作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。

    从上图中,我们可以看出Hibernate六大核心接口,两个主要配置文件,以及他们直接的关系。Hibernate的所有内容都在这了。那我们从上到下简单的认识一下,每个接口进行一句话总结。

    1、Configuration接口:负责配置并启动Hibernate

    2、SessionFactory接口:负责初始化Hibernate

    3、Session接口:负责持久化对象的CRUD操作

    4、Transaction接口:负责事务

    5、Query接口和Criteria接口:负责执行各种数据库查询

    注意:Configuration实例是一个启动期间的对象,一旦SessionFactory创建完成它就被丢弃了。

    其中:hibernate.cfg.xml事例代码如下:

     1 <!DOCTYPE hibernate-configuration PUBLIC
     2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     3     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
     4 
     5 <hibernate-configuration>
     6     <session-factory>
     7         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
     8         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
     9         <property name="hibernate.connection.url">jdbc:mysql://localhost/XXX</property>  //XXX为本地数据库名称
    10         <property name="hibernate.connection.username">root</property>    //连接数据库账号
    11         <property name="hibernate.connection.password">root</property>   //连接数据密码
    12         <property name="hibernate.show_sql">true</property>
    13         <property name="hibernate.hbm2ddl.auto">update</property>
    14         <mapping resource="com/djdj/entity/Order.hbm.xml"/>    //mapping 为实体代码到数据库的映射
    15     </session-factory>
    16 </hibernate-configuration>


     
      //Order.hbm.xml代码如下:

    1
    <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping> 6 <class name="com.djdj.entity.Order" table="tb_order"> //name为实体类 ,table 为在数据库建的表名称 7 <id name="id"> 8 <generator class="native"></generator> 9 </id> 10 <property name="orderNo"></property> 11 12 <set name="item"> 13 <key column="orderNo"></key> //其中key中column的值要跟many-to-one中column的值相等 14 <one-to-many class="com.djdj.entity.OrderItem"></one-to-many> //one-to-many 代表一对多的关系 many-to-one 多对一 many-to-many 代表多对多的关系 15 16 </set> 17 </class> 18 </hibernate-mapping>

    实体类Order的代码如下:

    package com.djdj.entity;
    
    import java.io.Serializable;
    import java.util.Set;
    
    
    
    public class Order implements Serializable{
               private int id;
               private int orderNo;
               private Set<OrderItem> item;
                
            public int getId() {
                return id;
            }
            public void setId(int id) {
                this.id = id;
            }
            public int getOrderNo() {
                return orderNo;
            }
            public void setOrderNo(int orderNo) {
                this.orderNo = orderNo;
            }
            public Set<OrderItem> getItem() {
                return item;
            }
            public void setItem(Set<OrderItem> item) {
                this.item = item;
            }
               
    }

    Hibernate调用配置文件创建数据库表的代码如下:

    public class CreateTable {
         public static void main(String[] args) {
            //读配置
             Configuration cfg =  new Configuration().configure();
             SchemaExport export = new SchemaExport(cfg);
             export.create(true, true);
        }
    }

    测试代码如下:

    public class Test {
    
        public static void main(String[] args) {
             //读取配置
             Configuration cfg =  new Configuration().configure();
             //获取SessionFactory
             SessionFactory factory =cfg.buildSessionFactory();
             //获取session
             Session session=null;
             
             try{
                 session =factory.openSession();
                 //开启事务
                 session.beginTransaction();
                 

    // //中间进行数据操作代码的编写
    //
    session.getTransaction().commit(); }catch (Exception e) { e.printStackTrace(); }finally{ session.close(); //离线不更改 //u.setName("1"); } } }

    以User为例,实现增删查改的代码如下:

                 //设置user
    //             User user = new User();
    //             user.setName("st2");
    //             user.setPwd("1112");
                 //save 之前是瞬时对象 ,之后为持久化对象:和数据库数据相关
    //             session.save(user);
                 
                 //查询对象
    //             User u=(User)session.get(User.class, 2);
                 //load获取代理对象,效率高,只有真正在使用过程中获取真实对象,get直接获取真实对象。
    //             User u=(User)session.load(User.class, 2);
    //             System.out.println(u.getName());
                 
                 //删除对象        
    //             User u=(User)session.get(User.class, 2);
    //             System.out.println(u.getName());
                // session.delete(u);
                 
                 //修改对象
                 User u=(User)session.get(User.class, 2);
                 System.out.println(u.getName());
                 u.setName("sys");
                 session.update(u);

    级联操作:

    Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似的操作,常用的cascade:

             none,all,save-update,delete, lock,refresh,evict,replicate,persist,

             merge,delete-orphan(one-to-many)。一般对many-to-one,many-to-many不设置级联,在<one-to-one>和<one-to-many>中设置级联。

                                                                                                                                                                                                                                                                                       sagacity_shen

                                                                                                                                                                                                                                                                               初定于  2017-09-20 00:58:34

    sagacity_shen 战战兢兢,如履薄冰。
  • 相关阅读:
    Linux问题分析或解决_samba无法连接
    Android系统编译环境及连接工具配置
    Linux问题分析或解决_ssh无法连接
    新能力| 云开发静态网站托管能力正式上线
    如何在云开发静态托管中使用Hugo
    如何在云开发静态托管绑定静态域名
    3步搞定图像盲水印?试试云开发扩展能力
    不再忍受龟速 Github,你也可以试试在云开发上部署个人博客!
    云开发 For Web:一站式开发下一代 Serverless Web 应用
    下笔如有神的程序员来教你写作啦!
  • 原文地址:https://www.cnblogs.com/sagacity-shen/p/7555157.html
Copyright © 2020-2023  润新知