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事例代码如下:
- <!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的更多相关文章
- Java学习笔记:01面向对象-继承
01面向对象-继承 一.java中的数据类型 1.基本数据类型:四类 八种 byte(1) boolean(1) short(2) char(2) int(4) float(4) long(8) do ...
- Java学习笔记 01 基本数据类型、标识符、关键字和运算符
一.基本数据类型 基本数据类型 数据类型 内存空间(8位等于1字节) 取值范围 备注 byte 8位 -128~127 short 16位 -32768~32767 int 32位 -2147 ...
- 【8-19】java学习笔记01
JDK API文档 java SE 8 API文档:http://www.oracle.com/technetwork/java/javase/documentation/jdk8-doc-downl ...
- java学习笔记-01.对象入门
1.面向对象编程简称是OOP. 2.继承是通过 extends关键字实现的,接口是通过implements关键字实现的. 3.public:意味着后续的定义任何人均可使用. private:意味着除了 ...
- 0032 Java学习笔记-类加载机制-初步
JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- java学习笔记9--内部类总结
java学习笔记系列: java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对 ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
随机推荐
- 如何让springmvc在启动的时候执行特定的业务处理
如何让springmvc在启动的时候执行特定的业务处理 java 的 web服务器启动时,经常会做一些特定的业务逻辑处理,比如数据库初始化, 初始化系统参数,读取配置文库等. 很多web服务的中间件, ...
- [C#] IEnumerable vs IQueryable
这篇博客将介绍IEnumerable和IQueryable之间的区别. 1. IQueryable是继承自IEnumerable接口的.所以IEnumerable能做的,IQueryable都能做. ...
- mac安装mysql及终端操作mysql与pycharm的数据库可视化
一.Mac安装mysql 首先下载mysql,地址:https://dev.mysql.com/downloads/mysql/ 然后已知安装就好了,会出现让你记住密码的提示,然后就安装好了.... ...
- javascript总结50:认识instanceof 与 原型链
1 instanceof: 1.1 普通使用下: 判断一个对象是否是某个构造函数的实例: 语法 : 对象 instanceof 函数 是则返回true,不是则返回false. console.log( ...
- Thinkphp 导出大量数据 csv格式
public function test2() { $user_count = M('department')->count(); $page = ceil($user_count / 1000 ...
- HttpUploader6-queue版本更新说明
HttpUploader6-queue版本更新说明 博客园:http://www.cnblogs.com/xproer/p/5109761.html 网易博客:http://hyhyo.blog.16 ...
- C# 过滤SQL 字符串中的 参数
/// <summary> /// 参数过滤 /// </summary> /// <param name="parameters"></ ...
- Elasticsearch5.6.8 安装问题集锦
今天在内部linux环境安装Elasticsearch5.6.8时遇到一些问题,主要如下 使用Elasticsearch5.6.8 必须安装jdk1.8 [elsearch@vm-mysteel-dc ...
- Rsync+Inotify实现文件自动同步
1>rsync概述 rsync的优点与不足 rsync与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求 ...
- ibatis源码学习3_源码包结构
ibatis的技术是从xml里面字符串转换成JAVA对象,对象填充JDBC的statement查询,然后从resultset取对象返回,另外利用ThreadLocal实现线程安全,JDBC保证了事务控 ...