日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring——使用注解声明式事务整合jdbc——GRUD

發布時間:2024/2/28 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring——使用注解声明式事务整合jdbc——GRUD 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

準備階段:

pom.xml

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion> ?<groupId>com.henu</groupId><artifactId>springJDBCplus</artifactId><version>1.0-SNAPSHOT</version> ?<dependencies><!-- spring4.3.20 --><!-- spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.20.RELEASE</version></dependency><!-- spring-core --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.20.RELEASE</version></dependency><!-- spring-beans --><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.3.20.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-expression --><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>4.3.20.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-aop --><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.3.20.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects --><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>4.3.20.RELEASE</version></dependency><!--使用AspectJ方式注解需要相應的包 --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.9.1</version></dependency> ?<!--使用AspectJ方式注解需要相應的包 --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.2</version></dependency> ?<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency> ?<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency> ?<!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency> ?<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.3.RELEASE</version></dependency> ?<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx --><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.1.3.RELEASE</version></dependency> ?<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.20</version><scope>provided</scope></dependency> ?<!-- https://mvnrepository.com/artifact/junit/junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency> ?</dependencies> ? </project>

數據庫:

?

一、實體類User

package com.henu.bean; ? import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; ? /*** @author George* @description**/ @NoArgsConstructor @AllArgsConstructor @Data public class User {private int id;private String name;private String pwd; }

二、dao層

