初始mybatis

本文介绍了MyBatis作为一款优秀的持久层框架,如何简化JDBC操作,提高开发效率。ORM(对象关系映射)解决了JDBC繁琐的数据转换问题。MyBatis允许自定义SQL,支持存储过程,并具有高度灵活性和可优化性,使其成为互联网开发的首选。文中详细讲解了MyBatis的全局配置文件、映射文件的设置,以及DAO层的实现,展示了MyBatis的基本使用流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是MyBatis

  1. 说起jdbc大家都非常的熟悉吧。大家可以想想 我们使用jdbc对数据库操作的麻不麻烦。答案不要想都是知道肯定麻烦啊。就说查询吧 你查询出来的数据是不是还要和java的实体类进行对应,就这一个操作就已经浪费了我们大把的开发时间。还不说其他的操作,获取SQL连接,执行SQL语句等等...  是不是我们都需要一步一步的写啊。如果你不觉得麻烦,那还是你写的少。哈哈哈开个玩笑!就从我刚才介绍的几点出发,就可以看出jdbc对数据的操作还是很麻烦。
  2. 因此mybatis诞生了,mybatis的诞生大大的提高了我们的开发效率,最最关键的是他的操作还十分的简单。下面我们就来慢慢介绍。

2 什么是 ORM
        
ORM,Object-Relationl Mapping,对象关系映射,它的作用是在关系型数据库和对 象之间作一个映射处理。 JDBC 的缺点:需要手动的完成面向对象的 Java 语言、面向关系的数据库之间数据的 转换,代码繁琐无技术含量,影响了开发效率。
  查询是需要手动的将结果集的列数据转换为 Java 对象的属性;而添加操作 时需要手动将 Java 对象的属性转换为数据库表的列字段。
关于面向对象的 Java 语言、面向关系的数据库之间数据的转换必须要做,问题在于这个转换是否可以不由开发者来做?答案是可以的。ORM 框架就是专门来解决这个问题的, 相当于在面向对象语言和关系数据库之间搭建一个桥梁。这样我们在具体的操作数据库的时
候,只要像平时操作对象一样操作它就可以了,ORM 框架会根据映射完成对数据库的操作, 就不需要再去和复杂的 SQL 语句打交道了。
3.  MyBatis 简介
  MyBatis 本是 Apache 的一个开源项目 iBatis, 2010 年这个项目由 Apache Software Foundation 迁移到了 Google Code,且改名为 MyBatis 。2013 年 11 月迁移到 GitHub。
  MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。 MyBatis 避免了几乎所有的JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使 用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java 对象)映射成数据库中的记录。
  简单的说:MyBatis 是一个半自动 ORM 框架,其本质是对 JDBC 的封装。使用 MyBatis 重点需要程序员编写 SQL 命令,不需要写一行 JDBC 代码。 与 Hibernate 的比较Hibernate 是一个全自动的 ORM 框架。因为 Hibernate 创建了 Java 对象和数据库表 之间的完整映射,可以完全以面向对象的思想来操作数据库,程序员不需要手写 SQL 语句, 而 MyBatis 中还需要手写 SQL 语句,所以是半自动化的,工作量要大于 Hibernate。
  为什么半自动化的 Mybatis 比自动化的 Hibernate 受欢迎?
MyBatis 需要手写 SQL 语句,所以工作量要大于 Hibernate。但是也正是由于自定义 SQL 语句,所以其灵活性、可优化性就超过了 Hibernate。 Hibernate 封装了 SQL 语句,由开发者对对象操作,Hibernate 来生成 SQL 语句。虽 然也可以通过映射配置来控制生成的 SQL 语句,但是对于要生成复杂的 SQL 语句,很难实现,或者实现后导致性能的丢失。 而 MyBatis 将手写 SQL 语句的工作丢给开发者,可以更加精确的定义 SQL,更加灵活, 也便于优化性能。完成同样功能的两条 SQL 语句的性能可能相差十几倍到几十倍,在高并
发、快响应要求下的互联网系统中,对性能的影响更明显。
  MyBatis 对存储过程可提供很好的支持。另外 MyBatis 的开发工作量大不意味着学习
成本大。对于新手,学习 Hibernate 时间成本比 Mybatis 大很多,Mybatis 很快就上手了。
  总之,因为 MyBatis 具有封装少、映射多样化、支持存储过程、可以进行 SQL 语句优
