spring学习3

spring整合JDBC

spring提供了很多模板整合Dao技术

spring中提供了一个可以操作数据库的对象.对象封装了jdbc技术.

 

JDBCTemplate => JDBC模板对象   与DBUtils中的QueryRunner非常相似

 

使用步骤

导包

4+2

  spring-test

  spring-aop以前不需要

  junit4类库

 c3p0连接池

--------新的--------------

 JDBC驱动

 spring-jdbc

 spring-tx事务

 

准备数据库        准备Dao

增删改

 

查询  值类型 / 引用类型 /集合类型

 

spring配置

依赖关系

测试

首先在spring配置文件中不进行任何配置

使用jdbc模板进行操作

复制代码
public void fun1() throws Exception{
        //0 准备连接池
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql:///hibernate_32");
        dataSource.setUser("root");
        dataSource.setPassword("1234");
        //1 创建JDBC模板对象
        JdbcTemplate jt = new JdbcTemplate();
        jt.setDataSource(dataSource);
        //2 书写sql,并执行
        String sql = "insert into t_user values(null,'rose') ";
        jt.update(sql);    
}
复制代码

在userDao里面自动注入 JdbcTempate 属性

复制代码
<context:property-placeholder location="classpath:db.properties"/>
    <!-- 配置数据库连接池 -->
    <bean name="data" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        <property name="user" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>
    
    <!-- 将 jdbcTemplate需要的 连接池注入进来 -->
    <bean class="org.springframework.jdbc.core.JdbcTemplate" name="template">
        <property name="dataSource" ref="data"></property>
    </bean>
    
    <bean name="userDao" class="com.myjdbc.UserDao">
        <property name="jt" ref="template"></property>
    </bean>
复制代码

思路:JdbcTemplate 里面注入 连接池   UserDao里面注入 JdbcTemplate对象  

注意:属性名称要一致 还有就是 里面UserDao里面要有 getter 和 setter 方法  否则不能成功

复制代码
public class UserDao implements IUserDao{

    private JdbcTemplate jt;public JdbcTemplate getJt() {
        return jt;
    }
    public void setJt(JdbcTemplate jt) {
        this.jt = jt;
    }

    @Override
    public void delete(int id) {
        System.out.println("调用了 delete 方法");
        String sql = "delete from t_student where sId = ?";
        int i = jt.update(sql,id);
        System.out.println(i);
    }
}
复制代码

可以看出 UserDao里面比较乱   因为有 JdbcTemplate的getter 和 setter方法

怎么解决?

可以使用:UserDao继承  JdbcSupport 

配置文件如下:

复制代码
<context:property-placeholder location="classpath:db.properties"/>
    <!-- 配置数据库连接池 -->
    <bean name="data" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        <property name="user" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>
    
    <bean name="userDao" class="com.myjdbc.UserDao">
        <property name="dataSource" ref="data"></property>
    </bean>
复制代码

这样在 就可以不用配置 JdbcTemplate 对象了  只需要在UserDao里面注入 连接池对象即可(dataSource)

复制代码
public class UserDao extends JdbcDaoSupport implements IUserDao{
    @Override
    public void delete(int id) {
        System.out.println("调用了 delete 方法");
        String sql = "delete from t_student where sId = ?";
        int i = super.getJdbcTemplate().update(sql, id);
        System.out.println(i);
    }
}
复制代码

 

DBCDaoSupport的使用     该对象是 根据连接池创建 JDBC 模板

 不需要手动准备JDBC模板  从父类方法中获得即可

注意加前缀,避免出现相同的属性

 

spring中aop事务

事务  

   事务并发问题  脏读 不可重复读 幻读

   事务的隔离级别

       1 读未提交

  2 读已提交

  4 可重复读

  8 串行化

spring中封装了事务管理代码

 

事务操作对象

因为在不同平台,操作事务的代码各不相同.spring提供了一个接口

PlatformTransactionManager 接口 针对不同平台提供不同的类

        DataSourceTransactionManager

        HibernateTransitionmanager

   注意:在spring中玩事务管理.最为核心的对象就是TransactionManager对象

 

spring管理事务的属性介绍    是否只读 true 只读、false 可操作

事务的传播行为:决定业务方法之间的调用,事务应该如何处理  默认 使用第一个

spring管理事务方式

编码式(了解)

1.将核心事务管理器配置到spring容器

2.配置TransactionTemplate模板

 

3.将事务模板注入Service

 

4.在Service中调用模板

 

 

xml配置(aop)的方式

1.导包  aop  Aspect   aop联盟   weaving织入包

2.导入新的约束(tx)   xml约束

     beans:最基本的      context:读取properties配置文件的  aop:配置AOP的       tx:配置事务通知的

3.配置通知

4.配置将通知织入目标

 

注解配置(aop)的方式

3.开启注解管理事务

 

4.使用注解

 

 

补充:

一个业务的成功: 调用的service是执行成功的,意味着service中调用的所有的dao是执行成功的。  事务应该在Service层统一控制。

 引入外部文件

 

posted @   escapist  阅读(119)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示