一般文章让你了解mybatis,以及如今在Java开发的地位!

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 一般文章让你了解mybatis,以及如今在Java开发的地位!

一.了解mybatis!

A.什么是mybatis?

MyBatis是一个开源的持久层框架,它简化了在Java应用程序中使用关系型数据库的开发工作。MyBatis提供了将SQL语句和Java代码进行解耦的能力,使得应用程序可以通过简单的配置来访问数据库,并实现了对SQL查询、插入、更新和删除等操作的支持

B.MyBatis这款框架的一些特点

SQL与Java代码解耦

MyBatis使用XML或注解来定义SQL映射关系,将SQL语句与Java代码进行解耦。这样,开发人员无需编写大量的JDBC代码,可以集中精力于业务逻辑的实现

灵活的SQL查询

MyBatis支持灵活的动态SQL查询,可以根据不同的条件动态构建SQL语句,并且提供了强大的SQL语句处理能力,如条件判断、循环等。这样可以方便地编写复杂的查询语句。

对象-关系映射

MyBatis提供了通过对象-关系映射(ORM)将查询结果映射为Java对象的能力。开发人员可以通过配置简单的映射规则,将数据库表的数据映射到相应的Java对象中,简化了数据的获取和处理过程。

缓存机制

MyBatis支持一级缓存和二级缓存机制,提高了数据库访问性能。一级缓存是SqlSession级别的缓存,可以减少对数据库的重复查询;二级缓存是全局级别的缓存,多个SqlSession之间可以共享缓存数据。

注解支持

除了使用XML配置SQL映射外,MyBatis还支持使用注解来编写和配置SQL语句。使用注解可以使得SQL语句与Java代码更加紧密,提高了开发效率。

插件扩展

MyBatis提供了丰富的插件扩展机制,允许开发人员自定义插件来增强或修改MyBatis的行为。插件可以在SQL执行前后、参数处理前后等不同阶段进行拦截和干预。

总结来说,MyBatis是一个轻量级的持久层框架,通过XML配置或注解来定义SQL映射关系,并提供了灵活的动态SQL查询、对象-关系映射等功能,使得开发人员可以更方便地操作数据库。同时,MyBatis还具有缓存机制、注解支持和插件扩展等特性,进一步提升了开发效率和可扩展性。

C.Mybatis框架的一些应用场景

MyBatis在如今的Java开发中广泛应用于以下几个方面:

C1.Web应用开发:

MyBatis可以与各种主流的Java Web框架(如Spring MVC、Spring Boot、Struts等)结合使用,用于处理Web应用程序中的持久层数据访问。通过定义SQL映射关系,可以方便地进行数据库的查询、插入、更新和删除等操作。

C2.微服务架构

随着微服务架构的兴起,许多企业开始将大型应用拆分为一组独立的微服务。在每个微服务中,MyBatis可以作为持久层框架用于处理数据访问。通过MyBatis提供的灵活的SQL查询和对象-关系映射功能,可以方便地对微服务的数据库进行操作。

C3.数据处理和ETL

MyBatis可以作为一个轻量级的数据处理工具,用于执行批量数据处理和Extract-Transform-Load (ETL) 操作。通过编写简单的SQL语句,并结合MyBatis提供的批量操作和动态SQL功能,可以高效地处理大量的数据。

C4.批处理应用

在后台批处理应用中,MyBatis可以用于执行复杂的数据查询和更新操作。通过MyBatis的一级缓存和二级缓存机制,可以提高批处理应用的性能,并有效地管理数据库连接和事务。

C5.数据库工具和管理系统

MyBatis提供了用于管理和操作数据库的工具和接口,可以方便地进行数据访问和管理。开发人员可以使用MyBatis的API和工具来执行各种数据库操作,如数据导入、数据备份、数据迁移等。

C6.总结

总而言之,MyBatis在如今的Java开发中被广泛应用于Web应用开发、微服务架构、数据处理和ETL、批处理应用以及数据库工具和管理系统等领域。它提供了简单且灵活的方式来处理数据访问,并且与其他主流的Java框架和技术集成良好。

