前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring(3)

spring(3)

作者头像
周杰伦本人
发布2023-10-12 14:02:47
1450
发布2023-10-12 14:02:47
举报
文章被收录于专栏:同步文章

一。spring整合jdbc

代码语言:javascript
复制
@Test
    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);

    }

将连接池的配置交给 Spring 管理:

【配置内置连接池】

代码语言:javascript
复制
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">      <property name="driverClassName" value="com.mysql.jdbc.Driver"/>      
  <property name="url" value="jdbc:mysql:///spring_day02"/>      
  <property name="username" value="root"/>      
  <property name="password" value="123"/>     
</bean> 

【将模板配置到 Spring 中】

代码语言:javascript
复制
 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">      <property name="dataSource" ref="dataSource"/>     
</bean> 

【编写测试类】

代码语言:javascript
复制
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") 
public class SpringDemo2 {    
  @Resource(name="jdbcTemplate")  
  private JdbcTemplate jdbcTemplate;    

  @Test  public void demo1(){ 
  jdbcTemplate.update("insert into account values (null,?,?)", " 凤姐 ",10000d);      } 
}

另外有dbcp连接池 c3p0连接池

将数据库连接的信息配置到属性文件中:

文件加载:

两种方式:

代码语言:javascript
复制
 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">      <property name="location" value="classpath:db.properties"/>     
</bean> 

<!-- 指定spring读取db.properties配置 -->
<context:property-placeholder location="classpath:db.properties"  />

二。spring的aop

  1. 不考虑事务隔离引发的安全问题:

脏读 :一个事务读到了另一个事务的未提交的数据

不可重复读 :一个事务读到了另一个事务已经提交的 update 的数据导致多次查询结果不一致.

虚幻读 :一个事务读到了另一个事务已经提交的 insert 的数据导致多次查询结果不一致

解决读问题:设置事务隔离级别 未提交读 :脏读,不可重复读,虚读都有可能发生

已提交读 :避免脏读。但是不可重复读和虚读有可能发生

可重复读 :避免脏读和不可重复读.但是虚读有可能发生.

串行化的 :避免以上所有读问题

Mysql 默认:可重复读 Oracle 默认:读已提交

spring的声明式事务

xml形式:

事务管理器:

代码语言:javascript
复制
<!-- 事务核心管理器,封装了所有事务操作. 依赖于连接池 -->
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
<property name="dataSource" ref="dataSource" ></property>
</bean>

配置事务通知:

代码语言:javascript
复制
<!-- 配置事务通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager" >
<tx:attributes>
    <!-- 以方法为单位,指定方法应用什么事务属性
        isolation:隔离级别
        propagation:传播行为
        read-only:是否只读
     -->
    <tx:method name="save*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
    <tx:method name="persist*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
    <tx:method name="update*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
    <tx:method name="modify*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
    <tx:method name="delete*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
    <tx:method name="remove*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
    <tx:method name="get*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="true" />
    <tx:method name="find*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="true" />
    <tx:method name="transfer" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
</tx:attributes>
</tx:advice>

配置织入:

代码语言:javascript
复制
<!-- 配置织入 -->
<aop:config  >
<!-- 配置切点表达式 -->
<aop:pointcut expression="execution(* cn.itcast.service.*ServiceImpl.*(..))" id="txPc"/>
<!-- 配置切面 : 通知+切点
        advice-ref:通知的名称
        pointcut-ref:切点的名称
 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPc" />
</aop:config>

注解形式:

代码语言:javascript
复制
<!-- 开启使用注解管理aop事务 -->
<tx:annotation-driven/>

使用注解

代码语言:javascript
复制
@Transactional(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=true)
public class AccountServiceImpl implements AccountService {
...
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档