化等特点,符合互联网高并发、大数据、高性能、高响应的要求,使它取代 Hibernate 成
为了 Java 互联网中首选的持久框架。而对于对性能要求不高的比如内部管理系统、ERP 等
可以使用 Hibernate。

3.MyBatis 的使用

       1. 请看以下代码

先给大家看一下我的目录接口和jar包

 

 

        这个是MyBatis的核心配置文件,也叫做全局配置文件,没有它mybatis就无法启动。我使用的是mysql的数据源,你还可以配置其他数据源,比如oracle,MariaDB等等...

但是千万别忘记给默认的数据源,这个是很重要的,如果你没有配置默认数据就会报错。这个错误很多粗心的人都会犯。

<?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文件 外部读取-->
    <properties resource="jdbc.properties"/>

    <!--配置别名-->
    <typeAliases>
        <!--这里给一个具体的bian对象 设置别名-->
       <!-- <typeAlias alias="user" type="com.bdqn.pojo.Users" />-->
        <!--这里可以直接写包名 我就使用包名的方式写了  不区分大小写-->
        <package name="com.bdqn.pojo"/>
    </typeAliases>
    <!--环境配置-->
    <environments default="development">
        <!--这里千万别忘了给一个默认的数据源  -->
        <environment id="development">
            <!--配置事务 我使用的是jdbc事务  -->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置数据源 我使用的是连接池 -->
            <dataSource type="POOLED">
                <!--配置你的URL路径  注意里面的name都是不可以随便写的  以下的我就省略了-->
                <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>
    <!--这里别忘记引用 mybaties的映射文件了 就是你写sql语句的那个文件 这里我使用的文件引用-->
    <mappers>
        <mapper resource="com/bdqn/mapper/UsersMapper.xml"/>
    </mappers>

</configuration>

下面我们来看一下mybatis的全局映射文件,里面都是对sql语句的封装。里面我只写了一个查询语句,其他的增删改亦是如此!注意:映射配置文件的id千万不重复!

<?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">
<!--namespace  一定要写你接口的全限定名  也就是包名  切记切记-->
<mapper namespace="com.bdqn.dao.UserDao">
    <!--查询全部方法-->
    <!--resultType是你结果集所需要对应的一个javabian对象-->
    <!--因为我们之前已经配置好了别名设置  所以可以直接给对象名  不区分大小写-->
    <!--你的id的名字最好和你dao层接口的名字包成一致  为后面学习打下基础-->
    <select id="seleAlUsers" resultType="users">
        /*这里直接写你的sql语句就可以了*/
        SELECT userid , username ,  usersex  FROM users
    </select>

</mapper>

接下看给大家看一下我的dao,daoimpl,service,以及serviceimpl

public interface UserDao   {
    /*我就写个基础的查询方法*/
    List<Users> seleAlUsers() throws IOException;
}
public class UserImpl implements UserDao {


    public List<Users> seleAlUsers() {
        //读取我们的mybaties的全局配置文件
        InputStream resourceAsStream = null;
        List<Users> users=null;
        SqlSession sqlSession=null;
        try {
            resourceAsStream = Resources.getResourceAsStream("Mybaties-cgn.xml");
            //使用SqlSessionFactoryBuilder给我们生成一个SqlSessionFactory工厂对象
            SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
            //使用工厂创建一个SqlSession对象  此对象就是一个会话对象  你可以使用它对数据可进行CURD操作(增删改查)
            //使用完不要忘记关闭哦

             sqlSession = build.openSession();
            //我要的是查询所有  所以调用selectList方法
             users = sqlSession.selectList("com.bdqn.dao.UserDao.seleAlUsers");
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
                if (sqlSession!=null)sqlSession.close();
        }

        return users;
    }

 看到我标明的方法,大家可以想一下,mybatis为什么给我们提供一个参数是boolean的方法 。答案是,在mybatis中事务提交方式默认为手动提交,这与jdbc是不同的,在jdbc中事务默认提交方式为自动提交。    因此我们只要把openSession参数改为TRUE即可。

但是我不建议大家这样写。因为你这样写就无法控制事务了,比如我sql的语句发生了错误,有可能语句就已经插入到数据库中了 这样我们的程序就不可控了,反之我可以在try-catch里面进行事务回滚啊。这样数据就不会添加到数据库中。

 最后就是我的测试方法和结果了。

 

 public static void main(String[] args) throws IOException {
        UserDao userDao=new UserImpl();
        List<Users> users = userDao.seleAlUsers();
       users.forEach(System.out::println);
    }

我的讲解就到此结束了,如果有不好的地方请大家多多包涵。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值