java web项目中hibernate +spring +tomcat如何实现多数据库

java web项目中hibernate +spring +tomcat如何实现多数据库,第1张

一下方法只能是同一种数据库, 因为数据库不同的话,数据库方言也就不同,这个暂时解决不了

applicationContextxml:

<bean id="parentDataSource" class="orgapachecommonsdbcpBasicDataSource" destroy-method="close">

<!-- 设置连接池初始值 -->

<property name="initialSize" value="5" />

<!-- 设置连接池最大值 -->

<property name="maxActive" value="5" />

<!-- 设置连接池最小空闲值 -->

<property name="minIdle" value="2" />

<!-- 设置连接池最大空闲值 -->

<property name="maxIdle" value="5" />

</bean>

<bean id="sessionFactory" class="orgspringframeworkormhibernate3annotationAnnotationSessionFactoryBean">

<property name="dataSource" ref="dataSource"/>

<property name="hibernateProperties">

<value>

<!-- 设置数据库方言 -->

hibernatedialect=orghibernatedialectOracle10gDialect

<!-- 输出SQL语句到控制台 -->

hibernateshow_sql=true

<!-- 格式化输出到控制台的SQL语句 -->

hibernateformat_sql=true

</value>

</property>

<property name="packagesToScan" value="comzxwlinkbusinessentity"></property>

</bean>

<bean id="dataSource" class="comzxwlinkcommonsdataDynamicDataSource">

<property name="targetDataSources">

<map key-type="javalangString">

<entry key="zxw" value-ref="zxw_DataSource"/>

<entry key="new_back" value-ref="new_back_DataSource"/>

<!--更多的数据源,根据下面的配置文件再写一个datasource 并且在这里配置entry -->

</map>

</property>

<property name="defaultTargetDataSource" ref="zxw_DataSource"/>

</bean>

<bean id="zxw_DataSource" parent="parentDataSource">

<!-- 设置JDBC驱动名称 -->

<property name="driverClassName" value="oraclejdbcdriverOracleDriver" />

<!-- 设置JDBC连接URL -->

<property name="url" value="jdbc:oracle:thin:@148202017:1521:oradb" />

<!-- 设置数据库用户名 -->

<property name="username" value="zhou" />

<!-- 设置数据库密码 -->

<property name="password" value="zhou" />

</bean>

<!-- #################### 新备份 ################ -->

<bean id="new_back_DataSource" parent="parentDataSource">

<!-- 设置JDBC驱动名称 -->

<property name="driverClassName" value="oraclejdbcdriverOracleDriver" />

<!-- 设置JDBC连接URL -->

<property name="url" value="jdbc:oracle:thin:@148202015:1521:ora10" />

<!-- 设置数据库用户名 -->

<property name="username" value="report" />

<!-- 设置数据库密码 -->

<property name="password" value="report" />

</bean>

<!-- #################### 新备份 ################ -->

DynamicDataSource java:

public class DynamicDataSource extends AbstractRoutingDataSource {

protected Object determineCurrentLookupKey() {

// TODO Auto-generated method stub

return CustomerContextHoldergetCustomerType();

}

}

CustomerContextHolder java:

public class CustomerContextHolder {

private static final ThreadLocal contextHolder =

new ThreadLocal();

public static void setCustomerType(String customerType) {

contextHolderset(customerType);

}

public static String getCustomerType() {

return (String) contextHolderget();

}

public static void clearCustomerType() {

contextHolderremove();

}

}

action中调用

public class ZzhAction {

@Resource

private ZzhService zzhService;

@RequestMapping("/zzh/testdo")

public void test(){

List<Zzh> zzhs=zzhServicegetAll();

Systemoutprintln(zzhssize());

//设置数据源, 参数为配置文件中的

//<entry key="new_back" value-ref="new_back_DataSource"/> 的key

CustomerContextHoldersetCustomerType("new_back");

}

}

之前把框架、Lucene等学习了之后,打算做个简易版本的百度知道。表都设计好了,框架搭建好了,最后由于一些原因搁置了。你可以考虑一下,做个试试,自己学会分析,如何去设计表,以及各个功能模块的实现,可以试试用powerdesigner设计数据库,很强大。

当然,首先要安装有JDK(一般是JDK15X)。然后安装MySQL,这些都比较简单,具体过程就不说了。配置好这两个环境后,下载JDBC

驱动mysql-connector-java-505zip(这个是最新版的)。然后将其解压缩到任一目录。我是解压到D盘,然后将其目录下的

mysql-connector-java-505-binjar加到classpath里,

具体如下:“我的电脑”-> “属性” -> “高级” ->

“环境变量”,在系统变量那里编辑classpath,将D:\mysql-connector-java-505\mysql-

