> 馆藏中心

为何有些人不喜欢使用 SQL 方言?

来源:cnblogs 编辑:王强

你可以理解为,Hibernate就相当2113于一个翻译5261,配置“方言”选项,就是告诉Hibernate它要说哪4102里的言。是这样的,因为不同1653的数据库,在Sql语句的设计上是存在差异的,就好比不同地方的人说不同的方言。而Hibernate呢,它会所有的“方言”,我们要做的,就是告诉它,我们需要它说哪种“方言”。LZ了了没?,你可以理解为,Hibernate就相当于一2113个5261翻译,配置“方言”选项,就是4102告诉Hibernate它要说哪里的言1653。是这样的,因为不同的数据库,在Sql语句的设计上是存在差异的,就好比不同地方的人说不同的方言。而Hibernate呢,它会所有的“方言”,我们要做的,就是告诉它,我们需要它说哪种“方言”,C3P0:com.mchange.v2.c3p0.ComboPooledDataSource <c3p0-config>  2113<default-config>  <!--当连接池中的连接耗尽的5261时候c3p0一次同时获取4102的连接数。Default: 3 -->  <property name="acquireIncrement">3</property>  <!--定义1653在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->  <property name="acquireRetryAttempts">30</property>  <!--两次连接中间隔时间,单位毫秒。Default: 1000 -->  <property name="acquireRetryDelay">1000</property>  <!--连接关闭时默认将所有未提交的操作回滚。Default: false -->  <property name="autoCommitOnClose">false</property>  <!--c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么   属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试   使用。Default: null-->  <property name="automaticTestTable">Test</property>  <!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效   保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试   获取连接失败后该数据源将申明已断开并永久关闭。Default: false-->  <property name="breakAfterAcquireFailure">false</property>  <!--当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出   SQLException,如设为0则无限期等待。单位毫秒。Default: 0 -->  <property name="checkoutTimeout">100</property>  <!--通过实现ConnectionTester或QueryConnectionTester的类来测试连接。类名需制定全路径。   Default: com.mchange.v2.c3p0.impl.DefaultConnectionTester-->  <property name="connectionTesterClassName"></property>  <!--指定c3p0 libraries的路径,如果(通常都是这样)在本地即可获得那么无需设置,默认null即可   Default: null-->  <property name="factoryClassLocation">null</property>  <!--Strongly disrecommended. Setting this to true may lead to subtle and bizarre bugs.  (文档原文)作者强烈建议不使用的一个属性-->  <property name="forceIgnoreUnresolvedTransactions">false</property>  <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->  <property name="idleConnectionTestPeriod">60</property>  <!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->  <property name="initialPoolSize">3</property>  <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->  <property name="maxIdleTime">60</property>  <!--连接池中保留的最大连接数。Default: 15 -->  <property name="maxPoolSize">15</property>  <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements  属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。   如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->  <property name="maxStatements">100</property>  <!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->  <property name="maxStatementsPerConnection"></property>  <!--c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能   通过多线程实现多个操作同时被执行。Default: 3-->  <property name="numHelperThreads">3</property>  <!--当用户调用getConnection()时使root用户成为去获取连接的用户。主要用于连接池连接非c3p0  的数据源时。Default: null-->  <property name="overrideDefaultUser">root</property>  <!--与overrideDefaultUser参数对应使用的一个参数。Default: null-->  <property name="overrideDefaultPassword">password</property>  <!--密码。Default: null-->  <property name="password"></property>  <!--定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个一显著提高测试速度。注意:   测试的表必须在初始数据源的时候就存在。Default: null-->  <property name="preferredTestQuery">select id from test where id=1</property>  <!--用户修改系统配置参数执行前最多等待300秒。Default: 300 -->  <property name="propertyCycle">300</property>  <!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的   时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable  等方法来提升连接测试的性能。Default: false -->  <property name="testConnectionOnCheckout">false</property>  <!--如果设为true那么在取得连接的同时将校验连接的有效性。Default: false -->  <property name="testConnectionOnCheckin">true</property>  <!--用户名。Default: null-->  <property name="user">root</property>  <!--早期的c3p0版本对JDBC接口采用动态反射代理。在早期版本用途广泛的情况下这个参数允许用户恢复到动态反射代理以解决不稳定的故障。最新的非反射代理更快并且已经开始广泛的被使用,所以这个参数未必有用。现在原先的动态反射与新的非反射代理同时受到支持,但今后可能的版本可能不支持动态反射代理。Default: false。jdbc:mysql://ip地址:3306/数据库名字?useUnicode=true&characterEncoding=utf-82.C3P0连接配置<?xml version='1.0' encoding='UTF-8'?>< !DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">< hibernate-configuration>< session-factory >< !?JDBC驱动程序-->< property name="connection.driver_class">com.mysql.jdbc.Driver</property>< !-- 连接数据库的URL-->< property name="connection.url"> jdbc:mysql://localhost:3306/schoolproject< /property>< property name="connection.useUnicode">true</property>< property name="connection.characterEncoding">UTF-8</property>< !--连接的登录名-->< property name="connection.username">root</property>< !--登录密码--<property name="connection.password"></property>< !-- C3P0连接池设定-->< property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider< /property>< property name="hibernate.c3p0.max_size">20</property>< property name="hibernate.c3p0.min_size">5</property>< property name="hibernate.c3p0.timeout">120</property>< property name="hibernate.c3p0.max_statements">100</property>< property name="hibernate.c3p0.idle_test_period">120</property>< property name="hibernate.c3p0.acquire_increment">2</property>< !--是否将运行期生成的SQL输出到日志以供调试-->< property name="show_sql">true</property>< !--指定连接的语言-->< property name="dialect">org.hibernate.dialect.MySQLDialect</property>< !--映射Student这个资源-->< mapping resource="com/wqbi/model/pojo/student.hbm.xml" />< /session-factory>< /hibernate-configuration> proxool连接池(1) 先写proxool的配置文件,文件名:proxool.xml(一般放在与hibernate.cfg.xml文件在同一个目录中)本例配置的是MYSQL数据库,数据库的名字为schoolproject< ?xml version="1.0" encoding="UTF-8"?><!-- the proxool configuration can be embedded within your own application's.Anything outside the "proxool" tag is ignored. -->< something-else-entirely><proxool><!--连接池的别名--><alias>DBPool</alias>< !--proxool只能管理由自己产生的连接--><driver-url>jdbc:mysql://localhost:3306/schoolproject?useUnicode=true&characterEncoding=UTF8</driver-url><!?JDBC驱动程序--><driver-class>com.mysql.jdbc.Driver</driver-class><driver-properties><property name="user" value="root"/><property name="password" value=""/></driver-properties>< !-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁--><house-keeping-sleep-time>90000</house-keeping-sleep-time>< !-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受--><maximum-new-connections>20</maximum-new-connections>< !-- 最少保持的空闲连接数--><prototype-count>5</prototype-count>< !-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定--><maximum-connection-count>100</maximum-connection-count>< !-- 最小连接数--><minimum-connection-count>10</minimum-connection-count>< /proxool></something-else-entirely> (2)配置hibernate.cfg.xml文件<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configurationPUBLIC "-//Hibernate/Hibernate Configuration DTD//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">< hibernate-configuration>< session-factory >< property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property><property name="hibernate.proxool.pool_alias">DBPool</property><property name="hibernate.proxool.xml">proxoolconf.xml</property>< !--是否将运行期生成的SQL输出到日志以供调试--><property name="show_sql">true</property>< !--指定连接的语言--><property name="dialect">org.hibernate.dialect.MySQLDialect</property>< !--映射Student这个资源--><mapping resource="com/wqbi/model/pojo/student.hbm.xml" />< /session-factory>< /hibernate-configuration> (1) hibernate.connection.provider_class定义Hibernate的连接加载类,这里Proxool连接池是用这个,不同的连接池有不同的加载类,可以查阅Hibernate文档获取相关信息(2) hibernate.proxool.pool_alias这里就是用我们上面提到的连接池的别名(3) hibernate.proxool.xml是向Hibernate声明连接池的配置文件位置,可以用相对或绝对路径,用相对路径时要注意一定在要Path范围内!不然会抛出异常。(4) dialect是声明SQL语句的方言(5) show_sql定义是否显示Hibernate生成的SQL语言,一般在调试阶段设为true,完成后再改成false,这样有利于调试。(6) <mapping >资源文件映射www.179s.com防采集请勿采集本网。

