欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?JDBC使用步驟和事務管理

 更新時間:2023年12月11日 10:35:54   作者:小矮多  
Spring?JDBC是Spring框架用來處理關系型數(shù)據(jù)庫的模塊,對JDBC的API進行了封裝,這篇文章主要介紹了Spring?JDBC使用步驟和事務管理,需要的朋友可以參考下

Spring JDBC是Spring框架用來處理關系型數(shù)據(jù)庫的模塊,對JDBC的API進行了封裝。

Spring JDBC的核心類為JdbcTemplate,提供數(shù)據(jù)CRUD方法

Spring JDBC使用步驟

1.Maven工程引入依賴spring-jdbc

<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-jdbc</artifactId>
     <version>5.2.6.RELEASE</version>
</dependency>
<dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>8.0.27</version>
</dependency>

2.xml中配置DataSource數(shù)據(jù)源

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
    <property name="url" value="jdbc:mysql://localhost:3306/test"></property>
    <property name="username" value="root"></property>
    <property name="password" value="root"></property>
</bean>

3.xml中定義JdbcTemplate Bean,讓IoC容器初始化時自動實例化

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"></property>
</bean>

4.在需要增刪改查的Dao中,持有JdbcTemplate屬性,并設置getter和setter方法,然后在對應的業(yè)務處理方法中,調(diào)用JdbcTemplate的指定方法。

public class EmployeeDao {
    private JdbcTemplate jdbcTemplate;
	//數(shù)據(jù)查詢方法
    public Employee findById(Integer eno){
        String sql="select * from employee where eno = ?";
        Employee employee = jdbcTemplate.queryForObject(sql,new Object[]{eno},new BeanPropertyRowMapper<>(Employee.class));
        return employee;
    }
    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
}

5.在xml中為Dao類注入JdbcTemplate對象

<bean id="employeeDao" class="spring.jdbc.dao.EmployeeDao">
    <property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>

JdbcTemplate數(shù)據(jù)查詢方法:

例:

public List<Employee> findByDname(String dname){
    String sql = "select * from employee where dname = ?";
    List<Employee> list = jdbcTemplate.query(sql,new Object[]{dname},new BeanPropertyRowMapper<>(Employee.class));
    return list;
}
public List<Map<String, Object>> findMapByDname(String dname){
    String sql = "select eno as  empno,salary as s from employee where dname = ?";
    List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql, new Object[]{dname});
    return maps;
}

JdbcTemplate數(shù)據(jù)寫入方法:

例:

public void insert(Employee employee){
        String sql = "insert into employee(eno,ename,salary,dname) values(?,?,?,?)";
        //利用update方法實現(xiàn)數(shù)據(jù)寫入操作
        jdbcTemplate.update(sql,new Object[]{
                employee.getEno(),employee.getEname(),employee.getSalary(), employee.getDname()
        });
    }
    public int update(Employee employee){
        String sql = "update employee set ename=?,salary=?,dname=? where eno=?";
        //利用update方法實現(xiàn)數(shù)據(jù)更新操作
        int count = jdbcTemplate.update(sql,new Object[]{
                employee.getEname(),employee.getSalary(), employee.getDname(),employee.getEno()
        });
        return count;
    }
    public int delete(Integer eno){
        String sql = "delete from employee where eno = ?";
        //利用update方法實現(xiàn)數(shù)據(jù)刪除操作
        return jdbcTemplate.update(sql,new Object[]{eno});
    }

Spring事務管理

事務是一種可靠、一致的方式,是訪問操作數(shù)據(jù)庫的程序單元,事務要么把事情做完,要么不做,不會做一半停止。
事務依賴數(shù)據(jù)庫實現(xiàn),MySQL通過事務區(qū)作為數(shù)據(jù)緩沖地帶。

編程式事務

通過代碼手動提交回滾事務的事務控制方式。

SpringJDBC通過TransactionManager事務管理器實現(xiàn)事務控制。

TransactionManager事務管理器提供commit、rollback方法進行事務提交和回滾。

編程式事務使用步驟:

1.配置事務管理器

<!--    事務管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

2.在需要開啟事務的業(yè)務類中,持有事務管理器屬性,并設置getter和setter方法

private DataSourceTransactionManager transactionManager;
	public DataSourceTransactionManager getTransactionManager() {
        return transactionManager;
    }
    public void setTransactionManager(DataSourceTransactionManager transactionManager) {
        this.transactionManager = transactionManager;
    }

3.配置事務管理器對象注入

<bean id="employeeService" class="spring.jdbc.service.EmployeeService">
        <property name="employeeDao" ref="employeeDao"></property>
        <property name="transactionManager" ref="transactionManager"></property>
</bean>

定義事務默認的標準配置,開啟事務,進行事務管理

聲明式事務

在不修改代碼的情況下通過配置的形式實現(xiàn)事務控制,本質(zhì)就是AOP環(huán)繞通知。

聲明式事務的觸發(fā)時機:

  • 當目標方法執(zhí)行成功時,自動提交事務
  • 當目標方法拋出運行時異常時,自動事務回滾

聲明式事務配置過程:

1.需要添加AOP依賴

<dependency>
     <groupId>org.aspectj</groupId>
     <artifactId>aspectjweaver</artifactId>
     <version>1.9.5</version>