connector-java-505-binjar加到最后,在加这个字符串前要加“;”,以与前一个classpath区分开。然后确定。

环境配置好了,很简单。现在,先配置Java连接MySQL,设其用户名为“root”,密码为“root”。在命令行或用一个SQL的前端软件创建Database。

我是用SQLyog的前端软件来创建Database的。

先创建数据库:

CREATE DATABASE SCUTCS;

接着,创建表:

CREATE TABLE STUDENT ( SNO CHAR(7) NOT NULL, SNAME VARCHAR(8) NOT NULL, SEX CHAR(2) NOT NULL, BDATE DATE NOT NULL, HEIGHT DEC(5,2) DEFAULT 00000, PRIMARY KEY(SNO) );

然后插入数据,可以用SQL语句insert into <表名> values (value1, value2, );

也可以用SQLyog来 *** 作

好了,创建好了。

下面,我们来编写java文件来演示一下如何访问Java连接MySQL数据库。

import javasql; public class JDBCTest { public static void main(String[] args){

驱动程序名

String driver = "commysqljdbcDriver";

// URL指向要访问的数据库名scutcs

String url = "jdbc:mysql://127001:3306/scutcs";

// MySQL配置时的用户名

String user = "root";

// Java连接MySQL配置时的密码

String password = "root";

try {

// 加载驱动程序

ClassforName(driver);

// 连续数据库

Connection conn = DriverManagergetConnection(url, user, password);

if(!connisClosed())

Systemoutprintln("Succeeded connecting to the Database!");

// statement用来执行SQL语句

Statement statement = conncreateStatement();

// 要执行的SQL语句

String sql = "select from student";

结果集

ResultSet rs = statementexecuteQuery(sql); Systemoutprintln("-----------------"); Systemoutprintln("执行结果如下所示:"); Systemoutprintln("-----------------"); Systemoutprintln(" 学号" + "\t" + " 姓名"); Systemoutprintln("-----------------"); String name = null; while(rsnext()) {

选择sname这列数据

name = rsgetString("sname");

// 首先使用ISO-8859-1字符集将name解码为字节序列并将结果存储新的字节数组中。

// 然后使用GB2312字符集解码指定的字节数组

name = new String(namegetBytes("ISO-8859-1"),"GB2312");

// 输出结果

Systemoutprintln(rsgetString("sno") + "\t" + name); } rsclose(); connclose(); } catch(ClassNotFoundException e) { Systemoutprintln("Sorry,can`t find the Driver!"); eprintStackTrace(); } catch(SQLException e) { eprintStackTrace(); } catch(Exception e) { eprintStackTrace(); } } }

接下来我们运行一下看下效果:

D:\testjdbc>javac JDBCTestjava

D:\testjdbc>java JDBCTest

Succeeded connecting to the Database!

现在市场上的oa基本上可归结为两大阵营,即php阵营和java阵营。但对接触oa不久的用户来说,看到的往往只是它们的表相,只是明显的价格差异,却很难看出它们之间的实际差异。其实,PHP+MYSQL不值钱不仅仅局限于oa软件,而是整体上PHP+MYSQL开发的软件都不如java开发的软件值钱。为什么PHP+MYSQL的OA为什么不值钱呢首先得明白php和java之间的差异才行。

1、系统的技术架构比较

分层是将系统进行有效组织的方式,分而治之的思想是计算机领域中非常重要的思想。在好的分层思想引导下,便能实现“高内聚、低耦合”,也能将具体的问题割裂开来,易于控制、易于延展,更易于分配资源。PHP只能实现简单的分布式两层或三层的架构,而JAVA在这方面就十分强大,可以实现多层的网络架构。运用MVC的设计模式,可使oa系统具有更加高效、合理的系统架构。技术架构的落后,使运用php编写的oa软件系统先天不足,而后天又无法补足其先天上的劣势。使得系统在可拓展性、需求应变性上与JAVA编写的oa软件系统的差距越来越大。架构的差距,注定了php做的oa充其量是个小家碧玉,始终无法和java这种大家闺秀同台竞技。

2、数据库访问比较

PHP可编译成具有与许多数据库相连接的函数。将自己编写外围的函数去间接存取数据库。通过这样的途径当更换使用的数据库时,可以轻松地修改编码以适应这样的变化。但PHP提供的数据库接口支持彼此不统一,比如对Oracle,MySQL,Sybase的接口,彼此都不一样。由于PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。

而Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库,访问数据库的接口比较统一。如果同样是将开发的web应用从MYSQL数据数转到ORACLE数据,PHP需要做大量的修改工作,而且比较繁琐。但JAVA开发的便只需要很少的更改便能实现。

