springboot成神之——spring boot,spring jdbc和spring transaction的使用
本文介绍spring boot,spring jdbc和spring transaction的使用
项目结构

依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
application
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=123
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
server.tomcat.uri-encoding=UTF-8
server.port=8888
model层
// 模型层 User.java
package com.springlearn.learn.model;
public class User{
private Integer id;
private String name;
private Integer age;
private String sex;
public User(Integer id, String name, Integer age, String sex) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
public String getSex() {
return sex;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public void setSex(String sex) {
this.sex = sex;
}
}
mapper层
// UserMapper.java
// 这个层mapper是将数据映射到model层
package com.springlearn.learn.mapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.springlearn.learn.model.User;
import org.springframework.jdbc.core.RowMapper;
public class UserMapper implements RowMapper<User> {
public static final String sql = "select * from test";
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
Integer id = rs.getInt("id");
String name = rs.getString("name");
Integer age = rs.getInt("age");
String sex = rs.getString("sex");
return new User(id, name, age, sex);
}
}
dao层
// UserDao.java
// dao就是Data Access Object,数据访问对象
// @Transactional(propagation = Propagation.MANDATORY) 声明事务
// MANDATORY只能在其他事物中调用此事务
// REQUIRES_NEW 创建一个新事务并且执行,其他事务挂起
// rollbackFor = UserTransactionException.class 只要抛出了UserTransactionException异常,事务回滚
package com.springlearn.learn.dao;
import java.util.List;
import javax.sql.DataSource;
import com.springlearn.learn.exception.UserTransactionException;
import com.springlearn.learn.mapper.UserMapper;
import com.springlearn.learn.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@Repository
@Transactional
public class UserDao extends JdbcDaoSupport {
@Autowired
public UserDao(DataSource dataSource) {
this.setDataSource(dataSource);
}
public List<User> getUser() {
String sql = UserMapper.sql;
UserMapper userMapper = new UserMapper();
List<User> list = this.getJdbcTemplate().query(sql, userMapper);
return list;
}
public User getUserById(Integer id) {
String sql = UserMapper.sql+" where id = ?";
Object[] params = new Object[]{id};
UserMapper userMapper = new UserMapper();
User user = this.getJdbcTemplate().queryForObject(sql, params, userMapper);
return user;
}
@Transactional(propagation = Propagation.MANDATORY)
public void addAge(Integer id, int addnum) throws UserTransactionException{
User user = this.getUserById(id);
if(user == null) {
throw new UserTransactionException("User not found" + id);
}
int newAge = user.getAge() + addnum;
if(newAge < 0) {
throw new UserTransactionException("The Age in the User" + id + "is illegal" + newAge);
}
user.setAge(newAge);
String sql = "update test set age = ? where id = ?;";
this.getJdbcTemplate().update(sql, user.getAge(),user.getId());
}
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = UserTransactionException.class)
public void setAge(int id, int addnum) throws UserTransactionException{
addAge(id, addnum);
}
}
exception层
// UserTransactionException.java
package com.springlearn.learn.exception;
public class UserTransactionException extends Exception {
private static final long serialVersionUID = -3128681006635769411L;
public UserTransactionException(String message) {
super(message);
}
}
MainController
// MainController.java
package com.springlearn.learn.controller;
import java.util.List;
import com.springlearn.learn.dao.UserDao;
import com.springlearn.learn.exception.UserTransactionException;
import com.springlearn.learn.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MainController {
@Autowired
private UserDao userdao;
@ResponseBody
@RequestMapping(value="/", method=RequestMethod.GET)
public List<User> showAllUser(Model model) {
List<User> list = userdao.getUser();
model.addAttribute("userinfos", list);
return list;
}
@ResponseBody
@RequestMapping(value = "/setAge", method = RequestMethod.GET)
public String setUserAge(@RequestParam(value="id") int id, @RequestParam(value="addnum") int addnum) {
try{
userdao.setAge(id, addnum);
return "Ok";
}catch (UserTransactionException e){
return e.getMessage();
}
}
}
springboot成神之——spring boot,spring jdbc和spring transaction的使用的更多相关文章
- Spring Boot 整合JDBC 实现后端项目开发
一.前言 二.新建Spring Boot 项目 三.Spring Boot 整合JDBC 与MySQL 交互 3.1 新建数据表skr_user 3.2 Jdbcproject 项目结构如下 3.3 ...
- Spring Boot系列(三) Spring Boot 之 JDBC
数据源 类型 javax.sql.DataSource javax.sql.XADataSource org.springframework.jdbc.datasource.embedded,Enbe ...
- 【自学Spring Boot】什么是Spring Boot
为啥要有Spring Boot? 以前大学刚开始学java web的时候,需要搭建起web框架,当时使用的是SSH(struts+spring+hibernate),那就开始搭建吧,初学者哪里知道整套 ...
- Spring Boot(十二):spring boot如何测试打包部署
Spring Boot(十二):spring boot如何测试打包部署 一.开发阶段 1,单元测试 在开发阶段的时候最重要的是单元测试了,springboot对单元测试的支持已经很完善了. (1)在p ...
- springboot成神之——ioc容器(依赖注入)
springboot成神之--ioc容器(依赖注入) spring的ioc功能 文件目录结构 lang Chinese English GreetingService MyRepository MyC ...
- Spring Boot 项目学习 (三) Spring Boot + Redis 搭建
0 引言 本文主要介绍 Spring Boot 中 Redis 的配置和基本使用. 1 配置 Redis 1. 修改pom.xml,添加Redis依赖 <!-- Spring Boot Redi ...
- Spring Boot配置篇(基于Spring Boot 2.0系列)
1:概述 SpringBoot支持外部化配置,配置文件格式如下所示: properties files yaml files environment variables command-line ar ...
- 【Spring Boot学习之三】Spring Boot整合数据源
环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 一.Spring Boot整合Spring JDBC 1.pom.xml <project xmlns=&quo ...
- Spring Boot 学习1-创建Spring Boot应用
如果使用Maven, 确保先安装好Maven再继续. 创建POM文件 在这里有两种方式: 继承Spring Boot parent的pom. 不继承. 继承Spring Boot pom 1 2 3 ...
- [转]Spring Boot——2分钟构建spring web mvc REST风格HelloWorld
Spring Boot——2分钟构建spring web mvc REST风格HelloWorld http://projects.spring.io/spring-boot/ http://spri ...
随机推荐
- 如何让pycharm以py.test方式运行
第一步:进入File—Settings—Python Integrated Tools 发现设置中Default test runner是Unittests 将其改为py.test,点击OK保存 如果 ...
- grunt,gulp,webpack前端打包工具的特性
1.http://www.cnblogs.com/lovesong/p/6413546.html (gulp与webpack的区别) 2.http://blog.csdn.net/qq_3231263 ...
- Linux 下硬链接和软链接的说明
Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln 命令产生硬链接. 硬连接 硬连接指通过索引节点来进行连接.在 Li ...
- MSSQL旋转和反旋转的例子
1.旋转 ;WITH CTE AS ( AS VAL UNION ALL UNION ALL UNION ALL UNION ALL UNION ALL UNION ALL UNION ALL ) S ...
- vue: data binding
1.文本 第一种“Mustache” 语法(双大括号)写法第二种 用v-text的指今写法第三种和第四是对es6写法的拓展写法,称模板字符串 <template> <div> ...
- 用js 创建 简单查找 删除 二叉树
<!DOCTYPE html> <html> <body> <canvas id="myCanvas" width="2000& ...
- Java基本数据对应的封装类
Java基本数据对应的封装类 在java中一切都是以类为基础的,并且java对基本的数据类型也进行了封装,如下所示,将介绍几个基本的数据类型及其封装类: 1 Boolean VS boolean pu ...
- 激活函数之ReLU/softplus介绍及C++实现
softplus函数(softplus function):ζ(x)=ln(1+exp(x)). softplus函数可以用来产生正态分布的β和σ参数,因为它的范围是(0,∞).当处理包含sigmoi ...
- 目标跟踪之ECO:Efficient Convolution Operators for Tracking
一. 相关滤波算法总结 作者首先分析了 影响相关滤波算法效率 和 导致过拟合 的几个原因: 1)Model Size (模型大小) 包括两个方面: - 模型层数,对应多分辨率 Sample,比如多层 ...
- matlab批量转化img到gray
path = 'D:\宝贝儿数据集\COIL-3D\coil-100\'; save_path = 'D:\宝贝儿数据集\COIL-3D\coil-100-gray\'; file=dir([path ...