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事例代码如下:

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

  //Order.hbm.xml代码如下:
 1 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.djdj.entity.Order" table="tb_order"> //name为实体类 ,table 为在数据库建的表名称
<id name="id">
<generator class="native"></generator>
</id>
<property name="orderNo"></property> <set name="item">
<key column="orderNo"></key> //其中key中column的值要跟many-to-one中column的值相等
<one-to-many class="com.djdj.entity.OrderItem"></one-to-many> //one-to-many 代表一对多的关系 many-to-one 多对一 many-to-many 代表多对多的关系
15
</set>
</class>
</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

Java学习笔记01的更多相关文章

  1. Java学习笔记:01面向对象-继承

    01面向对象-继承 一.java中的数据类型 1.基本数据类型:四类 八种 byte(1) boolean(1) short(2) char(2) int(4) float(4) long(8) do ...

  2. Java学习笔记 01 基本数据类型、标识符、关键字和运算符

    一.基本数据类型 基本数据类型 数据类型 内存空间(8位等于1字节) 取值范围 备注 byte 8位 -128~127   short 16位 -32768~32767   int 32位 -2147 ...

  3. 【8-19】java学习笔记01

    JDK API文档 java SE 8 API文档:http://www.oracle.com/technetwork/java/javase/documentation/jdk8-doc-downl ...

  4. java学习笔记-01.对象入门

    1.面向对象编程简称是OOP. 2.继承是通过 extends关键字实现的,接口是通过implements关键字实现的. 3.public:意味着后续的定义任何人均可使用. private:意味着除了 ...

  5. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  6. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  7. java学习笔记9--内部类总结

    java学习笔记系列: java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对 ...

  8. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  9. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

随机推荐

  1. mongodb修改用户名密码

    首先先将启动mongo的配置文件里面的 auth:用户认证,改为false. 正确做法,利用db.changeUserPassword db.changeUserPassword('tank2','t ...

  2. linux换行PHP_EOL

    $file = 'log.txt';file_put_contents($file,$param.PHP_EOL,FILE_APPEND);

  3. Greeplum 系列(四) 实战

    Greeplum 系列(四) 实战 表结构 (1) 拉链表结构 create table public.member_fatdt0 ( member_id varchar(64), phoneno v ...

  4. NPOI读写Excel sheet操作

    QueryInfo dataInfo = new QueryInfo(); dataInfo.CustomSQL = $@" select t1.name name,t1.url url f ...

  5. SSL技术白皮书

    首页产品技术操作系统ComwareV5安全和VPN SSL技术白皮书 下载 收藏 打印 推荐 摘自:http://www.h3c.com/cn/d_200812/622834_30003_0.htm# ...

  6. C#序列化效率对比

    原文出处:https://www.cnblogs.com/landeanfen/p/4627383.html 从使用序列化到现在,用到的无非下面几种方式:(1)JavaScriptSerializer ...

  7. centos7如何知道jdk的在哪个目录

    今天一个小实验需要安装jdk,用命令Java -version查询了一下,原来Centos7自带OpenJDK的环境,但是需要手动配置/etc/profile文件,于是开始找java的安装路径.... ...

  8. yii2 gridview 新增按钮 动态显示按钮

    新增一个按钮 [ 'class' => 'yii\grid\ActionColumn', 'header' => '操作', 'options' => ['width' => ...

  9. 编写高质量代码改善C#程序的157个建议——建议78:应避免线程数量过多

    建议78:应避免线程数量过多 在多数情况下,创建过多的线程意味着应用程序的架构设计可能存在着缺陷.经常有人会问,一个应用程序中到底含有多少线程才是合理的.现在我们找一台PC机,打开Windows的任务 ...

  10. Android--iOS抓取崩溃日志

    android闪退获取日志方法: 1.下载adb工具包 2.注意事项 请确保电脑上只连接了一台手机设备(最好只连接一条USB线),同时确保手机已开启USB调试模式(可通过手机助手查看连接状态) 3.A ...