数据库访问方式的差异,奠定了php开发出的oa和java开发出来的oa是马车和火车的差距,前者只能亦步亦趋而且额度有限,后者却是工业化的结晶,不仅能够包容万物而且速度上稳步提升。

3、安全性对比

在同是开源和跨平台的java面前,php丢掉了很多的优势。在代码的安全性上尤为突出。php的开发程序在别人拿到代码后,可以很容易的进行修改。而java开发的程序由于无法看到完整的源代码,只能看到一些编译好的类文件,所以安全性较高。加之系统架构的优势,在安全性上php和java是相去甚远。

如果非要将php和java在安全性上做个比较的话,同一个小偷光顾php那是随便拿来随便改,想拿什么拿什么,拿的高兴还能大笔一辉某某到此一游。而光顾java的时候,便会发现警察把守,内设自动报警装置,即便突破重重阻扰后进入居室。那值钱的东西都放在加密后的保险柜中,只能望洋兴叹、铩羽而归。

4、前瞻性和拓展性

从整体来说,php适用于中小型系统,而java适用于大型系统。Php能够将单一的事件做好,但却不适合完成集成度较高的多项并发事件。为什么说php适合中小型系统而不适合做大系统呢

首先,php缺乏多层结构支持。而对于大型的系统负荷站点,只能采用分布计算。将数据库、应用逻辑层和表示逻辑层彼此分开,并将同层的根据流量分开,组成二维数组。而php恰恰缺乏这种支持。

其次,PHP提供的数据库接口不统一,要将多个不同的数据库数据统一需要花费很大的力气。而JAVA则没有这种缺陷,可通过SUNJava的JavaClass和EJB获得规模支持,通过EJB/CORBA以及众多厂商的ApplicationServer获得结构支持。如IBM的E-business,它的核心是采用JSP/Servlet的WebSphere,是通过CGI来提供支持的。

如果将Php比作将才,具备独挡一方的能力。那么java便是帅才,具有较好的前瞻性和拓展性,整体布局和协同能力强。能够指挥千军万马,最后逐鹿中原。

5、开发成本比较

既然php在诸多方面都不如java优异,那么php开发出的oa产品何以与java产品竞争呢在于Php阵营普遍走的是低端路线,而java阵营走的是中高端路线。两者之间交的区域较小。

软件价格的高低很大程度上和自身成本和功能相挂钩。php的入门门槛较低,绝大多数学过c的程序员都很容易转型为php程序员,这使得php程序员的泛滥成灾的同时,低成本的php软件产品也层出不穷。以PHP最经典的组合PHP+MySQL+Apache为例,由于所有软件都是开源免费的,所以投入并不高。

而java开发需要特定的环境,成长为一个合格的java程序员需要一定的时间,java程序员的成本也是php成本的几倍。Java的web应用服务器免费的有Tomcat、JBoss等,而要想具有很好的商业化服务便必须选用WebSphere和Weblogic。这其中投入的成本无形中便超是php成本的N倍。所以,java开发oa的成本要远远高于php开发出来的同类软件产品。但也正由于java开发的成本较高,很难实现抄袭和短期内逾越的可能,也使得java用开发出的产品门槛更高。

不怕不识货,就怕货比货。Php开发出来的产品也能用,但是和java开出的同类产品是没法比较的。正因为php开发的产品整体性能和java开发的相去甚远,所以php运用低成本的低价优势和同类的java产品抗争,以价格落差来平衡购买者的心态。所以,PHP+MYSQL的OA不值钱也就不足为怪了

第二种

比较PHP和JSP这两个web开发技术,在目前的情况是其实是比较PHP和Java的Web开发。以下是我就几个主要方面进行的比较:

一、语言比较

Php是解释执行的服务器脚本语言,首先php有简单容易上手的特点。语法和c语言比较象,所以学过c语言的程序员可以很快的熟悉php的开发。而java需要先学好java的语法和熟悉一些核心的类库,懂得面向对象的程序设计方法。所以java不如php好学。

Java首先要编译成字节码class文件,然后在java虚拟机上解释执行。Java的web开发首先最容易想到的就是JSP(现在已经到JSP20),原来的java的web开发都是用servlet来实现的,用servlet来开发需要程序员在java的源文件中嵌入大量的html代码。所以后来就出现了JSP,JSP可以方便的嵌入到html文件当中,其实jsp文件在服务器上执行的时候首先会被应用服务器转换成servlet,然后再编译执行。Jsp可以通过servlet和JavaBean的支持产生强大的功能。JavaBean是一种可复用的、跨平台的软件组件。使用javabean可以方便的实现java代码和html的分离,能够增强系统的功能和软件的复用性。

Java的web开发属于SUN公司定义的J2EE其中的规范。而且在J2EE中包括了java的web开发的所有方面,如:JSP、Servlet、JDBC、JNDI、JAVABEAN、EJB等等。J2EE就特别适合于做大型的企业级的应用。

