对象关系映射

1、Hibernate-入门

六眼飞鱼酱① 提交于 2019-12-04 04:07:09
一、概述 1、什么是Hibernate: Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JaveEE架构中取代CMP,完成数据持久化的重任。 2、什么是ORM: ORM:Object Relational Mapping(对象关系映射)。指的是将一个Java中的对象与关系型数据库中的表建立一种映射关系,从而操作对象就可以操作数据库中的表。 3、Hibernate的作用: 1、对象化。 hibernate可以让开发人员以面相对象的思想来操作数据库。jdbc只能通过SQL语句将元数据传送给数据库,进行数据操作。而hibernate可以在底层对元数据和对象进行转化,使得开发者只用面向对象的方式来存取数据即可。 2、更好的移植性。 hibernate使用xml或JPA的配置以及数据库方言等等的机制,使得hibernate具有更好的移植性,对于不同的数据库

【翻译】Flink Table 和 SQL API 概念与通用API

血红的双手。 提交于 2019-12-04 01:39:24
本文翻译自官网: https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/common.html Table API和SQL集成在共同API中。 该API的中心概念是 Table ,用作查询的输入和输出。 本文档介绍了使用Table API和SQL查询的程序的通用结构,如何注册 Table ,如何查询 Table 以及如何发出 Table(数据) 。 两个 planner 之间的主要区别 表API和SQL程序的结构 创建一个TableEnvironment 在 Catalog 中注册表 注册表格 注册一个TableSource 注册一个TableSink 注册 扩展 Catalog 查询表 表API SQL 混合 表API和SQL 发出表 (数据) 翻译并执行查询 与DataStream和DataSet API集成 Scala的隐式转换 将DataStream或DataSet注册为表 将DataStream或DataSet转换为表 将表转换为DataStream或DataSet 数据类型到表结构的映射 查询优化 解释表 两个 planner 之间的主要区别 Blink将批处理作业视为流的特殊情况。 因此,还不支持Table和DataSet之间的转换,并且批处理作业不会转换成DateSet ,而是

深入浅出hibernate总结

大城市里の小女人 提交于 2019-12-03 21:23:08
一、总括 1、sessionFactory与session (1)sessionFactory:一个数据库对应一个factory,线程安全、单例,一般随应用开启和关闭。 (2)session:非线程安全,管理connection(池) session对于sessionFactory的关系相当于conn对于jdbc的关系,但session不等同于connection。 (3)另外,一般是一个session对一个事务。 2、hibernate不适合的场景 (1)复杂查询/大批量数据导出 (2)批量修改/删除 (3)实体关系过于复杂 3、连接池与prepareStatement池的原理 连接池,在getConn与closeConn的时候,不是真正的创建和关闭,采用代理拦截,在get的时候,从池中拿,如果有则返回,没有则创建一个返回,归还的时候,如果池没有满,则放入池中,如果满了,则真正关闭。 (补上示例代码) prepareStatement池的原理就是缓存ps语句,不让其随着conn的关闭而失效。步骤就是拦截ps的close方法,然后每次create的时候,从池中查找,如果有则返回,没有则创建,每次close的时候,看池有没有满,如果有满,则关闭,没有则放入池中。 (补上示例代码) 4、hibernate configure的配置 Configuration cfg=new

Python 3 对象关系映射(ORM)

流过昼夜 提交于 2019-12-03 15:00:45
ORM 对象关系映射 Object Relational Mapping 表 ---> 类 字段 ---> 属性 记录 ---> 对象 # mysql_client.py import pymysql class MySQLClient: def __init__(self): # 建立连接 self.client = pymysql.connect( host='localhost', port=3306, user='root', password='123', database='orm_demo', charset='utf8', autocommit=True ) # 获取游标 self.cursor = self.client.cursor( pymysql.cursors.DictCursor ) # 提交查询sql语句并返回结果 def my_select(self, sql, value=None): print('sql:', sql, '\nvalue:', value) self.cursor.execute(sql, value) res = self.cursor.fetchall() return res # 提交增加, 修改的sql语句 def my_execute(self, sql, values): try: print('<sql>:',

[spring学习4] MVC

