源无极

导航

 

一、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、关闭连接,释放资源

           对原始的java访问数据库方式流程进行封装,于是apache的dbutils出来了

        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
        

          Mybatis和hibernate对比

       Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。

     Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。

     Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。

总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。

 

二、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/ 下载)
                    
          

 1                  <!-- 引入starter-->
 2                     <dependency>
 3                         <groupId>org.mybatis.spring.boot</groupId>
 4                         <artifactId>mybatis-spring-boot-starter</artifactId>
 5                         <version>1.3.2</version>
 6                         <scope>runtime</scope>                
 7                     </dependency>
 8                      
 9                <!-- MySQL的JDBC驱动包    -->    
10                      <dependency>
11                         <groupId>mysql</groupId>
12                         <artifactId>mysql-connector-java</artifactId>
13                         <scope>runtime</scope>
14                     </dependency> 
15                 <!-- 引入第三方数据源 -->        
16                     <dependency>
17                         <groupId>com.alibaba</groupId>
18                         <artifactId>druid</artifactId>
19                         <version>1.1.6</version>
20                     </dependency>

 

       此外添加热部署的依赖

    

1        <dependency>
2             <groupId>org.springframework.boot</groupId>
3             <artifactId>spring-boot-devtools</artifactId>
4             <optional>true</optional>
5         </dependency>

 

        3、加入配置文件
           

1             #mybatis.type-aliases-package=net.xdclass.base_project.domain
2             #可以自动识别
3             #spring.datasource.driver-class-name =com.mysql.jdbc.Driver
4 
5             spring.datasource.url=jdbc:mysql://localhost:3306/movie?useUnicode=true&characterEncoding=utf-8
6             spring.datasource.username =root
7             spring.datasource.password =password
8             #如果不使用默认的数据源 (com.zaxxer.hikari.HikariDataSource)
9             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")

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

        5、sql脚本
          

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

 

当然写好我们的实体


        相关资料:
        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

6、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代码     

     1)添加数据

 ​     2)service的接口

3)实现service接口

4)写controller

5)访问

6)数据库 id=1,和2的数据我删除了嘿嘿,id从3开始

验证使用的数据源

 1.我们一开始使用的是阿里巴巴的数据源,访问之后,查看控制台是可以看到的

现在我将配置文件注释掉

启动程序,访问再查看

此时用的是默认的数据源

好的,添加数据的步骤结束

7.我们有时候希望sql语句打印出来方便我调式,怎么配呢?

在application.properties中配置如

mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

1)启动程序(如果配置了热部署直接保存即可),访问

2)查看控制台

注意  这四个参数和Values里面的?号对应的

8. 增删改查比较简单,我只重点介绍原理

9.由于我们的业务很简单,增删改查就不通过Service层了,直接将UserMapper结果引用到controller

1)

2)访问即可

3)查询

4)更新

5)删除

 

三、事务介绍和常见的隔离级别,传播行为
    


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

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

    单机事务介绍转账的案例  : 一个数据库

分布式事务  微服务中会涉及多个数据库,必须用分布式事务

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


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

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

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

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

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

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

四、SpringBoot整合mybatis之事务处理实战


    简介:SpringBoot整合Mybatis之事务处理实战
    1、service 先不引入事务的异常

  

 2、controller代码
      

3.启动访问  报异常

看看数据库  数据插入了,显然是不应该的

4.我们加入事务注解

5.启动访问

虽然也还是报异常

但是数据库并没有添加数据

Propagation 默认的传播行为

posted on 2018-11-29 22:16  源无极  阅读(186)  评论(0编辑  收藏  举报