基于JdbcTemplate 的 spring Dao常用实现

本文详细介绍了Spring中三种数据源(XML配置、注解和纯Java配置)的设置方法,包括 Druid、Proxool 和 Spring 自带的数据源。同时,讲解了如何从db.properties文件中读取配置,以及如何通过JdbcDaoSupport实现DAO操作。此外,还涵盖了Spring的事务管理,如何注册事务管理器以及启用事务注解。最后,提到了使用@ComponentScan、@Service和@Repository注解进行组件扫描和自动装配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring DAO

常见三种方式

  • xml配置
  • 注解
  • 纯java配置

xml 配置

数据源

spring 框架的数据源
 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;userUnicode=true&amp;charterEncoding=utf8&amp;serverTimezone=UTC"/>
        <property name="username" value="TR"/>
        <property name="password" value="adminxhb"/>
    </bean>
proxool 数据源
   <bean id="dataSource_proxool"
          class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
        <property name="targetDataSource">
            <bean class="org.logicalcobwebs.proxool.ProxoolDataSource">
                <property name="driver" value="${db.driver.class}" />
                <property name="driverUrl" value="${db.url}" />
                <property name="user" value="scott" />
                <property name="password" value="tiger" />
                <property name="maximumConnectionCount" value="10" />
                <property name="minimumConnectionCount" value="5" />
                <property name="statistics" value="${proxool.statistics}" />
                <property name="simultaneousBuildThrottle" value="30" />
                <property name="trace" value="true" />
            </bean>
        </property>
    </bean>
Druid 数据源
<bean id="dataSource_druid"
          class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
        <property name="targetDataSource">
            <bean class="com.alibaba.druid.pool.DruidDataSource">
                <property name="url" value="${db.url}" />
                <property name="username" value="${db.username}" />
                <property name="password" value="${db.password}" />
                <!-- 配置初始化大小、最小、最大 -->
                <property name="initialSize" value="1" />
                <property name="minIdle" value="10" />
                <property name="maxActive" value="30" />

                <!-- 配置获取连接等待超时的时间 -->
                <property name="maxWait" value="60000" />

                <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
                <property name="timeBetweenEvictionRunsMillis" value="60000" />

                <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
                <property name="minEvictableIdleTimeMillis" value="300000" />

                <property name="testWhileIdle" value="false" />
                <property name="testOnBorrow" value="false" />
                <property name="testOnReturn" value="false" />

                <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
                <property name="poolPreparedStatements" value="false" />
                <property name="maxPoolPreparedStatementPerConnectionSize"
                          value="20" />

                <property name="defaultAutoCommit" value="true" />
                <property name="ValidationQueryTimeout" value="60000" />
                <property name="validationQuery" value="select 1 from dual" />
                <property name="filters" value="stat,wall,log4j2"/>
            </bean>
        </property>
    </bean>

读取db.properties配置文件

数据源中的 数据库信息(url,user,password)这些属性一般都是用db.properties 定义,所以就有了导入问题,

解决导入问题:两种方式

<!--    自动读取配置文件  value 指定某一个配置文件-->
        <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
            <property name="locations">
                <list>
                    <value>classpath:db.properties</value>
                </list>
            </property>
        </bean>
 <!--关联数据库配置文件-->
      <context:property-placeholder location="classpath:database.properties"/>

注册bean

此处的 属性 dataSource 是继承了 JdbcDaoSupport类才有属性,所以到时候java文件中要继承此类

ref="dataSource_proxool" 是上面注册的数据源。

 <bean id="dao" class="com.trkj.dao.DeptDao">
            <property name="dataSource" ref="dataSource_proxool"></property>
        </bean>

JdbcDaoSupport 的 属性jdbcTemplate 就获取了与数据库的连接,能操作数据库对象了。

Dao类

this.getJdbcTemplate() 获取父类的方法,得到``jdbcTemplate对象

import org.springframework.jdbc.core.support.JdbcDaoSupport;

public class DeptDao extends JdbcDaoSupport {
   public int addDept(Dept dept){
       String sql="insert into dept(deptno,dname,loc) values(?,?,?)";
       int count=this.getJdbcTemplate().update(sql,dept.getDeptno(),dept.getDname(),dept.getLoc());
       return count;
   }
}

事务

上面只是基本搭建了数据库访问。而没有涉及到事务,在项目业务中,一定一定一定是会有事务的。so copy…

    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource">
            <ref bean="dataSource_druid" />
        </property>
    </bean>

<ref bean="dataSource_druid" /> : 注入的属性依旧是数据源。

启用事务注解

<!--    启用事务注解-->
    <tx:annotation-driven transaction-manager="transactionManager" />

在方法上加上注解:@Transactional 即可支持事务。

注解配置

注册组件

<!--  启用包扫描  -->    
<context:component-scan base-package="com.trkj"></context:component-scan>

与此同时,要spring托管的类需要注册成组件

  • dao 【 @Repository
  • service 【@Service
  • controller【Controller

意义都和 @Component (作用在pojo层)一样,注册bean 在IOC容器中。

jdbcTemplate

<!--    数据源注入到jdbcTemplate -->
  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
      <property name="dataSource" ref="dataSource_druid"></property>
  </bean>

dao层

JdbcTemplate 自动装配 (上面的jdbcTemplate已经链接数据源了,可以操作数据库的),

@Repository
public class AnDeptDao {
    @Autowired
    private JdbcTemplate template;
  
   public int addDept(Dept dept){
       String sql="insert into dept(deptno,dname,loc) values(?,?,?)";
       int count=template.update(sql,dept.getDeptno(),dept.getDname(),dept.getLoc());
       return count;
   }
}

tips: 自动装配 默认按类型,有需要可以使用@Qualifier ` 用名字装配(配合使用)

service层

同理,service 中的 deptDao 应该自动装配上 上面的dao

@Service
public class AnDeptServiceImpl implements AnDeptService {
    @Autowired
    private AnDeptDao deptDao;
   
    @Transactional   // 事务
    public int addDept(Dept dept) {
        return deptDao.addDept(dept);
    }
}

同理 测试中也需要是 注册到spring容器中 service 对象

 EmpService empService = context.getBean(EmpService.class);
 Emp emp = empService.getEmpById(2);

yf03203

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值