spring JDBC 事務管理

spring JDBC 事務管理java

1、Spring 中的JDBC

Spring中封裝了JDBCORM框架,能夠用它來操做數據,不須要再使用外部的OEM框架(MyBatis),一些小的項目用它。mysql

步驟:spring

  1. 導入JDBC相關的Jar包,應用dbcp鏈接池

aopalliance-1.0.0.jarsql

aspectjweaver-1.6.8.jar數據庫

commons-dbcp-1.4.jar   // 數據庫鏈接池express

commons-logging-1.1.1.jarapache

commons-pool-1.5.3.jarapp

mysql-connector-java-5.1.38-bin.jar框架

spring-aop-4.3.10.RELEASE.jarurl

spring-aspects-4.3.10.RELEASE.jar

spring-beans-4.3.10.RELEASE.jar

spring-context-4.3.10.RELEASE.jar

spring-context-support-4.3.10.RELEASE.jar

spring-core-4.3.10.RELEASE.jar

spring-expression-4.3.10.RELEASE.jar

spring-jdbc-4.3.10.RELEASE.jar   //jdbc 操做的對象包

spring-tx-4.3.10.RELEASE.jar     //數據庫中的事務處理包

 

  1. 在配置文件中配置鏈接池數據源,及JdbcTemplate對象

<!-- 加載鏈接數據的的屬性文件 -->

   <bean id="propertyPlaceholderConfigurer"

     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

       <property name="location" value="classpath:config/jdbc.properties"/>

   </bean>

   <!-- 配置數據源對象,此數據源用的是dbcp鏈接池 -->

   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

     <!-- 鏈接數據庫的基本配置  ${driver}讀取到屬性文件的鍵對應的值-->

     <property name="driverClassName" value="${driver}"/>

     <property name="url" value="${url}"/>

     <property name="username" value="${username}"/>

     <property name="password" value="${password}"/>

     <!-- 配置鏈接池相關屬性,初始大小,最大鏈接數,最大空閒,最小空閒,最大空閒時間 -->

     <property name="initialSize" value="${initialSize}"/>

     <property name="maxActive" value="${maxActive}"/>

     <property name="maxIdle" value="${maxIdle}"/>

     <property name="minIdle" value="${minIdle}"/>

     <property name="maxWait" value="${maxWait}"/>

   </bean>

   <!-- Spring框架封裝好的JDBC對象,能夠操做數據 -->

   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

      <property name="dataSource" ref="dataSource"/>

   </bean>

 

  1. 在程序中獲取到JdbcTemplate對象,此對象就能夠操做數據。

 

@Service // 掃描到IOC容器中

public class GradeService {

@Autowired // 自動從IOC容器中注入對象

JdbcTemplate jdbcTemplate;

 

// 查詢全部

public List<Grade> getGrades() {

String sql = "select * from grade";

// 數據行映射器,映射數據行的列與實體對象的屬性對應

RowMapper<Grade> rm = new BeanPropertyRowMapper<>(Grade.class);

// 能夠把查詢的結果集中的數據行一行行封裝成實體對象

List<Grade> grades = jdbcTemplate.query(sql, rm);

return grades;

}

 

// 根據ID查詢單個對象

public Grade getGradeById(int id) {

RowMapper<Grade> rm = new BeanPropertyRowMapper<>(Grade.class);

String sql = "select * from grade where gradeId=?";

return jdbcTemplate.query(sql, new Object[] { id }, rm).get(0);

}

 

// 根據ID查詢年級名稱,返回單個值

public String getGradeNameById(int id) {

String sql = "select gradeName from grade where gradeId=?";

return jdbcTemplate.queryForObject(sql, new Object[] { id }, String.class);

}

 

// 根據年級名稱查詢ID,返回單個值

public int getGradeIdByName(String name) {

String sql = "select gradeId from grade where gradeName=?";

return jdbcTemplate.queryForObject(sql, new Object[] { name }, int.class);

}

//添加,增,刪,改調用相同的方法,只是SQL指令不一樣

public int add(Grade g) {

String sql = "insert into grade values(null,?)";

return jdbcTemplate.update(sql, g.getGradeName());

}

}

相關文章
相關標籤/搜索