美文网首页
【后端】集成mybatis以及orm框架和插件的个人看法

【后端】集成mybatis以及orm框架和插件的个人看法

作者: 临窗旋墨 | 来源:发表于2020-07-07 17:34 被阅读0次

    [TOC]

    002-集成mybatis以及orm框架和插件的个人看法

    文章来源:临窗旋墨的博客

    1-orm框架选择和插件的个人看法

    ​ 在springboot中使用jpa已经非常的方便了,当然也需要额外的花点学习的成本. 但是我个人是不大喜欢JPA这套规范下的代码的,有太多的不可控因素,对于研究不深的人使用起来就是灾难. 曾使用hiberndate的时候就遇到过持久代持续增长和级联查询IO过频等问题,暂且不表. JPA唯一的好处,我个人看来是对单表的操作,当关联关系复杂时,从优化层面就难以控制了(限于本人水平有限). 当然JPA也支持原生的sql,但是和相比于已经很难看的xml里的sql, 注解里的sql的可读性就更差了,所以放弃了JAP.

    ​ 放弃了JPA, 也不是完全代码mybatis就一定有多好; 比如, 首先就是移植性不好, 这个也暂且忽略吧。 另外当表结构发生变化的时候,修改起来也是非常麻烦的, 需要手动一处处的修改; 另外在xml中写sql,个人感官也比较一般, 看着也不是那么的舒服。 不过我个人还是稍微倾向于自己手动编写sql, 可控性稍微强一些。

    ​ 选择mybatis时也有一点小小的纠结,就是是否需要使用tk.mybatis或者mybatis-plus等,想了很久,决定全部放弃。基于个人对二者了解程度有限,单纯觉得两者都要写实体上写注解, 使DO(data obejct) 和VO界限不清,如果完全区分VO和DO 则又需要中间一层的转换,而使用DO作为VO, 难免有需要对对象做一些调整. 虽然二者都可以结合generator自动生成代码,但是个人还是不喜欢(大概是鸡蛋里挑骨头吧).

    ​ 最终还是坚持选择了原生的mybatis,但是个人也会写一个代码生成器(在后续得空在记录下来吧),生成简单的增删改查等根据业务需要使用的通用单表处理. 如此自主程度会更高.

    2-集成mybatis

    2.1-创建数据库(mysql)

    CREATE DATABASE boot DEFAULT CHARSET utf8;
    GRANT ALL PRIVILEGES ON boot.* TO 'boot'@'localhost' IDENTIFIED BY '12345678';
    -- mysql8 
    -- CREATE USER 'boot'@'%' IDENTIFIED BY '12345678';
    -- GRANT ALL PRIVILEGES ON boot.* TO 'boot'@'%' WITH GRANT OPTION;
    
    FLUSH PRIVILEGES;
    
    -- 追加相同的字段
    /*
    ALTER TABLE table_name ADD (
     `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      `is_enable` TINYINT(1) DEFAULT '1' COMMENT '是否启用',
      `is_delete` TINYINT(1) DEFAULT '0' COMMENT '是否删除'
    );
    
    */
    

    2.2-新增依赖

    <!-- mysql连接类 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    
    <!-- mybatis 依赖 -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
    </dependency>
    

    2.3-配置数据库和mybatis

    # mysql
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/boot?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=true
    spring.datasource.username=boot
    spring.datasource.password=password
    
    # mybatis 配置 
    mybatis.config-location=classpath:config/mybatis-config.xml
    mybatis.mapper-locations=classpath:mapper/**/*.xml
    
    
    • 新增mybatis-config.xml文件
    <?xml version="1.0" encoding="UTF-8" ?>  
    <!DOCTYPE configuration  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <settings>
            <setting name="logImpl" value="STDOUT_LOGGING" />
        </settings>
    </configuratio
    

    2.4-启动类开启扫描mapper注解

    • @MapperScan(basePackages = "pers.vic.boot.console.**.mapper")

    2.5 测试mybatis

    1. 建表

      -- ALTER TABLE test_mybatis   MODIFY COLUMN update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ;
      
        CREATE TABLE `test_mybatis` (
        `id` INT(11) NOT NULL AUTO_INCREMENT,
        `name` VARCHAR(64) NOT NULL,
        `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
        `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        PRIMARY KEY (`id`)
      ) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='测试mybatis的表'
      ;
      
      1. 编写xml 略
      2. mapper略
      3. service 略

    3-集成分页插件

    1. 依赖

      <dependency>
          <groupId>com.github.pagehelper</groupId>
          <artifactId>pagehelper-spring-boot-starter</artifactId>
      </dependency>
      
    2. 配置文件修改

      pagehelper.helper-dialect=mysql
      #pagehelper.reasonable=false
      #pagehelper.support-methods-arguments=false
      #pagehelper.params=count=countsql
      
      
    3. 使用插件,在service中查询之前PageHelper.startPage(pageNum, pageSize);

    文章来源:临窗旋墨的博客

    相关文章

      网友评论

          本文标题:【后端】集成mybatis以及orm框架和插件的个人看法

          本文链接:https://www.haomeiwen.com/subject/lirzqktx.html