• spring 数据库


    引用:http://hi.baidu.com/y0h0001/item/3e9fbc97a1a93f14336eebef

    编写获取数据库工具类DBUtil.java
        在这个类中,从Spring框架的上下文环境中根据名字rptds,得到一个由Spring框架装配好的DataSource对象,然后使用DataSource对象得到一个与数据库的连接。

        package ch16;
    //    import javax.naming.*;
    //    import org.apache.commons.logging.Log;
    //    import org.apache.commons.logging.LogFactory;
        import javax.sql.DataSource;
        import java.sql.*;
        public final class DBUtil {
            // private static final Log log=LogFactory.getLog(DBUtil.class);
            static DataSource dataSource=null;

            //得到一个数据源对象
            public static DataSource getDataSource() {
                try {
                    dataSource=(DataSource) ContextHelper.getContext().getBean("rptds");//得到一个DataSource对象
                }
                catch(Exception e) {
                    // log.info("获取数据源出现错误,检查Spring数据源配置!");
                }
                return dataSource;
            }
            public static Connection makeConnection() {
                Connection conn=null;
                try {
                    if (dataSource==null)
                        dataSource=getDataSource();
                    if (dataSource!=null)
                        conn=dataSource.getConnection();
                }
                catch(SQLException e) {
                    // log.info("通过数据源获得连接发生错误!");
                }
                return conn;
            }
            public static void closeConnection(Connection con) {
                try {
                    if (con!=null)
                        con.close();
                }
                catch(SQLException e) {
                    // log.info("关闭数据库连接发生错误!");
                }
            }
        }

        在程序中,通过dataSource=(DataSource)ContextHelper.getContext().getBean("rptds");语句根据名字rptds自动获得一个DriverManagerDataSource类型的DataSource对象,利用该对象获得与数据库的连接。

        对DBUtil.java进行测试的JSP页面:
            <%@ page import="ch16.*"%>
            数据库连接:<%= DBUtil.makeConnection() %>

    16.4.6 编写测试页面TestSpring.jsp
        <%@ page import="ch16.*"%>
        <%@ page import="java.sql.*"%>
        <%
            Connection con=null;
            try {
                con=DBUtil.makeConnection();
                String testSql="select * from t_user";
                Statement stmt=null;
                stmt=con.createStatement();
                ResultSet rs=stmt.executeQuery(testSql);
                out.print("<table border='1'>");
                while(rs.next()) {
                    String firstname=rs.getString("firstname");
                    String lastname=rs.getString("lastname");
                    out.println("<tr><td>"+firstname+"</td><td>"+lastname+"</td></tr>");
                }
                out.println("</table>");
            }
            catch(Exception e) {
                out.print(e);
            }
            finally{
                DBUtil.closeConnection(con);
            }
        %>

        这个JSP页面使用DBUtil类获得和关闭与数据库的连接,然后查询数据库中的信息。各个部分的关系如下:
                                                            
        JSP页面 <-----连接--- DBUtil <---DataSource--- ContextHelper <---配置--- DBContext.xml
            +
            +-------------根据连接查询------>数据库中的t-user表
                                                    +
            +<------------ 查询结果-----------------+

    16.4.7 数据库连接池配置
        Spring框架提供的的DriverManagerDataSource类本身并没有提供数据库连接池的功能,因此只能用来做简单的测试,并不适合在真正的Web项目中使用。可以考虑用比较成熟的数据库连接池来替换它,比如Apache 的 DBCP连接池,如果要替换,则需要加载Apache的DBCP。

        Apache提供的BasicDataSource类也实现了DataSource接口,并且提供了数据库连接池功能,该类可以根据在Spring的组装配置文件定义的<bean>得到一个DataSource对象。

            <bean id="rptds" destroy-method="close" class=
                                "org.apache.commons.dbcp.BasicDataSource" >
                <property name="driverClassName">
                    <value>com.mysql.jdbc.Driver</value>
                </property>
                <property name="url">
                    <value>jdbc:mysql://localhost:3306/st</value>
                </property>
                <property name="username">
                    <value>root</value>
                </property>
                <property name="password">
                    <value>zym</value>
                </property>
            </bean>

        现在所使用的是org.apache.commons.dbcp.BasicDataSource作为注入的DataSource实例,为了使用DBCP,需要commons-dbcp.jar、commons-pool.jar、commons-collections.jar。注意:在dataSource上设置了destroy-method属性,如此可以确保BeanFactory在关闭时也一并关闭BasicDataSource实例。

    16.4.8 使用JNDI数据源
        Spring框架提供的JndiObjectFactoryBean也类实现了DataSource接口,如果Servlet容器中定义了JNDI的DataSource,该类可以根据JNDI数据源配置来得到一个DataSource对象。

            <bean id="rptds" class="org.springframework.jndi.JndiObjectFactoryBean" >
                <property name="jndiName">
                    <value>java:comp/env/jdbc/spring</value>
                </property>
            </bean>

        为了使用org.springframework.jndi.JndiObjectFactoryBean类,需要添加spring-context.jar,jndiName实际上要根据所设定的JNDI名称查询。

    16.4.9 在JSP页面中得到Spring装配的对象
    try {
        ApplicationContext context=WebApplicationContextUtils.
                                                getWebApplicationContext(application);
        Student stu=(Student)context.getBean("student");
    }
    catch(Exception e) {
    }

    16.5 Spring与Struts2的整合
        在Spring中装配好Struts2所需要使用的Action组件,在Struts2中直接使用由Spring装配好的Action组件,这个整合基本上不需要进行配置,只需要在Struts2的<action>元素的class属性中直接使用Spring中配置好的Bean的名字。

        例题:Spring与Struts2的整合

    16.6 Spring与Hibernate3的整合
        Spring与Hibernate3的整合需要使用Spring提供的HibernateTemplate类来完成,在Spring框架的装配文件中,首先配置数据源Bean,然后配置数据源工厂Bean,并且注入数据源Bean,然后配置Spring提供的HibernateTemplate类,并且注入数据源工厂Bean,再配置用户编写的DAO,并且将HibernateTemplate实例注入到DAO中,这样,在页面中就可以获得DAO实例,并且调用DAO实例的方法通过Hibernate完成对数据库的操作。

  • 相关阅读:
    写一点gil锁吧,其实真的我感觉没啥关系。
    《Effective Python》59个有效方法(今日到25)
    《Python学习笔记本》第五章 迭代器 笔记以及摘要(完结)
    《Python学习笔记本》第四章 函数 笔记以及摘要(完结)
    《Python学习笔记本》第三章 表达式 笔记以及摘要(完结)
    java 之冒泡排序
    Apache Tomcat 之路(三 部署多个应用)
    Apache Tomcat 之路(二 部署web 应用程序)
    Apache Tomcat 之路(一 基本概念)
    移动端 H5 拍照 从手机选择图片,移动端预览,图片压缩,图片预览,再上传服务器
  • 原文地址:https://www.cnblogs.com/sode/p/2690710.html
Copyright © 2020-2023  润新知