D.学习MyBatis重要动力!

提高数据库访问效率

MyBatis可以帮助你优化数据库访问性能。它通过提供一级缓存和二级缓存机制来减少对数据库的频繁查询,提高了系统的响应速度和整体性能。学习MyBatis可以帮助你学会如何正确地使用缓存机制,从而提高数据库查询效率。

简化数据访问层的开发

MyBatis通过将SQL语句与Java代码进行解耦,使得数据访问层的开发更加简单和易于维护。学习MyBatis可以帮助你理解如何使用XML或注解来定义SQL映射关系,以及如何执行各种数据库操作(如查询、插入、更新和删除)。这将大大减少编写繁琐的JDBC代码的工作量。

灵活的动态SQL查询

MyBatis提供了灵活的动态SQL查询功能,可以根据不同的条件动态构建SQL语句。这使得你能够根据具体业务需求编写复杂的查询语句,而无需额外的复杂逻辑。学习MyBatis可以帮助你掌握动态SQL的使用方法,提高查询的灵活性和可扩展性。

对象-关系映射(ORM)支持

MyBatis支持将查询结果映射为Java对象,简化了数据的获取和处理过程。通过学习MyBatis,你可以了解如何使用对象-关系映射(ORM)来将数据库表的数据映射到Java对象中,从而方便地操作数据。

与其他框架的集成

MyBatis与其他主流的Java框架(如Spring、Spring Boot等)集成良好。学习MyBatis可以帮助你了解如何将MyBatis与这些框架结合使用,以实现更完整的应用程序开发。

综上所述,学习MyBatis能够提高数据库访问效率,简化数据访问层的开发,实现灵活的动态SQL查询,支持对象-关系映射(ORM),以及与其他框架的集成。这些都是在日常Java开发中非常有价值的技能。无论是从事Web开发、微服务架构还是其他与数据库相关的工作,学习MyBatis都会对你的开发技能和职业发展有积极的影响。

二.将My'batis部署在IDEA 中,并且实施增删修查!

A.Mybatis配置环境

A1.导入依赖

直接替换pom的xml文件的内容

<properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <dependencies>
        <!-- ********************** junit单元测试依赖 ********************** -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- ********************** Java Servlet API  ********************** -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- ********************** Mybatis依赖 ********************** -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <!-- ********************** Mysql JDBC驱动 ********************** -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>
        <!-- **********************  日志配置  ********************** -->
        <!--记得修改mybatis.cfg.xml添加如下内容-->
        <!--<setting name="logImpl" value="LOG4J2"/>-->
        <!--核心log4j2jar包-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.9.1</version>
        </dependency>
        <!--web工程需要包含log4j-web,非web工程不需要-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-web</artifactId>
            <version>2.9.1</version>
        </dependency>
</dependencies>

这段配置文件配置在 file-Name后面

<resources>
            <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题-->
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>jdbc.properties</include>
                    <include>*.xml</include>
                </includes>
            </resource>
        </resources>

导入插件

<plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <dependencies>
                    <!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 -->
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.44</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>

B.加载数据库配置文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis_ssm?useUnicode=true&characterEncoding=UTF-8
jdbc.username=数据库名字
jdbc.password=数据库密码

C.修改web.xml版本

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     version="3.1"></web-app>

D.下载插件

Free mybatis plugin

Mybatis generator

mybatis tools

maven helper

以上四个,用于mybatis开发的插件

配置:mybatis.cfg.xml,generatorConfig.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>
    <!-- 引入外部配置文件 -->
    <properties resource="jdbc.properties"/>
    <settings>
        <setting name="logImpl" value="LOG4J2"/>
    </settings>
    <!-- 别名 -->
    <typeAliases>
        <!--<typeAlias type="com.javaxl.model.Book" alias="Book"/>-->
    </typeAliases>
    <!-- 配置mybatis运行环境 -->
    <environments default="development">
        <environment id="development">
            <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
            <transactionManager type="jdbc"/>
            <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
            <!-- POOLED 表示支持JDBC数据源连接池 -->
            <!-- UNPOOLED 表示不支持数据源连接池 -->
            <!-- JNDI 表示支持外部数据源连接池 -->
            <dataSource type="POOLED">
                <property name="driver"
                          value="${jdbc.driver}"/>
                <property name="url"
                          value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/javaxl/mapper/BookMapper.xml"/>
    </mappers>
