MyBatis框架简介及入门案例详解

 更新时间:2022年08月04日 08:42:13   作者:懒羊羊.java  
MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码,本文将作为最终篇为大家介绍MyBatis的使用

前言

传统的JDBC操作数据库都是通过写一个java类,在类中调用接口下的API执行相应的SQL,存在大量的硬编码。试想,若是开发一个日活度高的系统,那SQL的变动的非常大,就要我们去相应的类中修改Java代码,特别是进行查询操作时需要我们手动将结果集封装到实体类中,造成后期维护压力山大

总而言之,缺点多多

MyBatis简介

mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句

最后mybatis框架执行sql并将结果映射为java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbc api底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作

快速入门

下面的配置文件在MyBatis的官网里都有,自己去复制过来粘贴到IDEA中更改对应的信息即可,我写出来的目的是为了保证文章的顺序流畅(大家莫烦~)

1.导入MyBatis相关坐标

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.29</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.10</version>
</dependency>

2.数据库中建立相应的数据表,并编写一个表中字段对应的(Brand)实体类

3.编写BrandMapper映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.BrandMapper">
//Mapper代理开发:
//定义与SQL映射文件同名的Mapper接口,
//并且将Mapper接口和SQL映射文件放置在同一目录下
//设置SQL映射文件的namespace属性为Mapper接口全限定名
//在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
    <select id="selAll" resultType="sqlTest.Brand">
        select * from mybatis;
    </select>
</mapper>

4.编写封装查询结果对象的接口

public interface BrandMapper {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> public List<Brand> selAll(); }

5编写Mybatis核心配置文件

<?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>
    <typeAliases>
            <package name="sqlTest"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--数据库连接信息-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/pyq?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="284650"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/userMapper.xml"/>
        <mapper resource="mapper/BrandMapper.xml"/>
    </mappers>
</configuration>

6.编写测试类,通过MyBatis实现查询功能

public class MybatisDemo3 {
    public static void main(String[] args) throws IOException {
        //加载mybatis的核心配置文件,获取sqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //获取sqlSession工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //获取sqlSession对象,来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取BrandMapper接口的代理对象
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        List<Brand> brands =brandMapper.selAll();
        System.out.println(brands);
        //释放资源
        sqlSession.close();
    }
}

一顿操作下来好像也没有简单多少,其实不然,初次编写的配置文件都是持久化的属性,以后的变更只需要在接口里写出相应的方法即可,避免了大量的硬编码

映射文件

sql片段与resultMap

在进行查询操作时,为了解决SQL表中字段名称和实体类中的属性名不一致导致的不能自动封装(查出为null)的问题,我们可以通过"起别名"也可以通过SQL片段来对查询的数据进行定义修改,统一重复的操作

比如,在遇到表中的字段名称不符合实体类中驼峰命名的规范时、要对查询的数据进行范围限定时都可以通过sql片段来实现,就像这样:

 <sql id="cut">
         bracd_name as bracdName,company_name as compantName
 </sql>
    <select id="selAll" resultType="sqlTest.Brand">
        select <include refid="cut"/> from mybatis;
</select>

通过SQL片段实现了所谓的范围查询,单表重复起别名工作的统一,但是针对多次不同的查询范围我们需要多次定义SQL片段(不灵活),这也不是一件简单的事

于是resultMap帮我们解决了这个问题:

    <resultMap id="rm" type="brand">
        <result column="bracd_name" property="bracdName"/>
        <result column="company_name" property="companyName"/>
    </resultMap>
    <select id="selAll" resultMap="rm">
        select * from mybatis;
    </select>

通过id来设置唯一标识,type来指定映射类型,把表的列名column和实体类的属性名通过result进行映射,在我们的SQL中直接查询所有即可,进行不同的查询操作也不需要重复定义片段或者取别名,就变得十分简单

MyBatis的增删改查

1.添加操作

编写Mapper接口,写出添加的方法:

void add(Brand brand);

配置SQL映射文件:

<mapper>
    <insert id="add" >
        insert into mybatis(bracd_name,company_name,ordered,description,status)
        values (#{bracdName},#{companyName},#{ordered},#{description},#{status});
    </insert>
</mapper>

执行方法:

 SqlSession sqlSession = sqlSessionFactory.openSession();
  BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
  brandMapper.add(brand);

2.修改操作

编写Mapper接口,写出修改的方法:

void update(Brand brand);

编写映射文件:

    <update id="update" parameterType="sqlTest.Brand">
        update mybatis set bracd_name=#{bracdName},company_name=#{companyName},ordered=#{ordered},description=#{description},status=#{status}
    </update>

执行方法:

 SqlSession sqlSession = sqlSessionFactory.openSession();
  BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
 int count= brandMapper.update(brand);

3.删除操作

编写Mapper接口,写出删除方法:

void deleteid(Brand brand);

编写映射文件:

    <delete id="deleteid" parameterType="brand">
            delete from mybatis where id=#{id}
    </delete>

执行方法:

 SqlSession sqlSession = sqlSessionFactory.openSession();
  BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
 int count= brandMapper.deleteid(id);

以上就是对MyBtias的初识,后面还有很多高级功能等待整理

到此这篇关于MyBatisPlus框架简介及入门案例详解的文章就介绍到这了,更多相关MyBatisPlus案例内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解java Collections.sort的两种用法

    详解java Collections.sort的两种用法

    这篇文章主要介绍了详解java Collections.sort的两种用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Spring Cloud灰度部署实现过程详解

    Spring Cloud灰度部署实现过程详解

    这篇文章主要为大家介绍了Spring Cloud灰度部署实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • 详解Java的四种引用方式及其区别

    详解Java的四种引用方式及其区别

    这篇文章主要介绍了Java的四种引用方式 ,主要主要包括强引用,软引用,弱引用,虚引用,稍微整理精简一下做下分享,具有一定的参考价值,需要的朋友可以参考下
    2018-12-12
  • java实现稀疏矩阵的压缩与解压的方法

    java实现稀疏矩阵的压缩与解压的方法

    这篇文章主要介绍了java实现稀疏矩阵的压缩与解压 ,把该稀疏矩阵压缩以三元组形式表示并以文件形式保存,再写另一个程序读取文件中的信息把压缩后的三元组还原成原来的稀疏矩阵,需要的朋友可以参考下
    2022-03-03
  • SpringBoot Shiro 权限注解不起作用的解决方法

    SpringBoot Shiro 权限注解不起作用的解决方法

    本文主要介绍了SpringBoot Shiro 权限注解不起作用的解决方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • SpringBoot配置发送Email的示例代码

    SpringBoot配置发送Email的示例代码

    本篇文章主要介绍了SpringBoot配置发送Email的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Java基础总结之Thymeleaf详解

    Java基础总结之Thymeleaf详解

    Thymeleaf是一种现代的基于服务器端的Java模板引擎技术,也是一个优秀的面向Java的XML、XHTML、HTML5页面模板,它具有丰富的标签语言、函数和表达式,在使用Spring Boot框架进行页面设计时,一般会选择Thymeleaf模板,需要的朋友可以参考下
    2021-05-05
  • JAVA正则表达式过滤文件的实现方法

    JAVA正则表达式过滤文件的实现方法

    这篇文章主要介绍了JAVA正则表达式过滤文件的实现方法的相关资料,希望通过本文大家能够掌握理解这部分内容,需要的朋友可以参考下
    2017-09-09
  • 通过Java压缩JavaScript代码实例分享

    通过Java压缩JavaScript代码实例分享

    这篇文章主要介绍了通过Java压缩JavaScript代码实例分享,具有一定参考价值,需要的朋友可以了解下。
    2017-12-12
  • SpringBoot中mapper.xml文件存放的两种实现位置

    SpringBoot中mapper.xml文件存放的两种实现位置

    这篇文章主要介绍了SpringBoot中mapper.xml文件存放的两种实现位置,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01

最新评论