一般来说都是将数据库作为存储和查询工具,很少会有让数据库进行稍微复杂的计算(其实数据库支持各种计算),而是将数据从数据库中查询出来后,在应用层做计算;这样做是出于很多原因的,不仅仅是因为日后数据库迁移方便

所以,普通sql都这样用了,怎么还会使用sql方言呢收获园豆:5

看你的数据库引擎: 如果使用的是:ISAM与MyISAM,那么选择MySQLDialect 如果使用的是:InnoDB,那么选择MySQL5InnoDBDialect

============================================

你的选择是正确的。 大到做好各项工作,中到你参加各类考试,小到将来教育好你的下一代,说好普通话都是非常必要的。 在各类场合,因方言表达不清楚而耽误事甚至损失钱财的事不胜枚举。 一句宁波方言“5日前开始疼痛”,被医生误听为是“5年前开始

但有时候查询完塞在内存,在进行计算,速度比起在数据库用方言解决慢很多

并不是不喜欢说普通话,而是他们从小接触的旁边的人,都是用方言表达,就养成了一种习惯性语言,等来到另一个方言不通用的地方,自然就会学习另外一种普遍通用的话,就是普通话

============================================

你的选择是正确的。 大到做好各项工作,中到你参加各类考试,小到将来教育好你的下一代,说好普通话都是非常必要的。 在各类场合,因方言表达不清楚而耽误事甚至损失钱财的事不胜枚举。 一句宁波方言“5日前开始疼痛”,被医生误听为是“5年前开始

