• Spring 对数据库的支持


    DAO

      DAO是用于访问数据的对象,大多数时候,我们将数据保存在数据库中,但这不是唯一选择。

      用户也可以将数据保存在数据文件或者LDAP中

      DAO屏蔽了数据操作的具体细节

    Spring本质上希望能够以统一的方式整合底层持久化技术,以统一的方式进行调用及事务管理,避免让具体的实现侵入业务代码中。

    由于每个持久化实现技术都有各自的异常体系,所以Spring提供了统一的异常体系

    统一数据访问模板

    Spring为不同持久化技术提供了对应的模板类

     

    如果直接使用模板类,一般需要在DAO中定义一个模板对象,并提供数据资源;或者在Spring配置文件中为模板类注入数据源,这样DAO中的模板对象就可以直接使用了。但是创建一个模板对象还是免不了的

    举例:

        <!--注解注入-->
        <context:annotation-config/>
        <context:property-placeholder location="classpath:jdbc.properties"/>
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="${driverClassName}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
        </bean>
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSource"/>
        </bean>
        //Spring的JDBC模板
        @Resource
        private JdbcTemplate jdbcTemplate;
        /**
         * 获取用户数目
         *
         * @param userName 用户名
         * @param password 密码
         * @return 用户数
         */
        @Override
        public int getMatchCount(String userName, String password) {
            String sqlStr = " SELECT count(1) FROM t_user " +
                    " WHERE user_name = ? AND password = ? ";
            int i = jdbcTemplate.queryForInt(sqlStr,new Object[]{userName,password}, new int[]{Types.VARCHAR,Types.VARCHAR});
            return i;
        }

    Spring为每一个持久化技术提供了支持类,其中已经为我们完成了这样的功能,也就是说只要继承这些支持类,通过调用其中的方法就能够直接对数据库进行操作

    这些支持类都是abstract的,目的是希望被继承使用,而非直接使用。

    如何使用DAO支持类?在Spring配置文件中配置好对应的模板类,DAO直接继承DAO支持类,通过getXXX方法获取模板,就可以操作数据库了


    数据源

    DBCP数据源

    引入属性文件

    <context:property-placeholder location="classpath:jdbc.properties"/>
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="${driverClassName}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
        </bean>

    所需jar包:commons-dbcp.jar  commons-pool.jar

    C3P0数据源

        <bean id="dataSource" class="org.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
            <property name="driverClass" value="${driverClassName}"/>
            <property name="jdbcUrl" value="${url}"/>
            <property name="user" value="${username}"/>
            <property name="password" value="${password}"/>
        </bean>

    所需jar包:c3p0,jar  一般在lib目录下与Hibernate一起发布

    C3P0的配置项比较多,使用起来是一样的

    获取JNDI数据源

      如果应用配置在高性能的应用服务器上(WebLogic、WebSphere等),我们更希望使用服务器本身提供的数据源

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

    Spring提供了jee命名空间

    <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/bbt"/>

    这样更省略了

    在web.xml中增加配置

      <resource-ref>
        <res-ref-name>jdbc/bbt</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
      </resource-ref>

    在服务器中增加数据源配置文件(以tomcat为例)

    bbt.xml

    <Context> 
        <Resource name="jdbc/bbt" auth="Container" 
        type="javax.sql.DataSource"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/demo"
        username="root"
        password="123"
        maxActive="50"
        maxIdle="30"
        maxWait="10000" />
    </Context>
  • 相关阅读:
    [已解决] MAVEN安装代码到本地库,安装jar, source, javadoc的方式
    [已解决]Eclipse 插件Maven在使用 add dependency,找不到包,解决办法
    [已解决] windows 下 git 免输密码
    [已解决] windows 80端口被占用
    [已解决]Tomcat启动报 java.net.BindException: Address already in use: JVM_Bind
    [已解决] java.net.InetAddress.getHostName() 阻塞问题
    [已解决] 日常开发中禁用Tomcat自动重启
    [已解决] MyBatis 中bind用法
    [转]SOCKET通信中TCP、UDP数据包大小的确定
    使用beautifulsoup与requests爬取数据
  • 原文地址:https://www.cnblogs.com/sherrykid/p/4604361.html
Copyright © 2020-2023  润新知