<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
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
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 }
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 List<User> getUserList() { return jdbcTemplate.query("select * from user", new RowMapper<User>() { @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; } }); } }
@Autowired private UserService userService; @RequestMapping("/userlist") public List<User> getUserList() { return userService.getUserList(); }
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.2.0</version> </dependency> <!-- 省略mysql驅動依賴 -->
#關於mapper文件位置和entity類位置,你們須要按本身須要進行修改 mybatis.mapper-locations=classpath*:mapper/*Mapper.xml mybatis.type-aliases-package=com.wanye.entity
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); }
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <!-- namespace要指向定義的mapper接口 --> <mapper namespace="com.wanye.mapper.UserMapper"> <!-- id即mapper接口中的具體方法名 --> <!-- resultType即方法返回值--> <select id="getUserById" resultType="com.wanye.entity.User"> SELECT * FROM USER WHERE id = #{id} </select> </mapper>
@Autowired private UserMapper userMapper; public User getUserById(int id) { return userMapper.getUserById(id); }
public void setAutoCommit(boolean) public boolean getAutoCommit() public void commit() public void rollback()
使用 JDBC 事務時,您能夠將多個 SQL 語句結合到一個事務中。JDBC 事務的一個缺點是事務的範圍侷限於一個數據庫鏈接。一個 JDBC 事務不能跨越多個數據庫。java
@EnableTransactionManagement @SpringBootApplication public class Start { public static void main(String[] args) { SpringApplication.run(Start.class, args); } }
Case2:異常(name長度超出varchar(8))致使回滾mysql
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 List<User> cpUser(@PathVariable("id") long id, @PathVariable("name") String name) { userService.copyUser(id, name); return userList(); }
你們自行驗證一下,若是{name}長度超過8個字節,會致使複製成功的數據回滾。另外,mysql數據庫引擎須要使用InnoDB,並非全部的引擎都支持事務,你們能夠查詢數據庫引擎相關資料。web
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
若是以爲個人文章對您有用,請點贊、收藏。您的支持將鼓勵我繼續創做!爲了提升你們學習效果,錄製了同步的視頻課程,還望你們支持視頻課程算法