mybatis介绍

一、概述

  • Mybatis是一个优秀的持久层框架,它对JDBC操作数据库的过程进行封装,使开发者只需要关注sql本身。

  • 我们原来使用JDBC操作数据库,需要手动的写代码去注册驱动、获取connection、获取statement等等,现在Mybaits帮助我们把这些事情做了,我们只需要关注我们的业务sql即可,这样可以提高我们的开发效率。

  • mybatis定义:

  • 1.MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现。

  • 2.需要使用的Jar包:mybatis-3.0.2.jar(mybatis核心包)。mybatis-spring-1.0.0.jar(与Spring结合包)。

    3.MyBatis的前身是ibatis,但是在配置sql的语法上有明显的区别,并且spring目前的版本封装mybatis,至于mybatis-spring.jar文件也是mybatis团队复杂开发的jar包,用于和spring整合。之前ibatis的源码托管方是apache,而mybatis是google。

  • Mybatis的优点和缺点?

    优点:基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。
    与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接;
    很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。
    能够与Spring很好的集成;
    提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。
    缺点:1.Sql语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写Sql语句的功底有一定要求。
    2.对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择。

  • 传统java程序访问数据库流程图:

  • 使用mybatis作为“中间商”访问数据库流程图:

    添加mybatis的配置文件:

    事务: 同一个事务下执行一组sql, 要就全部成功(提交事务, 写到文件中), 要就全部失败(有的成功,有的失败, 全部失败)(回滚事务, 成功的sql: 还原修改之前的状态) 事务: 加在业务层

    主配置文件: mybatis-config.xml

  • 对应有一个配置类: Configuration

  • <?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>
        <!--数据源-->
        <environments default="mysql">
            <!--具体的数据源环境-->
            <environment id="mysql">
                <!--事务管理器
                  事务: 同一个事务下执行一组sql, 要就全部成功(提交事务, 写到文件中),
                                            要就全部失败(有的成功,有的失败, 全部失败)(回滚事务, 成功的sql: 还原修改之前的状态)
                  事务: 加在业务层
                  JDBC: 默认自动提交, 设置手动提交
                  MANAGED: 事务交给第三方管理:  Mybatis与Spring整合, 事务交给Spring管理
                -->
                <transactionManager type="JDBC"></transactionManager>
                <!--数据源类型:
                    JNDI: 把数据源配置Tomcat上, java 得到Tomcat配置的数据源
                   POOLED: 连接池, mybatis自带的连接池,  第三方连接池: 阿里 druid   c3p0  commons-pool2
                   UNPOOLED: 未使用连接池, 操作数据库,创建连接, 使用完成, 关闭连接: JdbcUtil
                -->
                <!--连接那个数据库-->
                <dataSource type="POOLED">
                    <!--数据库四大参数-->
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis-db" />
                    <property name="username" value="root" />
                    <property name="password" value="123" />
                </dataSource>
            </environment>
        </environments>
    </configuration>

  • 编写sql语句

    sql位于sql映射文件: 与Dao接口作为文件名

    UserDao接口: UserDao.xml的sql映射文件

    OrderDao接口: OrderDao.xml的sql映射文件

    一个dao对应一个sql映射文件

    哪一个dao的sql, 写在对应sql映射文件中

  • <?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="xxx">
        <!--
          id: sql语句的唯一标识符
          resultType: 结果集映射的对应的类类型: 包名.类名
          parameterType: 参数类型: 对应的Dao的方法参数类型,
                     如果参数类型是简单数据类型(八大基本数据类型+String) 可以省略
          使用 #{名字}
    
        -->
        <select id="findById" parameterType="int" resultType="com.fs.pojo.User" >
             select * from tb_user where id = #{id}
        </select>
    
    <!--
        <update id="">
    
        </update>
        <delete id="">
    
        </delete>
        <insert id="">
    
        </insert>-->
    </mapper>

    编写代码

  • @Test
        public void test1() throws IOException {
            //读取mybatis全局配置文件
            //默认读取类路径下的资源
            InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
            //0.通过SqlSessionFactoryBuilder对象创建SqlSessionFactory
            //1.创建SqlSessionFactory对象: 作用: 创建SqlSession
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
            //2. 创建SqlSession: 相当于Collection
            SqlSession sqlSession = sqlSessionFactory.openSession();
            //3. 执行sql  selectOne() 第一个参数:  sql的id:  namespace.id
            //                        第二个参数: 给?赋值
            User user = sqlSession.selectOne("xxx.findById", 1);
            System.out.println(user);
    
            //4.关闭
            sqlSession.close();
    
        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值