</configuration>
<?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>
    <!-- 引入配置文件 -->
    <properties resource="jdbc.properties"/>
    <!--指定数据库jdbc驱动jar包的位置-->
    <classPathEntry location="D:\\initPath\\mvn_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar"/>
    <!-- 一个数据库一个context -->
    <context id="infoGuardian">
        <!-- 注释 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
            <property name="suppressDate" value="true"/> <!-- 是否生成注释代时间戳 -->
        </commentGenerator>
        <!-- jdbc连接 -->
        <jdbcConnection driverClass="${jdbc.driver}"
                        connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>
        <!-- 类型转换 -->
        <javaTypeResolver>
            <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 01 指定javaBean生成的位置 -->
        <!-- targetPackage:指定生成的model生成所在的包名 -->
        <!-- targetProject:指定在该项目下所在的路径  -->
        <javaModelGenerator targetPackage="com.javaxl.model"
                            targetProject="src/main/java">
            <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="false"/>
            <!-- 是否对model添加构造函数 -->
            <property name="constructorBased" value="true"/>
            <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
            <property name="trimStrings" value="false"/>
            <!-- 建立的Model对象是否 不可改变  即生成的Model对象不会有 setter方法,只有构造方法 -->
            <property name="immutable" value="false"/>
        </javaModelGenerator>
        <!-- 02 指定sql映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="com.javaxl.mapper"
                         targetProject="src/main/java">
            <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>
        <!-- 03 生成XxxMapper接口 -->
        <!-- type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象 -->
        <!-- type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象 -->
        <!-- type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 -->
        <javaClientGenerator targetPackage="com.javaxl.mapper"
                             targetProject="src/main/java" type="XMLMAPPER">
            <!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>
        <!-- 配置表信息 -->
        <!-- schema即为数据库名 -->
        <!-- tableName为对应的数据库表 -->
        <!-- domainObjectName是要生成的实体类 -->
        <!-- enable*ByExample是否生成 example类 -->
        <!--<table schema="" tableName="t_book" domainObjectName="Book"-->
               <!--enableCountByExample="false" enableDeleteByExample="false"-->
               <!--enableSelectByExample="false" enableUpdateByExample="false">-->
            <!--&lt;!&ndash; 忽略列,不生成bean 字段 &ndash;&gt;-->
            <!--&lt;!&ndash; <ignoreColumn column="FRED" /> &ndash;&gt;-->
            <!--&lt;!&ndash; 指定列的java数据类型 &ndash;&gt;-->
            <!--&lt;!&ndash; <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> &ndash;&gt;-->
        <!--</table>-->
        <table schema="" tableName="t_mvc_Book" domainObjectName="Book"
               enableCountByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" enableUpdateByExample="false">
            <!-- 忽略列,不生成bean 字段 -->
            <!-- <ignoreColumn column="FRED" /> -->
            <!-- 指定列的java数据类型 -->
            <!-- <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> -->
        </table>
    </context>
</generatorConfiguration>

F.运行结果

自动生成代码,和实现方法

G.测试方法

package com.lz.demo;
import com.lz.biz.BookBiz;
import com.lz.biz.impl.BookBizImpl;
import com.lz.mapper.BookMapper;
import com.lz.model.Book;
import com.lz.utils.SessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
 * @author lz
 * @create 2023-08-20 22:56
 */
