spring 数据库

简介: 引用:http://hi.baidu.com/y0h0001/item/3e9fbc97a1a93f14336eebef 编写获取数据库工具类DBUtil.java    在这个类中,从Spring框架的上下文环境中根据名字rptds,得到一个由Spring框架装配好的DataSource对象,然后使用DataSource对象得到一个与数据库的连接。

引用: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完成对数据库的操作。

相关文章
|
2月前
|
安全 Java 数据库
后端进阶之路——万字总结Spring Security与数据库集成实践(五)
后端进阶之路——万字总结Spring Security与数据库集成实践(五)
|
4月前
|
SQL 监控 druid
p6spy【SpringBoot集成】使用p6spy-spring-boot-starter集成p6spy监控数据库(配置方法举例)
p6spy【SpringBoot集成】使用p6spy-spring-boot-starter集成p6spy监控数据库(配置方法举例)
189 0
|
5月前
|
存储 Java 数据库
java spring boot 数据库密码解密
java spring boot 数据库密码解密
|
5月前
|
存储 Java 数据库连接
Spring Boot 配置主从数据库实现读写分离
Spring Boot 配置主从数据库实现读写分离
178 0
|
3月前
|
SQL Java 数据库连接
(数据库链接池)spring内容复习7月16日笔记
(数据库链接池)spring内容复习7月16日笔记
15 0
|
3月前
|
Java 数据库 Nacos
spring-gateway基于数据库 + nacos 的动态路由
spring-gateway基于数据库 + nacos 的动态路由
73 0
|
3月前
|
前端开发 JavaScript Java
基于spring+jsp+mysql实现的Java web论坛系统【源码+数据库+指导运行】
基于spring+jsp+mysql实现的Java web论坛系统【源码+数据库+指导运行】
|
4月前
|
监控 druid Java
SpringBoot 使用【druid-spring-boot-starter】集成 druid 监控数据库
SpringBoot 使用【druid-spring-boot-starter】集成 druid 监控数据库
65 0
|
4月前
|
Java 数据库连接 数据库
Spring Boot整合MyBatis操作mysql数据库实战(附源码 超详细)
Spring Boot整合MyBatis操作mysql数据库实战(附源码 超详细)
159 0
|
4月前
|
Java 关系型数据库 MySQL
Spring Boot使用JdbcTemplate操作mysql数据库实战(附源码 超详细)
Spring Boot使用JdbcTemplate操作mysql数据库实战(附源码 超详细)
40 0