对象关系映射

SQL映射文件

匿名 (未验证) 提交于 2019-12-02 23:32:01
SQL 映射文件的常用元素   sql映射文件的几个顶级元素(按照定义的顺序)   --namespace(命名空间)   --绑定Dao接口   --namespace的命名必须跟某个接口同名   --接口中的方法与映射文件中的语句id一一对应 配置给定命名空间的缓存 从其他命名空间引用缓存配置   resultMap - 用来描述数据库结果集和对象的对应关系 可以重用的 SQL 块 , 也可以被其他语句引用 映射插入语句   id:命名空间中唯一的标识符   parameterType:传入sql语句的参数类型的完全限定名或别名   提供开启了事务控制,一定要进行conmit提交事务. 映射更新语句   id:命名空间中唯一的标识符   parameterType:传入sql语句的参数类型的完全限定名或别名   提供开启了事务控制,一定要进行conmit提交事务.   如果只是更新单个值,每次都传入对象影响速度,可以传两个参数   但是参数必须使用注解 @Param   映射SQL中的参数:#{注解名称} 超过 4 个以上的参数最好使用封装成对象入参   参数固定的业务方法 , 最好直接使用多参数入参 . 映射删除语句   id:命名空间中唯一的标识符   parameterType:传入sql语句的参数类型的完全限定名或别名   提供开启了事务控制

ORM:对象关系映射

匿名 (未验证) 提交于 2019-12-02 22:51:30
定义:面向对象和关系型数据库的一种映射,通过操作对象的方式操作数据 对应关系: 类对应数据表 对象对应数据行(记录) 属性对应字段 导入:from app01 import models 查: models.Publisher.objects.all() 查询所有的数据,queryset:对象列表 models.Publisher.objects.get(name='xxxx') 对象,获取一个对象(有且唯一),获取不到或者获取到多个对象会报错 models.Publisher.objects.filter(name='xxxx') 获取满足条件的所有的对象,queryset:对象列表 增: models.Publisher.objects.create(name='xxx') 新插入数据库的对象 obj = models.Publisher(name='xxx') 存在在内存中的对象 obj.save() 提交到数据库中,新增 删: obj = models.Publisher.objects.get(pk=1) obj.delete() obj_list = models.Publisher.objects.filter(pk=1) obj_list.delete() 改: obj = models.Publisher.objects.get(pk=1) obj.name =

JavaEE--Mybatis学习笔记(一)

匿名 (未验证) 提交于 2019-12-02 21:53:52
一、简介: MyBatis 本是 apache 的一个开源项目 iBatis , 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。 iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的 持久层 框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO) MyBatis 的前身就是 iBatis,iBatis 本是由 ClintonBegin 开发,后来捐给 A pache 基金会,成立了 iBatis 开源项目 。 2010 年 5 月该项目由 A pahce 基金会迁移到了 G oogle C ode, 并且改名为 M y B atis 。尽管如此,它的包结构仍然为 ibatis 。 访问网站 www.mybatis.org/ https://github.com/mybatis MyBatis 是一个数据持久层 ( ORM ) 框架。 把实体类和 SQL 语句之间建立了映射关系,是一种半自动化的 ORM 实现。 所有 sql 语句,全部定义在 xml (建议)中。也可以通过注解的方式在接口上实现。这些映射文件称之为 mapper。 二、 MyBatis 的优点 (与其他架构区别

MyBatis框架之SQL映射和动态SQL

匿名 (未验证) 提交于 2019-12-02 21:53:52
使用MyBatis实现条件查询 1.SQL映射文件: MyBatis真正的强大之处就在于SQL映射语句,MyBatis专注于SQL,对于开发人员来说也是极大限度的进行SQL调优,以保证性能。下面是SQL映射文件的几个顶级元素的配置:   1.mapper:映射文件的根节点,只有一个属性namespace(命名空间),作用如下:     (1)用于区分不同的mapper,全局唯一。     (2)绑定DAO接口,即面向接口编程,当绑定一个接口,就不用写此接口的实现类,会通过接口的完全限定名找到对应的mapper配置来执行SQL语句, 所以,namespace的命名必须要写接口的完全限定名。   2.cache:配置给定命名空间的缓存。   3.cache-ref:从其他命名空间引用缓存配置。   4.resultMap:用来描述数据库结果集和对象的对应关系。   5.sql:可以重用的SQL块,也可以被其他语句引用。   6.insert:映射插入语句。   7.update:更新映射语句。   8.delete:删除映射语句。   9.select:映射查询语句。 2.使用select完成单条件查询   <select id = "GetUserByName" resultType = "User" parameterType = "string">     select *

Java NIO 学习笔记一

