对象关系映射

Hibernate一对多映射

﹥>﹥吖頭↗ 提交于 2020-01-02 03:48:52
映射分四种类型:   一对多 多对一 一对一 多对多 一、单向一对多 什么是一对多的关系呢?   就像班级和学生。站在班级的角度看。班级和学生就是一对多的关系。单向的 那怎么样实现这种关系呢?   1.在数据库中,可以通过添加主外键的关联,表现一对多的关系;   2.在java中,通过在一方持有多方的集合实现,即在“一”的一端中使用<set>元素表示持有“多”的一端的对象。 ![CDATA[这里放置需要显示的字符]]> 数据库连接URL,使用CDATA包含是为了不让解析CDATA内部的特殊符号 如"&",如果不用CDATA则用"&"来代替"&" //hibernate4.3的初始化用于会话的获取和关闭: public class HibernateUtil { private static SessionFactory sessionFactory; private static Session session; static { //创建configuration对象,读取hibernate.cfg.xml文件,完成初始化 Configuration config = new Configuration().configure(); StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder()

008多对一 关联映射 --- many-to-one

烂漫一生 提交于 2020-01-02 03:48:27
多对一 --- many-to-one 一对多 --- one-to-many 一对一 --- one-to-one 多对多 --- many-to-many 场景: 用户和组;从用户角度来,多个用户属于一个组(多对一 关联) 使用hibernate开发的思路:先建立对象模型(领域模型),把实体抽取出来。 目前两个实体:用户和组两个实体,多个用户属于一个组,那么一个用户都会对应于一个组,所以用户实体中应该有一个持有组的引用。 关联映射的本质: 将关联关系映射到数据库,所谓的关联关系是对象模型在内存中一个或多个引用。 User实体类: public class User { private int id; private String name; private Group group; public Group getGroup() { return group; } public void setGroup(Group group) { this.group = group; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name)

Hibernate关联映射(多对一 --- many-to-one)

烈酒焚心 提交于 2020-01-02 03:47:43
转自:https://blog.csdn.net/fengxuezhiye/article/details/7369786?utm_source=blogxgwz9 Hibernate的关联映射关系有: 多对一 ---- many-to-one 一对多 ---- one-to-many 一对一 ---- one-to-one 多对多 ---- many-to-many 比较常用的是多对一和一对一关联映射 多对一关联映射: 场景:用户和组;从用户角度来看,多个用户属于一个组(多对一关联) 使用 hibernate 开发的思路:先建立对象模型,把实体抽取出来。目前两个实体:用户和组两个实体,多个用户 属于一个组,所有用户实体中应该有一个持有组的引用 对象模型图 关系模型: 关系映射的本质: 将关联关系映射到 数据库 ,所谓的关联关系就是对象模型在内存中的一个或多个引用 User实体类: [html] view plain copy public class User { private int id; private String name; private Group group; public Group getGroup() { return group; } public void setGroup(Group group) { this.group = group; }

ASP.NET Core应用针对静态文件请求的处理[1]: 以Web的形式发布静态文件

坚强是说给别人听的谎言 提交于 2020-01-02 02:34:02
原文: ASP.NET Core应用针对静态文件请求的处理[1]: 以Web的形式发布静态文件 虽然ASP.NET Core是一款“动态”的Web服务端框架,但是在很多情况下都需要处理针对静态文件的请求,最为常见的就是这对JavaScript脚本文件、CSS样式文件和图片文件的请求。针对不同格式的静态文件请求的处理,ASP.NET Core为我们提供了三个中间件,它们将是本系列文章论述的重点。不过在针对对它们展开介绍之前,我们照理通过一些简单的实例来体验一下如何在一个ASP.NET Core应用中发布静态文件。[本文已经同步到《 ASP.NET Core框架揭秘 》之中] 目录 一、以Web的形式读取文件 二、浏览目录内容 三、显示默认页面 四、映射媒体类型 一、以Web的形式读取文件 我们创建的演示实例是一个简单的ASP.NET Core控制台应用,它具有如下图所示的项目结构。我们可以看到在默认作为WebRoot的目录(wwwroot)下,我们将JavaScript脚本文件、CSS样式文件和图片文件存放到对应的子目录(js、css和img)下,我们将把这个目录的所有文件以Web的形式发布出来,客户端可以访问相应的URL来获取这些文件。 针对静态文件的请求是通过一个名为 StaticFileMiddleware 的中间件来实现的,这个中间件类型定义在NuGet包“

mybatis 入门

▼魔方 西西 提交于 2020-01-01 00:16:15
mybatis mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc ,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。 mybatis 通过 xml 或 注解 的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中 sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。 采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。 jdbc问题 1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。 2、Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java 代码。 3、使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护。 4、对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护

MyBatis进阶

*爱你&永不变心* 提交于 2019-12-31 20:01:49
Mapper代理 上一节 中直接利用session+id来执行sql的方式存在一些问题 session执行sql时都需要提供要执行sql的id,而这个id是字符串类型,意味着id是否正确在编译期间是无法获知的,必须等到运行时才能发现错误, sql需要的参数和返回值类都不明确,这也增加了出错的概率 理想的状况:像调用方法一样调用sql,既避免了直接写id的问题,也可以明确指定方法的参数类型和返回值类型 解决方案: MyBatis通过动态代理来解决,简单的说动态代理(动态生成),就是在运行过程中自动产生一个对象,用它来代理原本已经存在的对象的方法 MyBatis中本来由Executor(被代理对象)来完成sql的执行,现在由代理对象(自动生成)来代理Executor完成,代理对象会将我们的操作转交给Executor 问题是:MyBatis怎么知道代理对象是什么样的对象呢?,这就需要为MyBatis提供Mapper接口,这个接口就是对mapper.xml中的sql语句的声明,与DAO层的接口一毛一样 使用步骤 创建接口类 package com.kkb.mapper; import com.kkb.pojo.Products; public interface ProductsMapper { //根据name查询一个Products public Products

2019年mybatils面试高频题(java)

浪尽此生 提交于 2019-12-31 12:33:04
前言 2019即将过去,伴随我们即将迎来的又是新的一年,过完春节,马上又要迎来新的金三银四面试季。 那么,作为程序猿的你,是否真的有所准备的呢,亦或是安于本职工作,继续做好手头上的事情。 当然,不论选择如何,假如你真的准备在之后的金三银四跳槽的话,那么作为一个Java工程师,就不可不看了。 如何在几个月的时间里,快速的为即将到来的面试进行充分的准备呢? 一、什么是MyBatis? 答:MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。 二、讲下MyBatis的缓存 答:MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置 三、Mybatis是如何进行分页的?分页插件的原理是什么? 答: 1、Mybatis使用RowBounds对象进行分页,也可以直接编写sql实现分页,也可以使用Mybatis的分页插件。 2、分页插件的原理:实现Mybatis提供的接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql。 举例:select * from student,拦截sql后重写为:select t.* from (select * from student)t

mybatis初识

…衆ロ難τιáo~ 提交于 2019-12-30 10:53:23
mybatis初识 1、概念 1.1、什么是mybatis mybatis是一款orm框架,主要用来操作数据库。 1.2、jdbc、jpa、mybatis三者的区别 jdbc 最原生操作数据库,它特点:执行效率高,但是开发效率低。 jdbc自己手动写sq|语句,所以性能高。 jdbc自己手动写sq|语句,所以性能高。 jpa jpa:它是对jdbc的封装它特点:开发效率高, 执行效率低。 开发效率高:直接调用api即可。 就能完成对应的crud。 执行效率低:因为sq|语句它是自动生成的, 我们不能很好控制。 mybatis mbatis特点:开发效率要比jdc高, 执行效率要比jpa高。 mybatis是一个orm框架, 它消除了重复代码, mybatis是自己手动写sq|语句。 1.3、ORM 概念     ORM:对象关系映射(Object Relational Mapping,简称ORM),是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 ORM框架映射方式     常用的有两种: Sql操作方式(对jdbc进行封装):把SQL配置到配置文件中,通过不同SQL中完成对象实体和数据库关系相互转换的操作。(mybatis的实现方式) 完整映射:直接映射的是对象实体和数据库关系映射。操作数据库关系,不用写SQL有框架自己生成。(JPA、Hibenate实现方式)

HashMap源码

给你一囗甜甜゛ 提交于 2019-12-30 03:07:25
HashMap源码 转载自 https://blog.csdn.net/mar_ljh/article/details/80929093 /* * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package java.util; import sun.misc.SharedSecrets; import java.io.IOException; import java.io.InvalidObjectException; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Consumer; import java.util.function.Function; /** *

Hibernate_day03

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-29 02:43:58
一、今天内容 0 列表功能实现 1 表与表之间关系回顾 (1)一对多(客户和联系人) (2)多对多(用户和角色) 2 hibernate一对多操作 (1)一对多映射配置 (2)一对多级联保存 (3)一对多级联删除 (4)inverse属性 3 hibernate多对多操作 (1)多对多映射配置 (2)多对多级联保存(重点) (3)多对多级联删除 (4)维护第三张表 二、客户列表功能 1 sessionFactory已经关闭了,不需要关闭 2 dao里面代码 //使用hibernate实现查询列表 public List<Customer> findAll() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { //得到sessionFactory sessionFactory = HibernateUtils.getSessionFactory(); //得到session session = sessionFactory.openSession(); //开启事务 tx = session.beginTransaction(); //查询所有记录 Criteria criteria = session.createCriteria(Customer