Spring对数据库数据的访问

a.Spring对数据库访问支持

    在数据库数据的访问方面,Spring本质上希望以统一的方式整合底层的持久化技术,以统一的方式进行调用以及事务管理, 避免让具体的实现侵入到业务层的代码中。Spring提供了统一的异常体系,使不同异常体系的阻抗得以消除;Spring为支持各种持久化技术都提供了简化操作的模版和回调,如下:

145321_mqTD_3291001.png

    而所有的持久化技术都需要数据源的支持,需要在Spring核心配置文件中配置。Spring可以通过Apache的1. 使用DBCP配置数据源,如下:

    <bean id="dataSource"

               class="org.apache.commons.dbcp.BasicDataSource" destory-method="close"

               p:driverClassName="com.mysql.jdbc.Driver"

               p:url="jdbc:mysql://localhost:3309/sampledb"

               p:username="root"

               p:password="1234"/>

2.获取JNDI数据源,如下:

    如果应用配置在高性能服务器上,可以使用应用本身提供的数据源。下面是个简单的配置:

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

    通过jndiName指定引用的JNDI数据源名称。

b.Spring配置文件中配置Dao的4个步骤:

1.定义DataSource

2.定义JdbcTemplate

3.声明一个抽象的<bean>,以便Dao使用JdbcTemplate的配置

4.配置具体的Dao

b1.Spring使用JdbcTemplate进行数据库操作

在spring的核心配置文件中配置

<!--扫描包以注册注解声明的bean-->

<context:component-scan base-package="com.baobaotao"/>

<!--配置数据源-->

<bean id="dataSource"

               class="org.apache.commons.dbcp.BasicDataSource" destory-method="close"

               p:driverClassName="com.mysql.jdbc.Driver"

               p:url="jdbc:mysql://localhost:3309/sampledb"

               p:username="root"

               p:password="1234"/>

<!--声明JdbcTemplateBean-->

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dataSource"/>

在Dao中注入

package com.baobaotao.dao;

//声明一个DAO

@Repository

public class ForumDao {

     //注入JdbcTemplate实例

     @Autowired

      private JdbcTemplate jdbcTemplate;

      public void initDb() {

          String sql="create table t_user(userId int(20));

         jdbcTemplate.execute(sql);

     }

}

b2.Spring使用hibernate进行数据库操作

<!--配置数据源-->

<bean id="dataSource"

               class="org.apache.commons.dbcp.BasicDataSource" destory-method="close"

               p:driverClassName="com.mysql.jdbc.Driver"

               p:url="jdbc:mysql://localhost:3309/sampledb"

               p:username="root"

               p:password="1234"/>

<!--hibernate配置-->

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"

           p:dataSource-ref="dataSource">

           <!--指定Hibernate实体映射文件-->

          <property name="mappingLocations">

              <list>

                  <value>classpath*:/com/baobaotao/domain/Forum.hbm.xml</value>

             </list>

          </property>

         <!--制定hibernate配置属性-->

         <property name="hibernateProperties">

              <props>

                   <prop key="hibernate.dialect">

                        org.hibernate.dialect.MySQLDialect

                   </prop>

                   <prop key="hibernate.show_sql">

                        true

                   </prop>

              </props>

         </property>

</bean>

Forum.hbm.xml配置

<hibernate-mapping auto-import="true" default-lazy="false">

    <class name="com.baobaotao.domain.Forum" table="t_forum">

        <property name="userId" column="user_id"/>

    </class>

</hibernate-mapping>

Forum的domain

package com.baobaotao.domain;

public class Forum {

    public String userId;

    ....get/set..

}

Forum相关的Dao操作

package com.baobaotao.dao.hibernate;

@Repository

public class ForumHibernateDao {

    @Autowired

     private HibernateTemplate hibernateTemplate;

     public void addForum(Forum forum) {

         hibernateTemplate.save(forum);

    }

}

b3.Spring使用Mybatis进行数据库操作

