• mybatis-04【小结】


    mybatis-04【小结】

    1、Mybatis 中 # 和 $ 的区别?
    #相当于对数据 加上 双引号,$相当于直接显示数据
    1)#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。
      如:order by #user_id#,如果传入的值是111,那么解析成 sql 时的值为 order by "111", 如果传入的值是 id,则解析成的 sql 为 order by "id".
    2)$将传入的数据直接显示生成在 sql 中。
      如:order by $user_id$,如果传入的值是 111,那么解析成 sql 时的值为order by user_id, 如果传入的值是 id,则解析成的 sql 为 order by id.
    3) #方式能够很大程度防止 sql 注入。
    4)$方式无法防止 Sql 注入。
    5)$方式一般用于传入数据库对象,例如传入表名.
    6)一般能用#的就别用$.

    2、mybatis执行过程?
    1)配置mybatis的配置文件,mybatis-cfg.xml
    2)通过配置文件,加载mybatis运行环境,创建SqlSessionFactory会话工厂SqlSessionFactory在实际使用时按单例方式。
    3)通过SqlSessionFactory创建SqlSession,SqlSession是一个面向用户接口(提供操作数据库方法),实现对象是线程不安全的,建议sqlSession应用场合在方法体内。
    4)调用sqlSession的方法去操作数据。如果需要提交事务,需要执行SqlSession的commit()方法。
    5)释放资源,关闭 session.close()

    3、Mybatis与Hibernate比较
    1)MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
    2)MyBatis容易掌握,而Hibernate门槛较高。
    3)Hibernate功能强大,数据库无关性好,O/R映射能力强,需要代码量少,开发速度快

    4、Mybatis缓存机制【MyBatis有两级缓存】
      一级缓存是SqlSession级别的缓存,他的作用域是同一个SqlSession,在同一个sqlSession中执行相同的Sql语句,第一次执行完毕的会将结果集写到缓存中,第二次就会从缓存中获取数据;
      二级缓存是mapper级别的缓存,作用域是mapper的同一个namespace,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。
      Mybatis默认开启一级缓存,没有开启二级缓存,二级缓存需要在xml配置中手动配置开启。
      在全局配置文件 mybatis-cfg.xml 开启缓存
      <!--开启二级缓存 -->
      <settings>
        <setting name="cacheEnabled" value="true"/>
      </settings>
    5、JDBC 编程有哪些不足之处,MyBatis 是如何解决?
    1)数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
      解决:在 SqlMapConfig.xml 中配置数据链接池,使用连接池管理数据库链接。
    2) Sql 语句写在代码中造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java 代码。
      解决:将 Sql 语句配置在 XXXXmapper.xml 文件中与 java 代码分离。
    3)向 sql 语句传参数麻烦,因为 sql 语句的 where 条件不一定,可能多也可能少,占位符需要和参数一一对应。
      解决: Mybatis 自动将 java 对象映射至 sql 语句
    4)对结果集解析麻烦,sql 变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成 pojo 对象解析比较方便。
      解决:Mybatis 自动将 sql 执行结果映射至 java 对象。

    6、使用 MyBatis 的 mapper 接口调用时有哪些要求?
    1)Mapper 接口方法名和 mapper.xml 中定义的每个 sql 的 id 相同
    2) Mapper 接口方法的输入参数类型和 mapper.xml 中定义的每个 sql 的 parameterType 的类型相同
    3)Mapper 接口方法的输出参数类型和 mapper.xml 中定义的每个 sql 的 resultType 的类型相同
    4)Mapper.xml 文件中的 namespace 即是 mapper 接口的类路径

  • 相关阅读:
    重要常识
    ORACLE EBS中有些VIEW经常被OU屏蔽掉数据
    如何使用ftp从Metalink上下载补丁
    SO做了Booked之后,一直处理于“已延交”,发运事务处理的活动区变灰
    WIP模块常用表结构
    BOM查看多个物料下的子物料组件
    OE模块常用表结构
    如何诊断OM中的订单出现的问题
    INV模块常用表结构
    OM定义运费和特别费用类型
  • 原文地址:https://www.cnblogs.com/cao-yin/p/10519570.html
Copyright © 2020-2023  润新知