CRUD开发中两种持久化框架

为什么要使用持久化框架

作为一名Java工程师,开发工程中必不可少会遇到数据持久化问题。而在与数据库交互的过程中,将常规的sql语句通过模板的方式快速生成已经是CRUD开发中必不可少的工具,现在也有很多相关的框架可以使用,例如MybatisPlus、MybatisGenerator等,笔者两个框架都有使用过,在这里想比较一下二者的使用方式及优缺点,供大家更好地选择。

两种持久化框架的说明

MybatisPlus

mybatisPlus的接口框架,利用接口实现的方式封装了一些常用的CRUD方法,最大的好处就是:基本不用写sql,不用写sql,不用写sql!!!像平常用到的CRUD都会有,另外还有批处理的方法可供使用,减少了一大波重复写sql的麻烦。首先,配置方式

引入maven包
 <!-- mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-extension</artifactId>
            <version>3.4.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-core</artifactId>
            <version>3.4.3.1</version>
        </dependency>
数据库配置

datasource的配置各公司可能集成了不同的实现方式,可以使用xml方式配置也可以使用@Configration的注解来代替。

  1. 方式一:使用XML
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mybatisplus?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=UTF8
    username: root
    password: password
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    type-enums-package: com.peter.mybatisplus.enums
  global-config:
    db-config:
      logic-delete-value: 1  # 删除时赋1
      logic-not-delete-value: 0 # 不删除赋0
  1. 方式二:使用@Configration

    @Bean(name = "sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory1(@Qualifier("dataSource") DataSource dataSource,
                                                @Value("classpath:mybatis/mybatis-config.xml") Resource configLocation,
                                                @Value("classpath:mybatis/mapper/*.xml") Resource[] mapperLocations) throws Exception {
        MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setVfs(SpringBootVFS.class);
        sqlSessionFactoryBean.setMapperLocations(mapperLocations);
        sqlSessionFactoryBean.setTypeAliasesPackage("com.*);//多个包用逗号分割
        sqlSessionFactoryBean.setTypeEnumsPackage("com.heyi.qa.abird.enums");
        MybatisConfiguration mc = new MybatisConfiguration();
        mc.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
        mc.setJdbcTypeForNull(JdbcType.NULL);
        mc.setUseColumnLabel(true);
        mc.setMapUnderscoreToCamelCase(true);
        mc.setLogPrefix("mybaits-sql");
        mc.setLogImpl(StdOutImpl.class);
        mc.setCacheEnabled(true);
        sqlSessionFactoryBean.setConfigLocation(configLocation);
        sqlSessionFactoryBean.setGlobalConfig(globalConfiguration());
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        sqlSessionFactoryBean.setPlugins(interceptor);
        return sqlSessionFactoryBean.getObject();
    }
@MapperScan指定到哪里找到Mapper

入口函数里增加@MapperScan的注解:

@SpringBootApplication
@MapperScan(basePackages = {"com.*.mapper","com.baomidou.mybatisplus.core"},
        sqlSessionFactoryRef = "sqlSessionFactory")
        public class Application {
    		public static void main(String[] args) {
				SpringApplication.run(Application.class, args);
	}
}

接下来就可以在工程里使用了。使用方式:
第一,在生成的DO中,使用TableName注解,以User表为例;

@TableName("user")
public class User {
  private Integer id;
  private String name;
  private Integer age;
}

第二,在要使用的Mapper中继承对应的BaseMapper类;

@Component
public interface UserMapper extends BaseMapper<User> {}

第三,进而在ServiceImpl中继承自动生成的ServiceImpl类,在这里就可以使用框架自带的各种操作函数了。

public class DevStoryReqServiceImpl extends ServiceImpl<DevStoryReqMapper, DevStoryReqDO>{
//插入
    public void insert(){
        insert(user);
        saveBatch(list);
    }

//更新
 public void update(){
        updateBatchById(list);
    }

//删除
    public void delete(){
        delete();
    }
}

好处:更改数据库字段之后再也不用担心忘了给sql加字段的问题,编码效率大大提升。

Mybatis Generator

使用mybatis-generator的模板框架,利用模板方式来实现。

引入maven配置

在pom的根结点下配置

<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.7</version>
        </plugin>
    <plugins>    
</build>

插件配置

使用插件配置来

<plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>${mybatis.generator.version}</version>
                <configuration>
                    <configurationFile>src/main/resources/mybatis-generator/generatorConfig.xml</configurationFile>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
                <executions>
                    <execution>
                        <id>Generate MyBatis Artifacts</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>com.taobao.tddl</groupId>
                        <artifactId>tddl-client</artifactId>
                        <version>5.1.23-2</version>
                        <scope>compile</scope>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>

按照上文中的路径配置的genrationConfig.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- 配置文件路径 -->
    <!--数据库驱动包路径 在maven插件添加就可以了 -->

    <context id="MySQLTables" targetRuntime="MyBatis3">

        <plugin type="org.mybatis.generator.plugins.RenameExampleClassPlugin">
            <property name="searchString" value="Example$"/>
            <property name="replaceString" value="Criteria"/>
        </plugin>

        <!--关闭注释 -->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!--数据库连接信息 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://****"
                        userId="***" password="***">
        </jdbcConnection>
        <!--生成的model 包路径 -->
        <javaModelGenerator targetPackage="com.*"
                            targetProject="src/main/java">
            <property name="trimStrings" value="false"/>
        </javaModelGenerator>
        <!--生成xml mapper文件 路径 -->
        <sqlMapGenerator targetPackage="mybatis"
                         targetProject="../*/src/main/resources">
            <property name="enableSubPackages" value="true"></property>
        </sqlMapGenerator>
        <!-- 生成的java mapper接口的包路径 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.*.mybatis.mapper" targetProject="src/main/java">
        </javaClientGenerator>

        <table tableName="user" domainObjectName="*DO">
        </table>
    </context>
</generatorConfiguration>

使用方式:以


的形式配置,执行mvn mybatis-generator:generate,通过配置可生成DO对应的mapper接口以及对应的xml,如下图 在这里插入图片描述

好处:不用手动加字段,每次可以连接数据库自动进行字段补齐。但是会生成一堆可能无用的sql,十分影响视觉。

总结

两种方式各有优劣,但在设计模式上有 一些共同点,下一篇会分享一下二者在设计思路上有哪些异同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值