对象关系映射

MyBatis关联映射

两盒软妹~` 提交于 2019-12-05 11:35:04
主键映射 主键映射作用 当数据插入操作不关心插入后数据的主键(唯一标识),那么建议使用 不返回自增主键值 的方式来配置插入语句,这样可以避免额外的SQL开销. 当执行插入操作后需要立即获取插入的自增主键值,比如一次操作中保存一对多这种关系的数据,那么就要使用 插入后获取自增主键值 的方式配置. ​ mybatis进行插入操作时,如果表的主键是自增的,针对不同的数据库相应的操作也不同。基本上经常会遇到的就是Oracle Sequece 和 Mysql 自增主键,解释如下。 自动递增 ​ 一对多的那种表结构,在插入多端数据时,需要获取刚刚保存了的一段的主键。那么这个时候,上述的配置就无法满足需要了。为此我们需要使用mybatis提供 useGeneratedKeys 和 keyProperty 来单独配置针对自增逐渐的处理。 Mysql自增主键配置 针对于Mysql这种自己维护主键的数据库,可以直接使用以下配置在插入后获取插入主键, <insert id="insert" useGeneratedKeys="true" keyProperty="id"> INSERT INTO tb_user ( username, password, phone, email, created, updated ) VALUES ( #{username}, #{password}, #{phone

Java面试之持久层(10)

我的未来我决定 提交于 2019-12-05 10:04:38
91,什么是ORM? 对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术; 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据(在Java中可以用XML或者是注解),将程序中的对象自动持久化到关系数据库中或者将关系数据库表中的行转换成Java对象,其本质上就是将数据从一种形式转换到另外一种形式。 92,Hibernate中SessionFactory是线程安全的吗?Session是线程安全的吗(两个线程能够共享同一个Session吗)? SessionFactory对应Hibernate的一个数据存储的概念,它是线程安全的,可以被多个线程并发访问。SessionFactory一般只会在启动的时候构建。对于应用程序,最好将SessionFactory通过单例模式进行封装以便于访问。 Session是一个轻量级非线程安全的对象(线程间不能共享session),它表示与数据库进行交互的一个工作单元。Session是由SessionFactory创建的,在任务完成之后它会被关闭。Session是持久层服务对外提供的主要接口。 Session会延迟获取数据库连接(也就是在需要的时候才会获取)。为了避免创建太多的session

java web开发入门七(mybatis)基于intellig idea

倾然丶 夕夏残阳落幕 提交于 2019-12-05 08:44:07
mybatis 一、 入门开发步骤 1.导入相关jar包 mybatis3.4.2核心开发包 asm-5.1.jar cglib-3.2.4.jar commons-logging-1.1.3.jar log4j-1.2.17.jar mybatis-3.4.2.jar mysql驱动包 mysql-connector-java-5.1.7-bin.jar 2.定义实体及实体映射文件 定义member实体 package com.eggtwo.entity; import java.math.BigDecimal; import java.util.Date; public class Member { private int id; public int getId() { return id; } public void setId(int id) { this.id = id; } private String name; private int age; private Date birthday; private boolean man; private BigDecimal score; public BigDecimal getScore() { return score; } public void setScore(BigDecimal score) { this

mybatis的基本使用

我的未来我决定 提交于 2019-12-05 00:28:37
第一部分 基本概念 1.1 什么是MyBatis   MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 1.2 经典配置 从 XML 中构建 SqlSessionFactory   每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。 而 SqlSessionFactory 本 身 是 由 SqlSessionFactoryBuilder 创建的,它可以从 XML 配置,注解或手动配置 Java 来创建 SqlSessionFactory。但是当Mybatis与一些依赖注入框架(如Spring或者Guice)同时使用时,SqlSessions将被依赖注入框架所创建,所以你不需要使用SqlSessionFactoryBuilder或者SqlSessionFactory   从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。MyBatis 包含一个名叫 Resources 的工具类

FreeSql v0.11 几个实用功能说明

心不动则不痛 提交于 2019-12-04 20:36:38
FreeSql 开源发布快一年了,立志成为 .Net 平台方便好用的 ORM,仓库地址: https://github.com/2881099/FreeSql 随着不断的迭代更新,越来越稳定,也越来越强大。预计在一周年的时候(2020年1月1日)发布 1.0 正式版本。 金九银十的日子过去了,在这个铜一般的月份里,鄙人做了几个重大功能,希望对使用者开发提供更大的便利。 一、Dto 映射查询 二、IncludeMany 联级加载 三、Where(a => true) 逻辑表达式解析优化 四、SaveManyToMany 联级保存多对多集合属性 五、迁移实体 - 到指定表名 六、MySql 特有功能 On Duplicate Key Update,和 Pgsql upsert 七、ISelect.ToDelete 高级删除 八、全局过滤器 以下的代码,先决定义代码如下 : IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|\db1.db;Max Pool Size=10";) .UseAutoSyncStructure(true) //自动同步实体结构到数据库 .Build(); public

链表11-开发可用链表(在映射中使用链表)

时光毁灭记忆、已成空白 提交于 2019-12-04 20:08:21
在映射(关系)中使用链表   链表就是动态对象数组,那么在之前进行数据表映射的时候(本次只以一对多为主),都为会出对象数组的概念,以链表实现对象数组的保存   对于任何一个要使用链表的类而言,一定要有提供对象比较方法      本程序不再受到数组长度的限制,但是新的问题,如果真按照这样的方式去编写代码,会造成只有一个简单java类,就需要定义一个链表   方法解决的是代码的重复问题,但是以上并不属于代码的重复,属于类型的不统一,所以这个时候学习到的知识不足以解决此类问题。需要使用面向对象的继承和多态来解决这种问题   此系列的链表只是最基础的单身链表   本次的链表是日后java类集学习的先期原理分析 来源: https://www.cnblogs.com/anyux/p/11881104.html

认真分析mmap:是什么 为什么 怎么用(转)

这一生的挚爱 提交于 2019-12-04 08:43:50
阅读目录 mmap基础概念 mmap内存映射原理 mmap和常规文件操作的区别 mmap优点总结 mmap相关函数 mmap使用细节 回到顶部 mmap基础概念 mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。如下图所示: 由上图可以看出,进程的虚拟地址空间,由多个虚拟内存区域构成。虚拟内存区域是进程的虚拟地址空间中的一个同质区间,即具有同样特性的连续地址范围。上图中所示的text数据段(代码段)、初始数据段、BSS数据段、堆、栈和内存映射,都是一个独立的虚拟内存区域。而为内存映射服务的地址空间处在堆栈之间的空余部分。 linux内核使用vm_area_struct结构来表示一个独立的虚拟内存区域,由于每个不同质的虚拟内存区域功能和内部机制都不同,因此一个进程使用多个vm_area_struct结构来分别表示不同类型的虚拟内存区域。各个vm_area_struct结构使用链表或者树形结构链接,方便进程快速访问,如下图所示: vm

iBatis SqlMap的配备总结

孤街浪徒 提交于 2019-12-04 06:58:19
iBatis SqlMap的配置总结 核心提示:SqlMap的配置是iBatis中应用的核心。这部分任务占据了iBatis开发的70的工作量。 1、命名空间: sqlMap namespace=Account,在此空间外要引用此空间的元素,则需要加上命名空间名。 2、实体的别名: typeAlias alias=Account type=com.lavasoft.ibatissut.sim SqlMap的配置是iBatis中应用的核心。这部分任务占据了iBatis开发的70的工作量。 1、命名空间: <sqlMap namespace="Account">,在此空间外要引用此空间的元素,则需要加上命名空间名。 2、实体的别名: <typeAlias alias="Account" type="com.lavasoft.ibatissut.simple.domain.entity.Account"/> 如果有用到的全名的地方,可以用别名代替,受命名空间约束。 3、插入操作 对于自增主键的表,插入可以不配置插入的主键列。否则是必须的。 4、获取主键 插入语句之前配置:主要是针对Sequence主键而言,插入前必须指定一个主键值给要插入的记录。Oracle、DB2亦如此,方法是在插入语句标签<insert....>之前配置上: <insert id="insertAccount"

ibatis sqlMap 使用

爷,独闯天下 提交于 2019-12-04 06:58:05
SqlMap的配置是iBatis中应用的核心。这部分任务占据了iBatis开发的70的工作量。 1、命名空间: <sqlMap namespace="Account"> 在此空间外要引用此空间的元素,则需要加上命名空间名。 2、实体的别名: <typeAlias alias="Account" type="com.lavasoft.ibatissut.simple.domain.entity.Account"/> 如果有用到的全名的地方,可以用别名代替,受命名空间约束。 3、插入操作 对于自增主键的表,插入可以不配置插入的主键列。否则是必须的。 4、获取主键 插入语句之前配置:主要是针对Sequence主键而言,插入前必须指定一个主键值给要插入的记录。Oracle、DB2亦如此,方法是在插入语句标签<insert....>之前配置上: <insert id="insertAccount" parameterClass="Account"> <selectKey resultClass="long" keyProperty="sctId"> SELECT SEQ_TEST.NEXTVAL FROM DUAL </selectKey> insert into .... ........ </insert> 插入语句之后配置:主要是针对自增主键的表而言,这类表在插入时不需要主键

mybatis 高级映射

放肆的年华 提交于 2019-12-04 06:34:35
高级结果映射 MyBatis的创建基于这样一个思想:数据库并不是您想怎样就怎样的。虽然我们希望所有的数据库遵守第三范式或BCNF(修正的第三范式),但它们不是。如果有一个数据库能够完美映射到所有应用程序,也将是非常棒的,但也没有。结果集映射就是MyBatis为解决这些问题而提供的解决方案。例如,我们如何映射下面这条语句? <select id="selectBlogDetails" parameterType="int" resultMap="detailedBlogResultMap"> select B.id as blog_id, B.title as blog_title, B.author_id as blog_author_id, A.id as author_id, A.username as author_username, A.password as author_password, A.email as author_email, A.bio as author_bio, A.favourite_section as author_favourite_section, P.id as post_id, P.blog_id as post_blog_id, P.author_id as post_author_id, P.created_on as post