@我问故我在: 如果数据库里面查到要处理的数据有10G,

sql: 数据库的简称 sql方言: 因为不同的数据库,在Sql语句的设计和语句用法上是存在差异的,就好比不同地方的人说不同的方言 分类: 大类分关系型数据库和非关系型数据库

1.使用数据库进行计算后返回结果(注意,这里一般是单机计算)

2.将数据从数据库取回到应用层,在应用层让多台机器并行计算;

这两种方式,你绝得哪种快呢?

============================================

你的选择是正确的。 大到做好各项工作,中到你参加各类考试,小到将来教育好你的下一代,说好普通话都是非常必要的。 在各类场合,因方言表达不清楚而耽误事甚至损失钱财的事不胜枚举。 一句宁波方言“5日前开始疼痛”,被医生误听为是“5年前开始

@寻觅beyond:这样的框架设计不就要牵扯到分布式

这对一般项目来说,是否过度设计?

============================================

你的选择是正确的。 大到做好各项工作,中到你参加各类考试,小到将来教育好你的下一代,说好普通话都是非常必要的。 在各类场合,因方言表达不清楚而耽误事甚至损失钱财的事不胜枚举。 一句宁波方言“5日前开始疼痛”,被医生误听为是“5年前开始

@我问故我在: 每种设计,都是在某个设计的前提下进行改进,也就是说每种设计也都有优缺点,这是句废话,但也没毛病。

且不提框架设计,你就说,你用方言sql的一个功能,就好比用普通sql写了一个函数或者过程,这样在后期的维护过程以及排查问题时都会有影响。数据库换的几率不高, 能简单解决的就不要查询出来手工搞,原因

1.SQL的可读性比大量的FOR,IF好很多,且易于维护。

2.数据库的性能比自己手撸的性能好,且能自动处理缓存。

多台机器并行计算严重降低吞吐量,实际使用中一般不会这样做。收获园豆:5

有的人跟从小养成的习惯有关,没有说方言的习惯,而且自己还听不懂方言,他们会觉得用方言去交流不太尊重和礼貌,有时候沟通某些问题的时候用方言还是很难沟通的,建议多说普通话,方言虽然很有地方特2113色,也是特别宝贵的人5261文文化,但是现在的4102社会人员都来自全国各地,用方言很多人1653是听不懂的,在正常交流中没办法使用方言,如果就你自己一人用方言侃侃而谈,其他人一脸蒙圈,那气氛无比尴尬,在听不懂的人面前还一直用方言讲话,给听众一种被忽视的感觉,所以会有很多人不喜欢,我认为现2113在方言的消逝就两个原因,一个强5261力推普,另4102一个是人口流动。如果后者会导致方1653言慢性死亡,前面一个绝对就是拿把刀逼着说你现在去死吧。我重点说说推普。我们县客运中心写的什么标语知道吗?语同音则九州为一体!我是很想不明白,中国历史分分合合什么时候是要方言背锅的,南方人什么时候因为说方言要搞独立了。倒是边远地区一些人汉语都不说不去管了。国家出于稳定考虑想搞统战我也理解,倒是政策制定的时候能不能过过脑子别一刀切啊!小学还有推普委员,抓到谁不说普通话就去打小报告,这样方言在下一代根本没得基础了,下一代觉得方言不文明,方言土也就不奇怪了。方言亡了,地方传统文化就倒台一半了。不说别的,什么越剧昆曲这样的世界文化遗产不都得完蛋?想想就心塞,之所以不喜欢说方言,因为方言带着一股家乡呛,方言不是说每个人都会懂得,像我在我家这边,有一些方言都是一些老长辈才懂,说出来我们都不懂,沟通起来有时候就会不方便了,这就是我的观点!,听方言就像听外国人说话,听不懂,有些虽然听得见但是还是不懂大概的意思, 所以很多人都讨厌方言,要取消方言估计还要等几十年后内容来自www.179s.com请勿采集。

本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。本文《为何有些人不喜欢使用 SQL 方言?》转载自cnblogs,版权归原作者所有,若侵权请联系:E-MAIL:513175919@qq.com
违法违规信息请立即联系本网可获得现金奖励,TEL:1-8-2-1-0-2-3-3-3-8-1(电话仅供违法违规信息举报,侵权类信息请EMAIL。)

www.179s.com false 互联网 http://www.179s.com/jsblogcnk/po/pokahk.html report 13629 一般来说都是将数据库作为存储和查询工具,很少会有让数据库进行稍微复杂的计算(其实数据库支持各种计算),而是将数据从数据库中查询出来后,在应用层做计算;这样做是出于很多原因的,不仅仅是因为日后数据库迁移方便所以,普通sql都这样用了,怎么还会使用sql方言呢收获园豆:5============================================但有时候查询完塞在内存,在进行计算,速度比起在数据库用方言解决慢很多==============================

热门图片

经济金融企业管理法律法规社会民生科学教育降生活体育运动文化艺术电子数码电脑网络娱乐休闲行政地区心理分析医疗卫生