public class demo1 {
    private SqlSession  sqlSession;
    private BookBiz  bookBiz;
    @Before
    public   void  a(){
        System.out.println("刘兵是傻逼");
        sqlSession= SessionUtil.openSession();
        BookBiz bookBiz = new BookBizImpl();
        BookMapper mapper = sqlSession.getMapper(BookMapper.class);
        ((BookBizImpl) bookBiz).setBookMapper(mapper);
        this.bookBiz=bookBiz;
    }
    @After
    public   void  b(){
        System.out.println("刘兵不是傻逼");
    }
    @Test
    public   void   test1(){
        System.out.println("测试方法");
        Book book = bookBiz.selectByPrimaryKey(25);
        System.out.println(book);
    }
    @Test
    public   void   test2(){
        int i = bookBiz.deleteByPrimaryKey(25);
    }
}

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
SQL Java 数据库连接
Java系列技术之Mybatis
MyBatis 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC代码和手动设置参数以及获取结果集,它可以使用简单的XML或注解来配置和映射SQL信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
25 0
|
6天前
|
NoSQL Java 关系型数据库
凭借Java开发进阶面试秘籍(核心版)逆流而上
最近参加了面试或者身边有朋友在面试的兄弟有没有发现,现在的面试不仅会问八股文,还会考察框架、项目实战、算法数据结构等等,需要准备的越来越多。 其实面试的时候,并不是要求你所有的知识点都会,而是关键的问题答到点子上!这份《Java 开发进阶面试秘籍(核心版)》由 P8 面试官整体把控,目前已经更新了 30 万字! 资料中涵盖了一线大厂、中小厂面试真题,毕竟真题都是技术领域最经典的基础知识和经验沉淀的汇总,非常有必要学习掌握!双重 buff 叠加,offer 接到手软~ 点击此处取,这可能是你到目前为止领取的最具含金量的一份资料! 整套资料涵盖:Spring、Spring
|
3天前
|
SQL Oracle Java
java开发常见错误及其解决方式
java开发常见错误及其解决方式
|
5天前
|
数据采集 Java 数据库
我想再学一次Java三种循环结构哦---【开发实例】
我想再学一次Java三种循环结构哦---【开发实例】
22 0
我想再学一次Java三种循环结构哦---【开发实例】
|
9天前
|
供应链 Java 测试技术
开发Java应用时如何用好Log
开发Java应用时如何用好Log
47 3
|
9天前
|
Java
Java开发常用的 .gitignore 配置
Java开发常用的 .gitignore 配置
|
9天前
|
设计模式 存储 前端开发
Java Web开发中MVC设计模式的实现与解析
Java Web开发中MVC设计模式的实现与解析
|
Java 开发工具 git
Java开发初级6.24.3
5.在Git使用过程中,进行Git配置的操作命令是哪个() A. config B. config -g C. config -a D. git config 相关知识点: 在git中,经常使用git config 命令用来配置git的配置文件,git配置级别主要有:仓库级别 local 【优先级最高】、用户级别 global【优先级次之】、系统级别 system【优先级最低】 正确答案:D 10.RDBMS是什么? A. Rela Database Management Systems B. Relational Database Management Systems C. Relation
98 0
|
SQL 前端开发 JavaScript
Java开发初级6.24.2
3.Java网站src/main/java目录保存的是什么资源? A. Java源代码文件 B. 测试代码 C. JavaScript、CSS等文件 D. 图片资源 正确答案:A 4.什么是索引Index? A. SQL数据库里的表管理工具 B. SQL数据库里的查询工具 C. SQL数据库里的目录工具 D. SQL数据库用来加速数据查询的特殊的数据结构 正确答案:D
110 0
|
Java
Java开发初级6.24.1
1.下面关于泛型的描述中错误的一项是? A. “? extends 类”表示设置泛型上限 B. “? super 类”表示设置泛型下限 C. 利用“?”通配符可以接收全部的泛型类型实例,但却不可修改泛型属性内容 D. 如果类在定义时使用了泛型,则在实例化类对象时需要设置相应的泛型类型,否则程序将无法编译通过 相关知识点: https://edu.aliyun.com/course/35 正确答案:D 2.下列选项中属于SVN中控制鉴权用户访问版本库的权限默认权限的是() A. write B. read C. none D. null 相关知识点: auth-access:取值范围为"writ
194 0