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 接口的类路径

mybatis-04【小结】的更多相关文章

  1. mybatis入门小结(六)

    入门小结---查询 1.1.1.1.1 #{}和${} #{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以 ...

  2. mybatis 使用经验小结

    一.多数据源问题 主要思路是把dataSource.sqlSesstionFactory.MapperScannerConfigurer在配置中区分开,各Mapper对应的包名.类名区分开 <? ...

  3. Hello Mybatis 04 使用spring-mybatis

    顺着上一篇,这里介绍下spring-mybatis的配置. 我们使用mybatis去操作数据库的时候,每次都要不停地openSession,closeSession好烦躁哇--这样工作哪里有效率可言! ...

  4. MyBatis学习小结

    一款轻量级的ORM框架 全局配置文件 SqlMapConfig.xml <?xml version="1.0" encoding="UTF-8" ?> ...

  5. mybatis 使用经验小结 good

    一.多数据源问题 主要思路是把dataSource.sqlSesstionFactory(用来产生sqlSession).MapperScannerConfigurer在配置中区分开,各Mapper对 ...

  6. mybatis基础小结

    1.JDBC是怎么访问数据库的?答:JDBC编程有6步,分别是1.加载sql驱动,2.使用DriverManager获取数据库连接,3.使用Connecttion来创建一个Statement对象 St ...

  7. mybatis 04: mybatis对象分析 + 测试代码简化 + 配置优化

    MyBatis对象分析 测试代码示例 package com.example.test; import com.example.pojo.Student; import org.apache.ibat ...

  8. MyBatis 04 实战

    增删改查实现 在实际使用中,MyBatis 的使用遵从一定的规范. 常用的增删改查的 MyBatis 实现如下: Mapper.xml <?xml version="1.0" ...

  9. Mybatis用法小结

    select 1.基本用法 <select id="selectTableOne" resultType="com.test.entity.tableOne&quo ...

  10. MyBatis使用小结

随机推荐

  1. .net 开源 FTP 组件 edtFTPnet

    edtFTPnet官方网站:http://www.enterprisedt.com/products/edtftpnet/ 目前最新版本为2.2.3,下载后在bin目录中找到edtFTPnet.dll ...

  2. redis集群 应该注意的问题

    redis cluster注意的问题 : ‘cluster-require-full-coverage’参数的设置.该参数是redis配置文件中cluster模式的一个参数,从字面上基本就能看出它的作 ...

  3. 【DSP开发】DSP通用并行端口uPP

      这是翻译TI官方文档<KeyStone Architecture Universal Parallel Port (uPP)>SPRUHG9有关通用并行端口uPP的内容(除寄存器部分) ...

  4. 在Linux虚拟机里开启Apache服务

    首先第一步我们配置环境:把yum与Linux ping通 1.我们来下载apache服务,输入:yum install httpd * 2.安装完毕之后默认是死的,要给他启动一下,输入命令:syste ...

  5. android带参和不带参的页面跳转形式

    FActivity.java package com.example.demo06; import android.app.Activity;import android.content.Contex ...

  6. 【转帖】.NET的一点历史故事:Novell的崩溃和Xamarin的重生

    .NET的一点历史故事:Novell的崩溃和Xamarin的重生 https://blog.csdn.net/sD7O95O/article/details/78096502 学习安装 mono 时了 ...

  7. Android笔记01--手机振动

    一.android任务栈  不懂? 栈:先进后出 队列:先进先出 任务栈Task中:打开一个Activity叫进栈 关闭一个activit出栈 任务栈是用来维护Activity的.是用来维护用户的操作 ...

  8. OracleLinux6安装

    针对Oracle数据库安装的linux系统 1.首先要有oracle linux的镜像 链接:https://pan.baidu.com/s/1S3xYr4YNGtU-351bVaS1-Q 提取码:a ...

  9. 【LOJ】#2983. 「WC2019」数树

    LOJ2983. 「WC2019」数树 task0 有\(i\)条边一样答案就是\(y^{n - i}\) task1 这里有个避免容斥的方法,如果有\(i\)条边重复我们要算的是\(y^{n - i ...

  10. Android控制UI界面

    ⒈使用XML布局文件控制UI界面[推荐] Android推荐使用XML布局文件来控制视图,这样不仅简单.明了,而且可以将应用的视图控制逻辑从Java或Kotlin代码中分离出来,放入XML文件中控制, ...