1、SpringBoot2.x持久化数据方式介绍
    
     简介:介绍近几年常用的访问数据库的方式和优缺点

1、原始java访问数据库
             开发流程麻烦
             1、注册驱动/加载驱动
                 Class.forName("com.mysql.jdbc.Driver")
             2、建立连接
                 Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname","root","root");
             3、创建Statement

4、执行SQL语句

5、处理结果集

6、关闭连接,释放资源

2、apache dbutils框架
             比上一步简单点
             官网:https://commons.apache.org/proper/commons-dbutils/
         3、jpa框架
             spring-data-jpa
             jpa在复杂查询的时候性能不是很好
        
         4、Hiberante   解释:ORM:对象关系映射Object Relational Mapping
             企业大都喜欢使用hibernate
        
         5、Mybatis框架  
             互联网行业通常使用mybatis
             不提供对象和关系模型的直接映射,半ORM

2、SpringBoot2.x整合Mybatis3.x注解实战
     简介:SpringBoot2.x整合Mybatis3.x注解配置实战

1、使用starter, maven仓库地址:http://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter

2、加入依赖(可以用 http://start.spring.io/ 下载)
                    
             <!-- 引入starter-->
                     <dependency>
                         <groupId>org.mybatis.spring.boot</groupId>
                         <artifactId>mybatis-spring-boot-starter</artifactId>
                         <version>1.3.2</version>
                         <scope>runtime</scope>               
                     </dependency>
                     
              <!-- MySQL的JDBC驱动包    -->   
                      <dependency>
                         <groupId>mysql</groupId>
                         <artifactId>mysql-connector-java</artifactId>
                         <scope>runtime</scope>
                     </dependency>
             <!-- 引入第三方数据源 -->       
                     <dependency>
                         <groupId>com.alibaba</groupId>
                         <artifactId>druid</artifactId>
                         <version>1.1.6</version>
                     </dependency>

3、加入配置文件(application.properties)
             #mybatis.type-aliases-package=net.xdclass.base_project.domain
             #可以自动识别
             #spring.datasource.driver-class-name =com.mysql.jdbc.Driver

spring.datasource.url=jdbc:mysql://localhost:3306/movie?useUnicode=true&characterEncoding=utf-8
             spring.datasource.username =root
             spring.datasource.password =password
             #如果不使用默认的数据源 (com.zaxxer.hikari.HikariDataSource)
             spring.datasource.type =com.alibaba.druid.pool.DruidDataSource

加载配置,注入到sqlSessionFactory等都是springBoot帮我们完成

4、启动类增加mapper扫描
             @MapperScan("net.xdclass.base_project.mapper")

技巧:保存对象,获取数据库自增id
              @Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")

说明:keyProperty java对象的属性;keyColumn表示数据库的字段

4、开发mapper
             参考语法 http://www.mybatis.org/mybatis-3/zh/java-api.html

5、sql脚本
             CREATE TABLE `user` (
               `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
               `name` varchar(128) DEFAULT NULL COMMENT '名称',
               `phone` varchar(16) DEFAULT NULL COMMENT '用户手机号',
               `create_time` datetime DEFAULT NULL COMMENT '创建时间',
               `age` int(4) DEFAULT NULL COMMENT '年龄',
               PRIMARY KEY (`id`)
             ) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;

controller——存放api

domain——存放实体类

mapper/dao——访问数据库接口

service——业务层

utils——工具类

警告:WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

解决:在数据库配置文件中加入useSSL=false

代码实例:

controller/UserController.java:

  1 package net.xdclass.base_project.controller;
  2
  3
  4 import java.util.Date;
  5
  6 import net.xdclass.base_project.domain.JsonData;
  7 import net.xdclass.base_project.domain.User;
  8 import net.xdclass.base_project.service.UserService;
  9
 10 import org.springframework.beans.factory.annotation.Autowired;
 11 import org.springframework.web.bind.annotation.GetMapping;
 12 import org.springframework.web.bind.annotation.RequestMapping;
 13 import org.springframework.web.bind.annotation.RestController;
 14
 15 @RestController
 16 @RequestMapping("/api/v1/user")
 17 public class UserController {
 18
 19
 20     @Autowired
 21     private UserService userService;
 22
 23
 24     /**
 25      * 功能描述: user 保存接口
 26      * @return
 27      */
 28     @GetMapping("add")
 29     public Object add(){
 30
 31         User user = new User();
 32         user.setAge(11);
 33         user.setCreateTime(new Date());
 34         user.setName("xdclass");
 35         user.setPhone("10010000");
 36         int id = userService.add(user);
 37
 38        return JsonData.buildSuccess(id);
 39     }
 40
 41 //  @Autowired
 42 //  private UserMapper userMapper;
 43 //
 44 //
 45 //
 46 //  @GetMapping("findAll")
 47 //  public Object findAll(){ 48 //
 49 //       return JsonData.buildSuccess(userMapper.getAll());
 50 //  }
 51 //
 52 //
 53 //
 54 //  @GetMapping("findById")
 55 //  public Object findById(long id){ 56 //       return JsonData.buildSuccess(userMapper.findById(id));
 57 //  }
 58 //
 59 //
 60 //  @GetMapping("del_by_id")
 61 //  public Object delById(long id){ 62 //  userMapper.delete(id);
 63 //       return JsonData.buildSuccess();
 64 //  }
 65 //
 66 //  @GetMapping("update")
 67 //  public Object update(String name,int id){ 68 //      User user = new User();
 69 //      user.setName(name);
 70 //      user.setId(id);
 71 //      userMapper.update(user);
 72 //      return JsonData.buildSuccess();
 73 //  }
 74 //
 75
 76 //  //测试事务
 77 //  @GetMapping("transac")
 78 //  public Object transac(){ 79 //      int id = userService.addAccount();
 80 //      return JsonData.buildSuccess(id);
 81 //  }
 82 //
 83 //
 84
 85 }
 86 

实体类User.java:

  1 package net.xdclass.base_project.domain;
  2
  3 import java.util.Date;
  4
  5 public class User {
  6
  7     private int id;
  8
  9     private String name;
 10
 11     private String phone;
 12
 13     private int age;
 14
 15     private Date createTime;
 16
 17     public int getId() {
 18         return id;
 19     }
 20
 21     public void setId(int id) {
 22         this.id = id;
 23     }
 24
 25     public String getName() {
 26         return name;
 27     }
 28
 29     public void setName(String name) {
 30         this.name = name;
 31     }
 32
 33     public String getPhone() {
 34         return phone;
 35     }
 36
 37     public void setPhone(String phone) {
 38         this.phone = phone;
 39     }
 40
 41     public int getAge() {
 42         return age;
 43     }
 44
 45     public void setAge(int age) {
 46         this.age = age;
 47     }
 48
 49     public Date getCreateTime() {
 50         return createTime;
 51     }
 52
 53     public void setCreateTime(Date createTime) {
 54         this.createTime = createTime;
 55     }
 56
 57
 58
 59
 60 }
 61 

UserMapper.java:

  1 package net.xdclass.base_project.mapper;
  2
  3 import net.xdclass.base_project.domain.User;
  4
  5 import org.apache.ibatis.annotations.Insert;
  6 import org.apache.ibatis.annotations.Options;
  7
  8 public interface UserMapper {
  9
 10
 11     //推荐使用#{}取值,不要用${},因为存在注入的风险
 12      @Insert("INSERT INTO user(name,phone,create_time,age) VALUES(#{name}, #{phone}, #{createTime},#{age})")
 13      @Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")   //keyProperty java对象的属性;keyColumn表示数据库的字段
 14      int insert(User user);
 15
 16
 17
 18
 19 //
 20 //    @Select("SELECT * FROM user")
 21 //    @Results({ 22 //        @Result(column = "create_time",property = "createTime")  //javaType = java.util.Date.class
 23 //    })
 24 //    List<User> getAll();
 25 //
 26 //
 27 //
 28 //    @Select("SELECT * FROM user WHERE id = #{id}")
 29 //    @Results({ 30 //       @Result(column = "create_time",property = "createTime")
 31 //    })
 32 //    User findById(Long id);
 33 //
 34 //
 35 //
 36 //    @Update("UPDATE user SET name=#{name} WHERE id =#{id}")
 37 //    void update(User user);
 38 //
 39 //    @Delete("DELETE FROM user WHERE id =#{userId}")
 40 //    void delete(Long userId);
 41 //
 42 }

UserService.java:

  1 package net.xdclass.base_project.service;
  2
  3 import net.xdclass.base_project.domain.User;
  4
  5 public interface UserService {
  6
  7     public int add(User user);
  8
  9
 10
 11     //public int addAccount();
 12
 13 }
 14 

UserServiceImpl.java:

  1 package net.xdclass.base_project.service.impl;
  2
  3 import java.util.Date;
  4
  5 import net.xdclass.base_project.domain.User;
  6 import net.xdclass.base_project.mapper.UserMapper;
  7 import net.xdclass.base_project.service.UserService;
  8
  9 import org.springframework.beans.factory.annotation.Autowired;
 10 import org.springframework.stereotype.Service;
 11 import org.springframework.transaction.annotation.Transactional;
 12
 13 @Service
 14 public class UserServiceImpl implements UserService{
 15
 16     @Autowired
 17     private UserMapper userMapper;
 18
 19     @Override
 20     public int add(User user) {
 21         userMapper.insert(user);
 22         int id = user.getId();
 23         return id;
 24     }
 25
 26
 27
 28
 29
 30
 31 }
 32 

浏览器输入:http://localhost:8080/api/v1/user/add

数据库查看:

添加成功

相关资料:
         http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/#Configuration

https://github.com/mybatis/spring-boot-starter/tree/master/mybatis-spring-boot-samples

整合问题集合:
             https://my.oschina.net/hxflar1314520/blog/1800035
             https://blog.csdn.net/tingxuetage/article/details/80179772

3、SpringBoot2.x整合Mybatis3.x增删改查实操和控制台打印SQL语句
     讲解:SpringBoot2.x整合Mybatis3.x增删改查实操, 控制台打印sql语句
    
     1、控制台打印sql语句       
         #增加打印sql语句,一般用于本地开发测试
         mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

2、增加mapper代码       
         @Select("SELECT * FROM user")
         @Results({
             @Result(column = "create_time",property = "createTime")  //javaType = java.util.Date.class       
         })
         List<User> getAll();
      
         @Select("SELECT * FROM user WHERE id = #{id}")
         @Results({
              @Result(column = "create_time",property = "createTime")
         })
         User findById(Long id);

@Update("UPDATE user SET name=#{name} WHERE id =#{id}")
         void update(User user);

@Delete("DELETE FROM user WHERE id =#{userId}")
         void delete(Long userId);
     
      3、增加API

@GetMapping("find_all")
         public Object findAll(){
            return JsonData.buildSuccess(userMapper.getAll());
         }
        
         @GetMapping("find_by_Id")
         public Object findById(long id){
            return JsonData.buildSuccess(userMapper.findById(id));
         }
        
         @GetMapping("del_by_id")
         public Object delById(long id){
         userMapper.delete(id);
            return JsonData.buildSuccess();
         }
        
         @GetMapping("update")
         public Object update(String name,int id){
             User user = new User();
             user.setName(name);
             user.setId(id);
             userMapper.update(user);
             return JsonData.buildSuccess();
         }

4、事务介绍和常见的隔离级别,传播行为
    
     简介:讲解什么是数据库事务,常见的隔离级别和传播行为

1、介绍什么是事务,单机事务,分布式事务处理等

2、讲解场景的隔离级别
         Serializable: 最严格,串行处理,消耗资源大
         Repeatable Read:保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据
         Read Committed:大多数主流数据库的默认事务等级
         Read Uncommitted:保证了读取过程中不会读取到非法数据。

3、讲解常见的传播行为
         PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务,最常见的选择。

PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起, 两个事务之间没有关系,一个异常,一个提交,不会同时回滚

PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常

5、SpringBoot整合mybatis之事务处理实战
     简介:SpringBoot整合Mybatis之事务处理实战
     1、service逻辑引入事务 @Transactional(propagation=Propagation.REQUIRED)

2、service代码
         @Override
         @Transactional(propagation=Propagation.REQUIRED)
         public int addAccount() {
             User user = new User();
             user.setAge(9);
             user.setCreateTime(new Date());
             user.setName("事务测试");
             user.setPhone("000121212");
            
             userMapper.insert(user);
             int a = 1/0;

return user.getId();
         }

转载于:https://www.cnblogs.com/116970u/p/10258191.html

数据库操作之整合Mybaties和事务讲解 5节课相关推荐

  1. php pdo 事物类,一个基于PDO的数据库操作类(新) 一个PDO事务实例

    /* * 作者:胡睿 * 日期:2011/03/19 * 电邮:hooray0905@foxmail.com * * 20110319 * 常用数据库操作,如:增删改查,获取单条记录.多条记录,返回最 ...

  2. 轻轻松松学习SpringBoot2:第十九篇: 数据库操作(三):事务

    数据库的操作离开不了事务, 那么在SpringBoot中如何使用事务呢 答案:使用注解 @Transactional,在需要使用事务的方法上面加入@Transactional注解 @Transacti ...

  3. odbc c语言 linux,C语言ODBC数据库操作

    今天我们来介绍一下C语言操作数据库的方法,这里我们使用的是ODBC方式.环境是WIN7+VC6.其他环境也差不多,具体情况具体分析. 首先是环境的配置以及数据源的添加.这里就不去解释了,相关资料网上有 ...

  4. SpringBoot整合JDBC数据库操作第二弹-配置基本数据库连接源

    SpringBoot整合JDBC数据库操作第二弹-配置基本数据库连接源 上篇文章我们讲到了如何配置整合JDBC的基础环境,这篇文章我们讲解一下如何去配置服务的DataSource数据库数据源,方便其对 ...

  5. SpringBoot整合JDBC数据库操作第七弹-自定义RowMapper

    SpringBoot整合JDBC数据库操作第七弹-自定义RowMapper 上篇文章我们讲到了怎么对数据的查询操作,每次查询数据都会在返回中构建一个匿名类去封装返回结果,这样的话导致我们有大量的冗余代 ...

  6. DJango周总结二:模型层,单表,多表操作,连表操作,数据库操作,事务

    django周复习二  1,模型层:   1单表操作:    13个必会操作总结     返回QuerySet对象的方法有     all()     filter()     exclude()   ...

  7. 《MySQL》入门基础知识点大全:数据库操作、增删改查、联表查询、常用函数、MD5加密、事务特性、隔离级别

    MySQL基础知识大全 1.操作数据库 1.1 创建表 1.2 修改表名 1.3 增加表的字段 1.4 修改表的字段 1.4.1 修改表的字段 1.4.2 修改表名 1.5 删除表的字段 1.6 删除 ...

  8. Java后端之数据库操作事务回滚

    什么是事物 事物是应用程序中一系列操作,事物完成是指所有的操作都完成,事物不完成是指一个操作也不能完成,事物结束有两种情况,当事务中的所有步骤全部完成时,事务提交,如果一个步骤失败,则发生回滚操作,撤 ...

  9. Spring Boot操作数据库学习之整合JDBC

    文章目录 一 Spring Data简介 二 Spring Boot集成JDBC 2.1 项目创建步骤 2.2 测试的SQL脚本 2.3 编写yaml配置文件连接数据库 2.4 IDEA连接数据库步骤 ...

  10. 转载:LINQ to SQL更新数据库操作

    翻译整理ScottGu的关于LINQ to SQL的Part 4: Updating our Database .该Post讲解了如何使用LINQ to SQL更新数据库,以及如何整合业务逻辑和自定义 ...

最新文章

  1. 计算机软件出版,[计算机软件及应用]出版信息管理系统.doc
  2. 九、探索性数据分析的应用
  3. K8S——关于K8S控制台的yaml文件编写(基于上一章多节点K8S部署)
  4. SAP Spartacus layoutSlots ID 和 CMSComponent 的映射关系
  5. xtrabackup 官方原理
  6. sapmto生产模式配置及操作详解_硬岩制砂线怎么设计?300t/h的生产流程与设备配置详解...
  7. echart freemarker 模板_SpringBoot集成Freemarker模板生成Echarts图片(三)
  8. pythonjava app切出后无网络连接_Python爬虫爬资源时由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。怎么破?...
  9. C语言、指针的指针和野指针的问题
  10. [LAMP]——mod_security和mod_evasive模块的安装
  11. TensorFlow 学习------第一天
  12. php 数据结构set,ES6的Set数据结构是什么
  13. c语言程序 题库管理,C语言程序设计题库管理.doc
  14. WebRAY网站检查技术支撑平台的实践
  15. 企业局域网管理软件_WorkWin局域网管理软件 企业必备监控神器
  16. 使用wireshark抓包获取湖北电信校园网飞Young宽带客户端加密后的账号密码
  17. 案例分析|戴森如何以DTC全渠道营销打造百亿规模增长
  18. android-手势密码
  19. 用C语言打印简单图案(爱心\圆形\三角形等)
  20. oracle查看锁定任务

热门文章

  1. sass安装:webpack sass编译失败,node-sass安装失败的终极解决方
  2. ijkplayer框架详解
  3. 手把手玩转win8开发系列课程(9)
  4. 可更新聚集列存储索引幻想
  5. (四)伪分布式下jdk1.6+Hadoop1.2.1+HBase0.94+Eclipse下运行wordCount例子
  6. 核PCA与PCA的精髓和核函数的映射实质
  7. direct3d Colorkey 应用.
  8. java 一元线性回归_Java中的多元线性回归
  9. resin 配置 java_home_resin的安装与配置 - chencheng-linux的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. 测试类报错:空指针异常