摘要:更簡答的說就是要么全部執行成功,要么撤銷不執行。因此,數據庫操作的事務習慣上就稱為事務。實現原理單機事務事務是用對象控制的。接口提供了兩種事務模式自動提交和手工提交。事務多機事務,通過實現,需要驅動支持。局限于應用使用。
Spring Boot - 數據庫配置 回顧
Spring Boot - 初識 Hello World
Spring Boot - Servlet、過濾器、監聽器、攔截器
Spring Boot - 靜態資源處理、啟動加載、日志處理
整合JdbcTemplatepom.xml配置maven依賴
application.properties配置數據源
org.springframework.boot spring-boot-starter-jdbc mysql mysql-connector-java
spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.max-idle=10 spring.datasource.max-wait=10000 spring.datasource.min-idle=1 spring.datasource.initial-size=1 spring.datasource.validation-query=SELECT 1 spring.datasource.test-on-borrow=false spring.datasource.test-while-idle=true spring.datasource.time-between-eviction-runs-millis=18800實踐:查詢用戶表
創建表user
CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(8) NOT NULL DEFAULT "", `age` int(11) NOT NULL, `create` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4;
創建用戶實體
package com.wanye.entity; /** * Created by wanye on 2017/6/3. */ public class User { private int id; private String name; private int age; private int create; // 省略get set }
創建UserService并注入JdbcTemplate,實現查詢?法
package com.wanye.service; import com.wanye.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Service; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; /** * Created by wanye on 2017/6/3. */ @Service public class UserService { @Autowired private JdbcTemplate jdbcTemplate; public ListgetUserList() { return jdbcTemplate.query("select * from user", new RowMapper () { @Override public User mapRow(ResultSet resultSet, int i) throws SQLException { User user = new User(); user.setId(resultSet.getInt("id")); user.setName(resultSet.getString("name")); user.setAge(resultSet.getInt("age")); user.setCreate(resultSet.getInt("create")); return user; } }); } }
增加Controller,并返回結果
代碼片段如下,關于如何實現web接口,請參考Spring Boot - 初識 Hello World
@Autowired private UserService userService; @RequestMapping("/userlist") public List整合MyBatisgetUserList() { return userService.getUserList(); }
pom.xml配置maven依賴
application.properties配置mybatis
org.mybatis.spring.boot mybatis-spring-boot-starter 1.2.0
#關于mapper文件位置和entity類位置,大家需要按自己需要進行修改 mybatis.mapper-locations=classpath*:mapper/*Mapper.xml mybatis.type-aliases-package=com.wanye.entity實踐:通過用戶id查詢指定用戶信息
創建mapper接口 @Mapper
package com.wanye.mapper; import com.wanye.entity.User; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; /** * Created by wanye on 2017/6/3. */ @Repository @Mapper public interface UserMapper { public User getUserById(int id); }
創建mapper.xml
實現查詢?法,在userservice類中增加
@Autowired private UserMapper userMapper; public User getUserById(int id) { return userMapper.getUserById(id); }
在controller中返回Json結果,省略
事務 事務概念及原理定義:從數據庫角度說,就是一組SQL指令,要么全部執行成功,若因為某個原因其中一條指令執行有錯誤,則撤銷先前執行過的所有指令。更簡答的說就是:要么全部執行成功,要么撤銷不執行。
java事務:既然事務的概念從數據庫而來,那Java事務是什么?之間有什么聯系?實際上,一個Java應用系統,如果要操作數據庫,則通過JDBC來實現的。增加、修改、刪除都是通過相應方法間接來實現的,事務的控制也相應轉移到Java程序代碼中。因此,數據庫操作的事務習慣上就稱為Java事務。
實現原理(單機事務):JDBC 事務是用 Connection 對象控制的。JDBC Connection 接口( java.sql.Connection )提供了兩種事務模式:自動提交和手工提交。 java.sql.Connection 提供了以下控制事務的方法:
public void setAutoCommit(boolean) public boolean getAutoCommit() public void commit() public void rollback()
使用 JDBC 事務時,您可以將多個 SQL 語句結合到一個事務中。JDBC 事務的一個缺點是事務的范圍局限于一個數據庫連接。一個 JDBC 事務不能跨越多個數據庫。
JTA(Java Transaction API)事務(多機事務),通過xa實現,需要驅動支持。事務可以跨越多個數據庫或多個DAO,坑比較多,使用也比較復雜。
容器事務,由j2ee容器提供,基本上是基于JTA來實現。局限于EJB應用使用。
如何配置事務使用注解 @EnableTransactionManagement 開啟事務支持,建議在啟動類上增加,例如
@EnableTransactionManagement @SpringBootApplication public class Start { public static void main(String[] args) { SpringApplication.run(Start.class, args); } }
在訪問數據庫的Service方法上添加注解 @Transactional 便可
實踐:實現拷貝用戶信息,并將原用戶的name修改為xiaomingCase1:正常(新增1條記錄name=xiaohong,更新1條記錄name=xiaoming)
Case2:異常(name長度超出varchar(8))導致回滾
userService.java @Transactional public void copyUser(long id, String name) { User user = getUserById(id); int i = jdbcTemplate.update("insert INTO USER (name,age,`CREATE`) VALUES (?,?,?)", new Object[]{user.getName(), user.getAge(), user.getCreate()}); logger.info("復制成功: i=" + i + " name=" + name + " id=" + id); i = jdbcTemplate.update("update USER SET name=? where id=?", new Object[]{name, user.getId()}); logger.info("更新成功:i=" + i + " name=" + name + " id=" + id); } userController.java @RequestMapping("/user/cp/{id}/{name}") public ListcpUser(@PathVariable("id") long id, @PathVariable("name") String name) { userService.copyUser(id, name); return userList(); }
大家自行驗證一下,如果{name}長度超過8個字節,會導致復制成功的數據回滾。另外,mysql數據庫引擎需要使用InnoDB,并不是所有的引擎都支持事務,大家可以查詢數據庫引擎相關資料。
總結本文講解Spring Boot整合JdbcTemplate、整合mybatis,介紹并重點講解了事務處理和配置
本文未提及關于分?查詢和數據庫連接池,我認為分頁查詢的重點是分頁算法如何封裝,并不是Spring Boot關注的重點,大家可以自己實現,
另外現在常用的數據庫連接池有c3p0/dbcp/tomcat-jdbc/HikariCP
順便提一下,在Spring Boot中更改數據源,只需要在application.properties配置文件中增加spring.datasource.type配置即可,例如:
spring.datasource.type=com.zaxxer.hikari.HikariDataSource最后
如果覺得我的文章對您有用,請點贊、收藏。您的支持將鼓勵我繼續創作!為了提高大家學習效果,錄制了同步的視頻課程,還望大家支持視頻課程
優惠報名 【全程擼碼】Spring Boot 1.5 快速入門教程(全)(原價:Spring Boot - 部署Deploy
Spring Boot - 整合jsp后必須通過spring-boot:run方式啟動?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71135.html
摘要:開公眾號差不多兩年了,有不少原創教程,當原創越來越多時,大家搜索起來就很不方便,因此做了一個索引幫助大家快速找到需要的文章系列處理登錄請求前后端分離一使用完美處理權限問題前后端分離二使用完美處理權限問題前后端分離三中密碼加鹽與中異常統一處理 開公眾號差不多兩年了,有不少原創教程,當原創越來越多時,大家搜索起來就很不方便,因此做了一個索引幫助大家快速找到需要的文章! Spring Boo...
摘要:哪吒社區技能樹打卡打卡貼函數式接口簡介領域優質創作者哪吒公眾號作者架構師奮斗者掃描主頁左側二維碼,加入群聊,一起學習一起進步歡迎點贊收藏留言前情提要無意間聽到領導們的談話,現在公司的現狀是碼農太多,但能獨立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區Java技能樹打卡?【打卡貼 day2...
摘要:引入了新的環境和概要信息,是一種更揭秘與實戰六消息隊列篇掘金本文,講解如何集成,實現消息隊列。博客地址揭秘與實戰二數據緩存篇掘金本文,講解如何集成,實現緩存。 Spring Boot 揭秘與實戰(九) 應用監控篇 - HTTP 健康監控 - 掘金Health 信息是從 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring...
摘要:作為微服務的基礎設施之一,背靠強大的生態社區,支撐技術體系。微服務實踐為系列講座,專題直播節,時長高達小時,包括目前最流行技術,深入源碼分析,授人以漁的方式,幫助初學者深入淺出地掌握,為高階從業人員拋磚引玉。 簡介 目前業界最流行的微服務架構正在或者已被各種規模的互聯網公司廣泛接受和認可,業已成為互聯網開發人員必備技術。無論是互聯網、云計算還是大數據,Java平臺已成為全棧的生態體系,...
閱讀 1876·2021-09-24 09:48
閱讀 3220·2021-08-26 14:14
閱讀 1674·2021-08-20 09:36
閱讀 1461·2019-08-30 15:55
閱讀 3628·2019-08-26 17:15
閱讀 1426·2019-08-26 12:09
閱讀 607·2019-08-26 11:59
閱讀 3324·2019-08-26 11:57