二、数据库访问比较

Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库。访问数据库的接口比较统一。

PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。例如:用Java开发的web应用从MySQL数据库转到Oracle数据库只需要做很少的修改。而PHP则需要做大量的修改工作。

三、系统设计架构比较

采用Java的web开发技术,需要使用的是面向对象的系统设计方法,而PHP还是采用面向过程的开发方法。所以用Java进行开发前期需要做大量的系统分析和设计的工作。

四、跨平台性

Java和PHP都有很好的跨平台的特性。几乎都可以在不作任何修改的情况下运行在Linux或者Windows等不同的 *** 作系统上。

五、开发成本比较

PHP最经典的组合就是:PHP+MySQL+Apache。非常适合开发中小型的web应用,开发的速度比较快。而且所有的软件都是开源免费的,可以减少投入。

Java的web应用服务器有免费Tomcat、JBoss等,如果需要更好的商业化的服务有:WebSphere和Weblogic。

六、分布式多层架构比较

PHP只能实现简单的分布式两层或三层的架构,而JAVA在这方面就比较强大,可以实现多层的网络架构。数据库层(持久化层)、应用(业务)逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。例如Struts就是利用java的web开发技术实现了MVC的设计模式,而在业务逻辑层也有Spring框架,数据库持久化层有Hibernate等框架。这些框架可以方便开发者高效、合理、科学得架构多层的商业应用。

下面简要的说一下Struts,它实质上是在JSPModel2的基础上实现的一个MVC(Model、View、Controler)框架。JSPModel2体系结构是一种联合使用JSP与Servlet来提供动态内容的方法。在Struts框架中,模型由实现业务逻辑的JavaBean或EJB组件构成,控制器由Servlet实现的,视图由一组JSP文件组成。采用Struts可以明确角色的定义和开发者与网页设计者的分工。而且项目越复杂,其优势越明显。

七、源代码安全

PHP开发的程序的源代码都是公开的,他人拿到php开发的程序后都可以进行修改。

Java开发的程序,最后用户拿到的是只是一些编译好的class类,无法看到完整的源代码,安全性高。

八、性能比较

有人做过试验,对这两种种语言分别做回圈性能测试及存取Oracle数据库测试。

在循环性能测试中,JSP只用了令人吃惊的四秒钟就结束了20000*20000的回圈。而PHP测试的是2000*2000循环(少一个数量级),却分别用了63秒。

数据库测试中,二者分别对Oracle8进行1000次Insert,Update,Select和Delete:JSP需要13秒,PHP需要69秒。

表格1PHP与Java的比较

PHPJAVA

可复用性低高

开发速度快慢

易维护性差优

可移植性优-Linux、Windows、Unix等

安全性低高

开发费用低高

多层架构差优

数据库访问接口不统一接口统一

可扩展性差优

面向对象差优

综上PHP适合于快速开发,中小型应用系统,开发成本低,能够对变动的需求作出快速的反应。而Java适合于开发大型的应用系统,应用的前景比较广阔,系统易维护、可复用性较好。还有,同样功能的系统用Java开发的系统要比PHP开发的系统的价格要高

String sql = "select  from reader where readerId= and readerPwd=";

PreparedStatement pstmt = connprepareStatement(sql);

pstmtsetString(1,user);

pstmtsetString(2,pass);

ResultSet rs = pstmtexecuteQuery();

if(rsnext()){

flag = true;

}

您的这一块改一下吧,改为这样的:

String sql = "select count() from reader where readerId= and readerPwd=";

PreparedStatement pstmt = connprepareStatement(sql);

pstmtsetString(1,user);

pstmtsetString(2,pass);

ResultSet rs = pstmtexecuteQuery();

rsnext();

if(rsgetInt()!=0){

flag = true;

}

下载一个 Navicat for MySQL,这是个可视化的Mysql客户端。

配置mysql好服务器连接后

1把文件扩展名改为sql。右击Navicat for MySQL工具左侧连接,选中运行批次任务,找到creatsql文件,点开始。 或者你在cmd中运行mysql客户端,txt中的东西复制进去执行。

2,一般一个文件是一个项目的数据库吧? 如果他放在一个里面了, 那没办法,只能手动去挑。或者都创建,没害处。

3,右击Navicat for MySQL工具左侧连接中你要导出的数据库,转存sql文件。

以上就是关于java web项目中hibernate +spring +tomcat如何实现多数据库全部的内容,包括:java web项目中hibernate +spring +tomcat如何实现多数据库、想做个java web项目练练手,谁能给我一个需求分析,最好有设计好的数据库的,想用三大框架做。、javaweb怎么连接mysql数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9511165.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存