在spring核心配置文件中配置:

     <!---配置数据源-->

     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
         destroy-method="close"
         p:driverClassName="com.mysql.jdbc.Driver"
         p:url="jdbc:mysql://localhost:3306/sampledb"
         p:username="root"
         p:password=""/>

     <!--配置sessionFactory-->
     <bean id="sqlSessionFactory"
         class="org.mybatis.spring.SqlSessionFactoryBean"
         p:dataSource-ref="dataSource"
         p:configLocation="classpath:mybatisConfig.xml"/>

    <!--配置sqlSessionTemplate-->
     <bean class="org.mybatis.spring.SqlSessionTemplate">
         <constructor-arg ref="sqlSessionFactory"/>
     </bean>

在mybatisConfig.xml中进行mybatis相关配置:

<configuration>
    <settings>
        <setting name="lazyLoadingEnabled" value="false"/>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <typeAliases>

        <!--指定数据库domain中表的别名-->
        <typeAlias alias="User" type="com.baobaotao.domain.MybatisUser"/>
    </typeAliases>
    <mappers>

        <!--指定Dao相关的映射操作文件,此文件放在java文件中的com.baobaotao.dao这个包中-->
        <mapper resource="com/baobaotao/dao/MybatisUser.xml"/>
    </mappers>
</configuration>

MybatisUser.xml相关的操作配置

<!--指定映射文件唯一的命名空间-->

<mapper namespace="com.baobaotao.dao.MybatisUser">

   <!--指定Dao中实现的各个函数以及输入输出-->
    <select id="getMatchCount" resultType="long" parameterType="User">
        select
           count(*)
        from
           t_user where user_name=#{userName} and password=#{password}
    </select>
    <select id="findUserByUserName" resultType="User" parameterType="String">
        select
          *  
        from
            t_user where user_name=#{userName}
    </select>
    <update id="updateLoginInfo" parameterType="User">
        update  
          t_user  
        set
          credits=#{credits} where user_id=#{userId}
    </update>
</mapper>

Dao的实现类:

@Repository
public class MybatisUserDao {
    @Autowired
    private SqlSessionTemplate sessionTemplate;
    
    public long getMatchCount(String userName, String password) {
        MybatisUser user = new MybatisUser();
        user.setUserName(userName);
        user.setPassword(password);
        return (Long)sessionTemplate.selectOne("com.baobaotao.dao.MybatisUser.getMatchCount", user);
    }
    
    public MybatisUser findUserByUserName(final String userName) {
        List<MybatisUser> users = sessionTemplate.selectList("com.baobaotao.dao.MybatisUser.findUserByUserName", userName);
        if (users == null || users.size() == 0) {
            return null;
        }
        return users.get(0);
    }

    public void updateLoginInfo(MybatisUser user) {
        sessionTemplate.update("com.baobaotao.dao.MybatisUser.updateLoginInfo", user);
    }
}

User表对应的domain

package com.baobaotao.domain;

import java.util.Date;

public class MybatisUser {
    
//    @Id
//    @Column(name="user_id")
    int userId;
    
//    @Column(name="user_name")
    String userName;
    
//    @Column(name="credits")
    int credits;
    
//    @Column(name="password")
    String password;
    
//    @Column(name="last_visit")
    Date lastVisit;
    
    String lastIp;
    
    public void setUserId(int userId) {
        this.userId = userId;
    }
    
    public int getUserId() {
        return this.userId;
    }
    
    public void setUserName(String userName) {
        this.userName = userName;
    }
    
    public String getUserName() {
        return this.userName;
    }
    
    public void setCredits(int credits) {
        this.credits = credits;
    }
    
    public int getCredits() {
        return this.credits;
    }
    
    public void setPassword(String password) {
        this.password = password;
    }
    
    public String getPassword() {
        return this.password;
    }
    
    public void setLastVisit(Date lastVisit) {
        this.lastVisit = lastVisit;
    }
    
    public Date getLastVisit() {
        return this.lastVisit;
    }
    
    public void setLastIp(String lastIp) {
        this.lastIp = lastIp;
    }
    
    public String getLastIp() {
        return this.lastIp;
    }

}

 

 

 

 

 

   

转载于:https://my.oschina.net/seektechnology/blog/852243

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值