</dependency>

2,添加tx和aop命名空間

3.配置TransactionManager事務管理器

<!--    事務管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

4.配置事務通知與事務屬性

<!--事務通知配置,決定哪些方法使用事務,哪些方法不使用事務-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
			<!--propagation事務傳播行為-->
			<!--當目標方法名為batchImport時,啟用聲明式事務,運行成功提交事務,運行時異常回滾-->
			<!--目標方法允許使用通配符*-->
            <tx:method name="batchImport" propagation="REQUIRED"/>
            <!--設置所有findXXX方法不啟用事務-->
            <tx:method name="find*" propagation="NOT_SUPPORTED" read-only="true"/>
            <tx:method name="get*" propagation="NOT_SUPPORTED" read-only="true"/>
            <!--設置其他方法不啟用事務-->
            <tx:method name="*" propagation="NOT_SUPPORTED" read-only="true"/>
        </tx:attributes>
    </tx:advice>

5.為事務通知綁定PointCut切點

<!--定義聲明式事務的作用范圍-->
    <aop:config>
        <aop:pointcut id="pointcut" expression="execution(* spring.jdbc..*Service.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
    </aop:config>

事務傳播行為propagation

多個擁有事務的方法在嵌套調(diào)用時的事務控制方式。

注解配置聲明式事務

xml配置

<context:component-scan base-package="spring.jdbc"/>
    <!--數(shù)據(jù)源-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/test"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </bean>
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--事務管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--啟用注解形式聲明式事務-->
    <tx:annotation-driven transaction-manager="transactionManager"/>

2.分層添加組件注解,實例化對象

@Repository
public class EmployeeDao {
    @Resource
    private JdbcTemplate jdbcTemplate;
    ...
@Service
public class EmployeeService {
    @Resource
    private EmployeeDao employeeDao;
    ...

3.需要開啟事務的類添加@Transactional注解,可以設置事務傳播行為,如@Transactional(propagation = Propagation.REQUIRED

或者為方法單獨設置事務管理方式,程序執(zhí)行時優(yōu)先應用方法上的配置

到此這篇關于Spring JDBC使用步驟和事務管理的文章就介紹到這了,更多相關Spring事務管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java中的DateTime的具體使用

    java中的DateTime的具體使用

    本文主要介紹了java中的DateTime的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java虛擬機內(nèi)存溢出與內(nèi)存泄漏

    Java虛擬機內(nèi)存溢出與內(nèi)存泄漏

    這篇文章主要介紹了Java虛擬機內(nèi)存溢出與內(nèi)存泄漏,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • java編程實現(xiàn)簡單的網(wǎng)絡爬蟲示例過程

    java編程實現(xiàn)簡單的網(wǎng)絡爬蟲示例過程

    這篇文章主要為大家介紹了如何使用java編程實現(xiàn)一個簡單的網(wǎng)絡爬蟲示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10
  • 在Spring中如何注入動態(tài)代理Bean

    在Spring中如何注入動態(tài)代理Bean

    這篇文章主要介紹了在Spring中如何注入動態(tài)代理Bean問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Spring Boot加載配置文件的完整步驟

    Spring Boot加載配置文件的完整步驟

    這篇文章主要給大家介紹了關于Spring Boot加載配置文件的完整步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Spring Boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-11-11
  • Springboot集成Kafka實現(xiàn)producer和consumer的示例代碼

    Springboot集成Kafka實現(xiàn)producer和consumer的示例代碼

    這篇文章主要介紹了Springboot集成Kafka實現(xiàn)producer和consumer的示例代碼,詳細的介紹了什么是Kafka和安裝Kafka以及在springboot項目中集成kafka收發(fā)message,感興趣的小伙伴們可以參考一下
    2018-05-05
  • SpringBoot中對SpringMVC的自動配置詳解

    SpringBoot中對SpringMVC的自動配置詳解

    這篇文章主要介紹了SpringBoot中的SpringMVC自動配置詳解,Spring MVC自動配置是Spring Boot提供的一種特性,它可以自動配置Spring MVC的相關組件,簡化了開發(fā)人員的配置工作,需要的朋友可以參考下
    2023-10-10
  • Java程序中使用JavaMail發(fā)送帶圖片和附件的郵件

    Java程序中使用JavaMail發(fā)送帶圖片和附件的郵件

    這篇文章主要介紹了Java程序中使用JavaMail發(fā)送帶圖片和附件的郵件,JavaMail是專門用來處理郵件的Java API,需要的朋友可以參考下
    2015-11-11
  • IDEA初次配置并導入gite碼云的方法

    IDEA初次配置并導入gite碼云的方法

    這篇文章主要介紹了IDEA初次配置并導入gite碼云的方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 淺談JVM之java class文件的密碼本

    淺談JVM之java class文件的密碼本

    一切的一切都是從javac開始的。從那一刻開始,java文件就從我們?nèi)庋劭煞直娴奈谋疚募?,變成了冷冰冰的二進制文件。變成了二進制文件是不是意味著我們無法再深入的去了解java class文件了呢?答案是否定的。本文將詳細介紹JVM之java class文件的密碼本。
    2021-06-06

最新評論