旧时模样 提交于 2019-12-03 12:04:15
简介 从前的网页程序是将业务代码嵌入到JSP页面中,耦合性较高。 后来将前后端的代码分离后,采用MVC架构,M:模型,负责数据模型的控制,V:视图,负责视图的展示,C:控制器,负责将数据模型放到相应的视图中渲染。 请求过程 ┌─────────┐ ↗│ 处理器映射│ 2/ └─────────┘ / 3 请求 1 ┌─────────────────┐ --------------------> ┌─────┐ ----->│DispatcherServlet│ <--┌─────────────┐ 4 │控制器│ └─────────────────┘ │模型及逻辑视图名│ ---│ │ \ \ └─────────────┘ └─────┘ \ \5 ┌────────┐ 6\ --->│视图解析器│ ↘ └────────┘ 响应 7 ┌────┐ <----------------------│视图 │ └────┘ 过程: 请求:请求离开浏览器时,会带有用户所请求内容的信息,至少会包含请求的URL。(还可能带有如表单信息) DispatcherServlet:将请求发送给Spring MVC控制器(controller) DispatcherServlet :与大多数基于Java的Web框架一样,Spring MVC所有的请求都会通过一个前端控制器(front

Dotnet Core中使用AutoMapper

[亡魂溺海] 提交于 2019-12-03 11:39:23
官网: http://automapper.org/ 文档: https://automapper.readthedocs.io/en/latest/index.html GitHub: https://github.com/AutoMapper/AutoMapper/blob/master/docs/index.rst 什么是AutoMapper?   AutoMapper是一个对象-对象映射器。 对象-对象映射通过将一种类型的输入对象转换为另一种类型的输出对象来工作。 使AutoMapper变得有趣的是,它提供了一些有趣的约定,以免去搞清楚如何将类型A映射为类型B。只要类型B遵循AutoMapper既定的约定,就需要几乎零配置来映射两个类型。 为什么要使用AutoMapper?   映射代码很无聊。 测试映射代码更加无聊。 AutoMapper提供了简单的类型配置以及简单的映射测试。 真正的问题可能是“为什么使用对象-对象映射?”映射可以在应用程序中的许多地方发生,但主要发生在层之间的边界中,例如UI /域层或服务/域层之间。 一层的关注点通常与另一层的关注点冲突,因此对象-对象映射导致分离的模型,其中每一层的关注点仅会影响该层中的类型。 AutoMapper的使用场景:   AutoMapper是对象到对象的映射工具。在完成映射规则之后

Mybatis源码解析(一) —— mybatis与Spring时如何整合的?

旧巷老猫 提交于 2019-12-03 11:22:38
Mybatis源码解析(一) —— mybatis与Spring时如何整合的?   从大学开始接触mybatis到现在差不多快3年了吧,最近寻思着使用3年了,我却还不清楚其内部实现细节,比如: 它是如何加载各种mybatis相关的xml? 它是如何仅仅通过一个Mapper接口 + Mappe.xml实现数据库操作的(尽管很多人可能都清楚是通过代理实现,但面试时一旦深入询问:比如Mapper的代理类名是什么?是通过JDK还是cglib实现?)? 在同一个方法中,Mybatis多次请求数据库,是否要创建多个SqlSession会话? 它与Spring是如何适配(整合)的? 在Spring中是如何保障SqlSession的生命周期的? 等等一系列的问题。。。   如果以上问题你自认为无法回答,或者说了解一些,那么就从现在开始,我们来一一揭开这层面纱。 一、Mybatis:最简单测试Demo   相信只要用过Mybatis的同学看到下面的代码一定不会陌生,如果不清楚的可以看下 官网文档 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new

Java集合框架之Map实例解析

為{幸葍}努か 提交于 2019-12-03 09:35:56
1、Map概述 1.1 什么是Map Map是将 键映射到值( key-value ) 的对象。一个映射 不能包含重复的键 ;每个键最多只能映射到一个值。Map 接口提供三种collection 视图,允许以 键集 (keySet())、 值集 (values())或 键-值映射关系集 (entrySet())的形式查看某个映射的内容( 即获取键值对的内容 )。 映射顺序定义为迭代器在映射的 collection 视图上返回其元素的顺序,即 可以映射得到键、值和键-值的Set集合 ,元素的顺序是由得到的Set集合所决定的。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如 HashMap 类 。 1.2 Map与Collection的区别 1.Map 存储的是键值对形式的元素,键唯一,值可以重复。 2.Collection 存储的是单列元素,子接口Set元素唯一,子接口List元素可重复。 3.Map集合的数据结构值针对键有效,跟值无关,Collection集合的数据结构是针对元素有效 关于Collection可以戳这里 java集合框架之Collection实例解析 2、Map继承体系 下面列出了常见Map集合的继承体系与他们的特点 ---Map 键唯一 |------HashMap 基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作

写了10年JAVA代码,为何还是给人一种乱糟糟的感觉?

落花浮王杯 提交于 2019-12-03 08:58:31
接触过不少号称写了10多年代码的程序员,可经常还是会发现他们的代码给人一种乱糟糟的感觉,那么如何才能写出让同事感觉不那么乱的代码呢? 一、为什么要写这篇文章 在开篇之前先说明下为什么要写这篇文章?在Java的世界里MVC软件架构模式绝对是经典的存在(PS:MVC是一种软件架构方式并不只有Java有),如果你是在最近十年前后进入Java的编程世界,那么你会发现自己这些年似乎从来没有逃离MVC架构模式的牢笼,只不过换着使用了不同的MVC框架,如早期的Struts1、Struts2以及现在几乎一统江湖的Spring MVC(少数自行封装MVC框架的公司除外)。 而随着互联网技术的发展,特别是Ajax等富客户端技术的发展,前端技术逐步形成了一套体系,并且逐步从后端代码(如JSP)中剥离出来,从而形成了现在普遍流行的前后端分离模式(这也是一段时间内为什么前端工程师会出现大量需求的原因),而这也对传统的MVC模式产生了一点小的改变,因为现在基于Java的后端服务中很少会有大量处理复杂界面逻辑的代码出现,因此MVC中的V(View)这一层就逐步被各类前端技术所替代,如AngularJS、React等。 所以现在的Java服务端绝大部分情况下只是在处理M(Model)+C(Controller)的逻辑,而从概念上来看,好像Model代表的就是数据模型、而C则是一种控制层逻辑,所以很多人

mybatis02

廉价感情. 提交于 2019-12-03 08:19:14
多表操作 一对一(多对一) User , Account 实现查询账户信息时,也要查询账户所对应的用户信息。 SELECT account.*, user.username, user.address FROM account, user WHERE account.uid = user.id 方式一 定义 AccountCustomer 类中要包含账户信息同时还要包含用户信息,所以要在定义 AccountUser 类时可以继承 User 类 1 public class AccountUser extends Account implements Serializable { 2 private String username; 3 private String address; 4 //getter setter 5 6 } IAccountDao List<AccountUser> findAll(); 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <mapper namespace="com.qyy.dao