zoukankan      html  css  js  c++  java
  • mybatis4

    本着mybatis是什么?好处在哪,解决了哪些问题?原理?怎么用?

    mybatis是一个持久层ORM(object relational mapping 对象关系映射)框架,对操作数据库的JDBC代码进行了封装。

    好处,也是解决了哪些问题
    1.让我们开发者只关注业务的处理,省去了加载驱动,数据库连接,创建statement语句对象,参数设置
    结果集的处理等繁琐代码。
    2.使用mybatis的xml配置或者注解方式,可以让java对象自动映射到sql参数,生成最终的sql执行语句,将
    返回的的结果自动映射到java对象,返回给业务层。

    此时疑问+?
    1.如何找到mapper的映射文件。
    2.如何让参数和java对象,结果集和java对象映射的。

    原理:
    1.mybatis框架有个核心配置文件 .xml,配置了相应的驱动,数据库的连接,操作数据库的环境,配置了
    mapper映射文件的路径等东西。
    2.加载mybatis的核心配置文件,然后通过sqlSessionFactoryBuilder这个类的build方法来读取核心配置文件。
    3.读取到核心配置文件后,返回sqlSessionFactory对象,然后去创建SqlSession对象。
    4.sqlSession对象去发起crud。
    5.这里就是如何做到自动映射的,用了一个MappedStatement对象,就是每一个sql语句,进行参数映射。

    框架原理参考:http://www.mamicode.com/info-detail-1630013.html   (图形易懂)

    疑问继续提出:

    1.#{}和${}区别?
    2.写的mapper中的xml文件,都有一个dao层接口与它对应,dao接口工作原理是什么?dao接口的方法是否可以重载?
    3.如何获得自动生成的键值?

    1.1#{}是一个占位符,相当于jdbc中的?,mybatis在处理#{}时,会将#{}替换为?号,用PrepareStatement的
    set方法来赋值。
    1.2${} mybatis在处理时,直接把{}替换成变量的值。
    优先用#{},安全,能防止大部分sql注入。${}容易导致sql注入,但在传入表名时必须用${}

    2.dao层接口,也就是我们说的mapper层接口,接口全限定名就是xml文件中的namespace的值,接口中的
    方法名就是xml文件中的MapperedStatement对象的id值,这里注意MapperedStatement就是我们xml中sql
    语句。
    当业务层调用mapper接口层方法时,就会通过接口全限定名+方法名作为一个key定位到xml文件中的一条sql
    语句。
    dao接口工作原理是基于jdk的动态代理,mybatis在运行的时候,业务层调用持久层方法时,就会产生一个动态代理
    对象去对该方法进行增强,也就是拦截该方法,映射参数然后去执行sql,并将结果返回。
    dao接口方法不可以重载,因为要通过接口全限定名+方法名作为key去定位一个唯一的MapperedStatement对象,
    如果方法名重载了,就定位不到了。

    3.我们在用insert的时候,返回的是行数,但用对象插入的时候,会给实体类返回自增的键值。

      

  • 相关阅读:
    Mysql常用语句
    关于nginx的一个错误操作记录
    windows下安装ElasticSearch
    在IIS托管服务中设置Rewrite重定向到webapi接口
    asp.net IHttpHandler浅析
    asp.net IHttpModule浅析
    vscode 创建.net core项目初体验
    批量联表更新
    mysql 关于数据库和数据表的基本操作
    mysql Navicat客户端
  • 原文地址:https://www.cnblogs.com/yiyezhiqiuwuchen/p/12809001.html
Copyright © 2011-2022 走看看