数据库对象

JDBC向数据库中写数据

孤街浪徒 提交于 2019-12-04 04:42:40
1 package MYSQK; 2 import java.sql.*; 3 4 /** 5 * PreparedStatement 对象可以对sql语句进行预编译,预编译的信息会存在存储该对象中,当相同的sql语句再次执行时,程序 6 * 会使用PrepareStatement对象中,而不需再次编译去查询数据库,大大提高了数据的访问效率 7 */ 8 9 public class Insert { 10 public static void main(String[] args) throws SQLException{ 11 Connection conn=null; 12 PreparedStatement pst =null; 13 14 try { 15 // 1 加载驱动类 16 Class.forName("com.mysql.jdbc.Driver"); 17 // 2 通过DriverManager获取connection对象 18 String url="jdbc:mysql://192.168.64.128:3306/jdbc?" + 19 "user=root&password=815qza&useUnicode=true&characterEncoding=UTF8"; 20 conn = DriverManager.getConnection(url)

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具有更好的移植性,对于不同的数据库

Pytest实战API测试框架

可紊 提交于 2019-12-04 03:33:29
https://www.jianshu.com/p/40a0b396465c?utm_campaign=hugo&utm_medium=reader_share&utm_content=note&utm_source=weixin-timeline&from=timeline&isappinstalled=0 功能规划 数据库断言 pymysql -> 封装 环境清理 数据库操作 -> Fixtures 并发执行 pytest-xdist 多进程并行 复合断言 pytest-check 用例重跑 pytest-rerunfailures 环境切换 pytest-base-url 数据分离 pyyaml 配置分离 pytest.ini 报告生成 pytest-html, allure-pytest 用例等级 pytest-level 限制用例超时时间 pytest-timeout 发送报告邮件 通过自定Fixture及Hooks实现 安装相应的包 pip安装时可以通过 -i https://pypi.doubanio.com/simple/ ,指定使用豆瓣的源, 下载稍微快一点 pip install requests pymysql pyyaml pytest pyetst-xdist pytest-check pytest-rerunfailures pytest-base

Flask操作数据库基本操作

喜夏-厌秋 提交于 2019-12-03 23:03:00
Flask操作数据库基本操作 常用的SQLAlchemy字段类型 类型名 python中类型 说明 Integer int 普通整数,一般是32位 SmallInteger int 取值范围小的整数,一般是16位 BigInteger int或long 不限制精度的整数 Float float 浮点数 Numeric decimal.Decimal 普通整数,一般是32位 String str 变长字符串 Text str 变长字符串,对较长或不限长度的字符串做了优化 Unicode unicode 变长Unicode字符串 UnicodeText unicode 变长Unicode字符串,对较长或不限长度的字符串做了优化 Boolean bool 布尔值 Date datetime.date 时间 Time datetime.datetime 日期和时间 LargeBinary str 二进制文件 常用的SQLAlchemy列选项 选项名 说明 primary_key 如果为True,代表表的主键 unique 如果为True,代表这列不允许出现重复的值 index 如果为True,为这列创建索引,提高查询效率 nullable 如果为True,允许有空值,如果为False,不允许有空值 default 为这列定义默认值 常用的SQLAlchemy关系选项 选项名 说明

深入浅出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

Spring Data JPA的自动更新,为什么会自动更新?如何避免自动更新?

橙三吉。 提交于 2019-12-03 19:52:25
公司的项目后台架构是SpringBoot + Spring Date JPA,采用MySQL数据库。在工作刚开始时就遇到了一个奇怪的现象。在采用Date JPA查询完数据库之后,若改变了查询出的对象属性,那么数据库就会自动更新。比如查询出一个studentPO的name为“小明”,然后进行了一步studentPO.setName("小红")操作,再返回给前台,此时的数据库中的这个studentPO的name就会自己变成小红。但是我 并没有调用updateBean方法 去主动的更新这个对象,为什么它就会自动更新了呢? 起初我以为这个是和JPA的缓存有问题,就类似于Hibernate的缓存机制一样为了要和数据库保持一致。最近有空了,研究后才发现并不是缓存的原因,而是和对象的状态有关。 首先我们先来了解一下Spring Date JPA: 1、Spring-data-jpa的基本介绍 Spring Data JPA是更大的Spring Data系列的一部分,可以轻松实现基于JPA的存储库。此模块处理对基于JPA的数据访问层的增强支持。它使构建使用数据访问技术的Spring驱动应用程序变得更加容易。 在相当长的一段时间内,实现应用程序的数据访问层一直很麻烦。 必须编写太多样板代码来执行简单查询以及执行分页和审计 。Spring Data

diango中orm的惰性机制

雨燕双飞 提交于 2019-12-03 17:37:34
那么首先要知道什么是ORM 专业化的角度来说:叫对象关系映射(Object-Relation Mapping)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 那具体ORM是什么呢?:(在django中,根据代码中的类自动生成数据库的表也叫--code first)ORM: ORM在面向对象模型与关系模型之间架起桥梁。 通过对象与数据库之间映射的元数据,自动透明地把编译语音中的对象持久化到关系数据库里,对数据库的操作可以转换为对对象的操作 ORM 有下面这些优点。 数据模型都在一个地方定义,更容易更新和维护,也利于重用代码。 ORM 有现成的工具,很多功能都可以自动完成,比如数据消毒、预处理、事务等等。 它迫使你使用 MVC 架构,ORM 就是天然的 Model,最终使代码更清晰。 基于 ORM 的业务代码比较简单,代码量少,语义性好,容易理解。 你不必编写性能不佳的 SQL。 但是,ORM 也有很突出的缺点。 ORM 库不是轻量级工具,需要花很多精力学习和设置。 对于复杂的查询,ORM 要么是无法表达,要么是性能不如原生的 SQL。 ORM 抽象掉了数据库层,开发者无法了解底层的数据库操作,也无法定制一些特殊的 SQL。 Django惰性机制 所谓惰性机制:Publisher.objects.all()或者.filter()等都只是返回了一个QuerySet

Mybaits 源码解析 (七)----- Select 语句的执行过程分析(下篇)(Mapper方法是如何调用到XML中的SQL的?)全网最详细,没有之一

99封情书 提交于 2019-12-03 17:08:26
我们上篇文章讲到了查询方法里面的doQuery方法,这里面就是调用JDBC的API了,其中的逻辑比较复杂,我们这边文章来讲,先看看我们上篇文章分析的地方 SimpleExecutor 1 public <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException { 2 Statement stmt = null; 3 try { 4 Configuration configuration = ms.getConfiguration(); 5 // 创建 StatementHandler 6 StatementHandler handler = configuration.newStatementHandler(wrapper, ms, parameter, rowBounds, resultHandler, boundSql); 7 // 创建 Statement 8 stmt = prepareStatement(handler, ms.getStatementLog()); 9 // 执行查询操作 10 return handler.<E

java-day23

只谈情不闲聊 提交于 2019-12-03 15:15:21
事务的四大特征:   1.原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败。   2.持久性:当事务提交或回滚后,数据库会持久化的保存数据。   3.隔离性:多个事务之间,相互独立。   4.一致性:事务操作前后,数据总量不变。 事务的隔离级别   概念:多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。   存在问题     1.脏读:一个事务,读取到另一个事务中没有提交的数据。     2.不可重复读(虚读):在同一个事务中,两次读取到的数据不一样。     3.幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改。   隔离级别     1.read uncommitted:读未保存       产生问题:脏读、不可重复读、幻读     2.read committed:读已保存  (Oracle)       产生问题:不可重复读、幻读     3.repeatable read:可重复读  (MySQL默认)       产生问题:幻读     4.serializable:串行化       可以解决所有问题     注意:隔离级别从小到大安全性越来越高,但效率越来越低。     数据库查询隔离级别:       select @@tx

什么是ORM

烈酒焚心 提交于 2019-12-03 14:51:08
那么首先要知道什么是ORM 专业化的角度来说:叫对象关系映射(Object-Relation Mapping)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 那具体ORM是什么呢?:(在django中,根据代码中的类自动生成数据库的表也叫--code first)ORM: ORM在面向对象模型与关系模型之间架起桥梁。 通过对象与数据库之间映射的元数据,自动透明地把编译语音中的对象持久化到关系数据库里,对数据库的操作可以转换为对对象的操作 到目前为止,当我们的程序设计到 数据库 相关操作时,我们一般都会这么搞: 先创建数据库,设计表结构和字段,使用列如mysqldb这类的模块来连接数据库, 并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 ( 三层架构详解 ) 简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。 ORM 把数据库映射成对象。 数据库的表(table) --> 类(class) 记录(record,行数据)--> 对象(object) 字段(field)--> 对象的属性(attribute) 举例来说,下面是一行 SQL 语句。 SELECT id, first_name, last_name, phone, birth_date,