匿名 (未验证) 提交于 2019-12-02 21:52:03
进程执行I/O操作,归结起来就是向操作系统发出请求,它要么把缓存区例的数据排干(写),要么用数据把数据区填满(读)。进程使用这一机制处理所有数据进出操作。 进程使用read()系统调用,要求其缓存区被填满。内核随即向磁盘控制器发出命令,要求其从磁盘读取数据。通过DMA技术直接将磁盘中的数据写入内核内存缓存区,一旦磁盘控制器把缓存区填满,内存立即把数据从内核空间的里你是缓冲区拷贝到进程执行read()调用时指定的缓冲区。 根据发散/汇聚的概念,进程只需要一个系统调用,就能把一连串的缓冲区地址传递给操作系统。然后,内核就能顺序填充或排干多个缓冲区,读的时候将数据发散到多个用户空间缓冲区,写的时候再从多个缓冲区把数据汇聚起来。 前面提到设备控制器不能使用DMA直接存储到用户空间,需要从内核空间拷贝到用户空间。但在使用内存多重映射技术可以避免这种拷贝。 现代操作系统都使用虚拟内存,它有极大优点: 多个虚拟地址可以映射到同一个物理地址。 虚拟内存空间可能大于实际可用的硬件内存。 借助虚拟内存的特点,将内核空间中的缓冲区的虚拟地址和用户空间的缓冲区虚拟地址映射到一个物理地址(即内存多重映射技术)。 但这也是有前提的,内核与用户缓冲区必须使用相同的页对齐,缓冲区的大小还必须是磁盘控制块大小的倍数。 确定请求的数据分布在文件系统的哪些页,这些页不一定都是连续的 在内核空间种分配足够的页

Mybatis从认识到了解

匿名 (未验证) 提交于 2019-12-02 20:54:39
Ŀ¼ SqlSessionFactoryBuilder SqlSessionFactory SqlSession SQL Mapper resultMap 首发日期:2018-10-31 MyBatis是Apache旗下的开源项目,是一个持久层框架 与Hibernate的全自动ORM框架可以仅仅依靠映射关系进行SQL查询不同,MyBatis是一个基于SQL语句的半自动ORM框架,它需要我们手动去定义SQL语句。 与JDBC的对比中,MyBatis是基于ORM的,天然要比JDBC强,基于ORM使得MyBatis具有查询的数据可以自动封装到对象中的等好处,而JDBC需要手动编码的位置就较多了(就算是使用DButils,你也需要使用定义不同的方法来给不同的持久类赋值。)。 在互联网应用程序开发中,对于存储过程和复杂的SQL,Hibernate并没有很好地去处理,所以它比较难提升性能(并不是说不能,而是耗费心思较多),无法满足高并发和高响应的需求(如果要强行优化,又破坏了Hibernate的全自动ORM设计)。 与之对应的,Mybatis可以说是基于SQL的,它需要我们去自定义SQL,那么我们可以根据需要去设计和优化SQL,这种可针对SQL的优化的持久层框架,恰巧符合高并发和高响应的互联网应用程序开发开发需求。 ORM区别: Hibernate是完全面向POJO的,它基本不需要编写SQL

python之ORM(对象关系映射)

不羁的心 提交于 2019-12-02 16:51:58
实现了数据模型与数据库的解耦,通过简单的配置就可以轻松更换数据库,而不需要更改代码。orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句。所有使用Django开发的项目无需关心程序底层使用的是MySQL、Oracle、sqlite....,如果数据库迁移,只需要更换Django的数据库引擎即可。 来源: https://www.cnblogs.com/xiximayou/p/11755804.html

Mybatis面试题汇总

老子叫甜甜 提交于 2019-12-02 16:32:56
1、什么是Mybatis? Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。 MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和 statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。(从执行sql到返回result的过程)。 2、Mybaits的优点: 基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。 与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接; 很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持) 能够与Spring很好的集成; 提供映射标签

mybatis框架中XxxxMaper.xml的文件

房东的猫 提交于 2019-12-02 16:32:13
我们知道在mybatis框架中,config.xml中会关联到许多的XxxxMapper的xml文件,这些文件又对应着一个个的接口,来观察下这些xml文件 从以下这个文件为例子: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.briup.mappers.StudentMapper"> 首先是如何执行sql语句 <insert id="insertStudent" parameterType="Student"> INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,PHONE) VALUES(#{studId},#{name},#{email},#{phone}) </insert> ID属性为insertStudent,可以在当前xml文件中的名空间 com.briup.mappers.StudentMapper.insertStudent中唯一标识该sql语句。parameterType 属性是一个完全限定类名或者是一个类型别名alias。

flask SQLAlchemy连接数据库 ORM SQLAlchemy对数据的增删改查以及常用数据类型 Flask-Migrate Flask-Script Flask-SQLAlchemy

跟風遠走 提交于 2019-12-02 14:46:03
1,SQLAlchemy连接数据库 在Flask中,如果想要操作数据库,我们可以使用ORM来操作数据库,使用ORM操作数据库将变得非常简单。 以 mysql + SQLAlchemy 组合进行学习 SQLAlchemy:SQLAlchemy是一个数据库的ORM框架 安装命令为:pip3 install SQLAlchemy。 通过SQLAlchemy连接数据库 首先来看一段代码: from sqlalchemy import create_engine # 数据库的配置变量 HOSTNAME = '127.0.0.1' PORT = '3306' DATABASE = 'xt_flask' USERNAME = 'root' PASSWORD = 'root' DB_URI = 'mysql+mysqldb://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE) # 创建数据库引擎 engine = create_engine(DB_URI) #创建连接 with engine.connect() as con: rs = con.execute('SELECT 1') print rs.fetchone() 首先从sqlalchemy中导入create_engine,用这个函数来创建引擎