package com.henu.dao; ? import com.henu.bean.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; ? import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; ? /*** @author George* @description**/ @Repository public class UserDaoImpl implements UserDao {//注入jdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate; ?public int insertUser(User user) {String sql = "insert into user values(0,?,?)";return jdbcTemplate.update(sql,user.getName(),user.getPwd());} ?public int deleteUser(int id) {String sql = "delete from user where id = ?";return jdbcTemplate.update(sql,id);} ?public int updateUser(User user) {String sql = "update user set name=?,pwd=? where id=?";return jdbcTemplate.update(sql,user.getName(),user.getPwd(),user.getId());} ?public User queryUserById(int id) {String sql = "select * from user where id = ?";//使用內部類class UserMapper implements RowMapper<User>{ ?public User mapRow(ResultSet resultSet, int i) throws SQLException {User user = new User();user.setId(resultSet.getInt("id"));user.setName(resultSet.getString("name"));user.setPwd(resultSet.getString("pwd"));return user;}}//這里需要注意的是使用的是queryForObject()方法。如果使用query會報出ClassCastExceptionreturn (User) jdbcTemplate.queryForObject(sql,new UserMapper(),id);} ?public List<User> queryAll() {String sql = "select * from user";//使用匿名內部類return jdbcTemplate.query(sql, new RowMapper<User>() {public User mapRow(ResultSet resultSet, int i) throws SQLException {User user = new User();user.setId(resultSet.getInt("id"));user.setName(resultSet.getString("name"));user.setPwd(resultSet.getString("pwd"));return user;}});} ?public JdbcTemplate getJdbcTemplate() {return jdbcTemplate;} ?public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;} } ?

三、service層

package com.henu.service; ? import com.henu.bean.User; import com.henu.dao.UserDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; ? import java.util.List; ? /*** @author George* @description**/ @Service public class UserServiceImpl implements UserService {//注入userDao@Autowiredprivate UserDao userDao;@Transactionalpublic int insertUser(User user) {return userDao.insertUser(user);}@Transactionalpublic int deleteUser(int id) {return userDao.deleteUser(id);}@Transactionalpublic int updateUser(User user) {return userDao.updateUser(user);} ?public User queryUserById(int id) {return userDao.queryUserById(id);} ?public List<User> queryAll() {return userDao.queryAll();} ?public UserDao getUserDao() {return userDao;} ?public void setUserDao(UserDao userDao) {this.userDao = userDao;} } ?

四、resources

db.properties

#db config jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/ooxx jdbc.username=root jdbc.password=123456 initialSize=5 minIdle=2 maxActive=10 maxWait=10000 timeBetweenEvictionRunsMillis=60000 minEvictableIdleTimeMillis=300000 testWhileIdle=true testOnBorrow=true testOnReturn=false poolPreparedStatements=true maxPoolPreparedStatementPerConnectionSize=20 defaultAutoCommit=true validationQuery=select 1

applicationContext_db.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><!--導入屬性文件--><context:property-placeholder location="classpath:db.properties"></context:property-placeholder><!--配置數據源--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"><property name="driverClassName" value="${jdbc.driverClassName}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/><!-- ******配置數據庫連接池相關信息******* --><!-- 配置初始化大小、最小、最大 --><property name="initialSize" value="${initialSize}"/><property name="minIdle" value="${minIdle}"/><property name="maxActive" value="${maxActive}"/><!-- 配置獲取連接等待超時的時間 --><property name="maxWait" value="${maxWait}"/><!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 --><property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}"/><!-- 配置一個連接在池中最小生存的時間,單位是毫秒 --><property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}"/><property name="testWhileIdle" value="${testWhileIdle}"/><!-- 這里建議配置為TRUE,防止取到的連接不可用 --><property name="testOnBorrow" value="${testOnBorrow}"/><property name="testOnReturn" value="${testOnReturn}"/><!-- 打開PSCache,并且指定每個連接上PSCache的大小 --><property name="poolPreparedStatements" value="${poolPreparedStatements}"/><property name="maxPoolPreparedStatementPerConnectionSize"value="${maxPoolPreparedStatementPerConnectionSize}"/><!-- 這里配置提交方式,默認就是TRUE,可以不用配置 --><property name="defaultAutoCommit" value="${defaultAutoCommit}"/><!-- 驗證連接有效與否的SQL,不同的數據配置不同 --><property name="validationQuery" value="${validationQuery}"/></bean><!--JDBCTemplate--><bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/></bean><!--使用注解進行注入--><context:component-scan base-package="com.henu"></context:component-scan><!--************************************************************--><!--配置事務管理器--><bean name="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!--啟動事務注解--><tx:annotation-driven transaction-manager="txManager"></tx:annotation-driven></beans>

五、測試類

package com.henu; ? import com.henu.bean.User; import com.henu.service.UserService; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; ? import java.util.List; ? /*** @author George* @description* 測試類中的方法,無返回值,無參數**/ public class JdbcTest { ?private ClassPathXmlApplicationContext context = null;private UserService userService;@Beforepublic void init(){context = new ClassPathXmlApplicationContext("applicationContext_db.xml");userService = (UserService) context.getBean(UserService.class);} ?@Testpublic void insert(){User user = new User(0,"喬治大哥","123456");userService.insertUser(user);} ?@Testpublic void deleteUser(){userService.deleteUser(1);} ?@Testpublic void updateUser(){User user = new User(1,"康康","56345");userService.updateUser(user);System.out.println("success");} ?@Testpublic void queryUserById(){System.out.println(userService.queryUserById(2));} ?@Testpublic void queryAll(){List<User> users = userService.queryAll();for (User user : users) {System.out.println(user);}} ?@Afterpublic void destory(){context.close();} ? }

【補充】

@Transactional的寫法應為:

@Transactional(propagation= Propagation.REQUIRED,isolation= Isolation.READ_COMMITTED,timeout = -1,readOnly = false,rollbackFor = Exception.class)

不過在他的默認屬性值中已經定義,以下是源碼

?

所以我們可以在需要事務管理的方法或類上直接寫直接寫@Transactional

當寫在類上時,本類中所有方法,均被事務管理。

?

?

<!--啟動事務注解-->
<tx:annotation-driven transaction-manager="txManager"></tx:annotation-driven>

總結

以上是生活随笔為你收集整理的spring——使用注解声明式事务整合jdbc——GRUD的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99热这里只有精品99 | 黑人巨茎大战欧美白妇 | 国产香蕉在线视频 | 国产激情二区 | 国产免费一区二区三区在线播放 | 爱情岛成人 | 青青国产精品 | 好紧好爽再浪一点视频 | av色欲无码人妻中文字幕 | 内射合集对白在线 | 国产精品丝袜在线观看 | 日本69视频 | 叼嘿视频在线免费观看 | 中文字幕第100页 | 激情久久综合 | 91日批 | 国产午夜无码精品免费看奶水 | 超碰在线看 | 国产黄a三级 | 欧美成人秋霞久久aa片 | 朝桐光在线视频 | 国产黄在线 | 波多野结衣在线网址 | 黄色一级视频网站 | 国产黄色免费大片 | 亚洲精品成人片在线观看精品字幕 | 色男人网| 图片区亚洲色图 | 海角社区在线视频播放观看 | 亚洲色图影院 | 中文字幕日本在线观看 | 色偷偷资源 | 兔费看少妇性l交大片免费 日韩高清不卡 | 国产农村妇女精品 | 欧美日韩亚洲精品一区二区 | 最新不卡av| 国产精品白嫩白嫩大学美女 | 污视频在线免费 | 欧美日韩久久 | 一级美女视频 | 偷拍一区二区三区四区 | 国产一区二区三区四区在线观看 | 日本一区高清 | 午夜少妇| 韩国av不卡 | 午夜剧场黄色 | 人人看人人模 | 爱爱视频欧美 | 国产精品88av| 久久久999国产精品 天堂av中文在线 | 欧美日韩精品在线观看 | 成人福利片 | 亚洲国产日韩欧美在线观看 | 波多野结衣理论片 | 中文字幕理伦片免费看 | 久久国产成人 | 福利社午夜| 国产传媒在线观看 | 五十路av在线 | 亚洲精品在线影院 | 国产精品一区二区6 | 少妇高潮一区二区三区喷水 | 精品国产97 | 久草中文在线 | 国产a v一区二区三区 | www.4hu95.com四虎 极品在线视频 | 色xxxxx | 国产露脸无套对白在线播放 | 日韩偷拍一区 | 国产精品久久久久久久一区探花 | 免费观看一级黄色片 | 性生活三级视频 | 亚洲综合图色40p | 国产精品久久久久久免费免熟 | 国产aaa大片 | 国产免费一区二区三区网站免费 | 久久久午夜精品福利内容 | 男人操女人免费网站 | 91肉色超薄丝袜脚交一区二区 | 午夜激情国产 | 欧美日韩综合一区 | 秒拍福利视频 | 亚洲爱色| 超碰97人| 免费在线观看日韩av | 青草av在线 | 精品久久五月天 | 综合亚洲视频 | 一区二区欧美日韩 | 超碰人人射| 久久五月天婷婷 | 欧美日本韩国一区 | 久久精品一日日躁夜夜躁 | 爆操白虎| 免费在线观看中文字幕 | 超碰人人人人人人人 | 综合天堂av久久久久久久 | 欧美一级欧美三级 | caoporn视频在线 |