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. php+UEditor粘贴word

    最近公司做项目需要实现一个功能,在网页富文本编辑器中实现粘贴Word图文的功能. 我们在网站中使用的Web编辑器比较多,都是根据用户需求来选择的.目前还没有固定哪一个编辑器 有时候用的是UEditor ...

  2. curl配置host

    //要配置的虚拟域名$host = array( 'Host: demo-local.com' );$ch = curl_init();//要配置的ip 例如本机localhostcurl_setop ...

  3. appium+python+Windows自动化测试文档

    appium+python自动化测试文档 一.认识appium 1.    什么是appium appium是开源的移动端自动化测试框架: appium可以测试原生的.混合的.以及移动端的web项目: ...

  4. Python 清华镜像设置

    大家在通过pip 或conda 下载一些很大的第三方库时是不是有一种等到坟头的草都三尺高了,还没下载完的感觉,而且大的第三方库长时间下载,可能会导致超时自动中断下载,感谢清华的大佬们 临时使用: pi ...

  5. dfs入门-cogs1640[黑白图像]

    题目链接:http://cogs.pro:8081/cogs/problem/problem.php?pid=vxSmxkeqa [题目描述] 输入一个n×n的黑白图像(1表示黑色,0表示白色),任务 ...

  6. 分类并查集[noi2001 食物链]

    题目链接:http://cogs.pro:8081/cogs/problem/problem.php?pid=pxNJzxVPU 题目有三种动物,A吃B,B吃C,C吃A 即B是A的食物,A是B的天敌, ...

  7. AD域环境取消密码复杂度和密码使用期限

    本地组策略功能中设置密码永不过期的时候发现功能置灰了,不能设置: 这是因为创建域后默认本地组策略功能会被转移到域组策略管理里面,所以我们可以去组策略管理器里去更改组策略,因为一般本地策略的优先级别最低 ...

  8. [LGP4707] 重返现世

    世界是物质的,物质是运动的,运动是有规律的,规律是可以被认识的. 关于期望意义下min-max容斥,我们认为每个事件的时间来认识事件,max/min S表示集合S中所有时间最后/最前出现的事件,E(m ...

  9. spark教程(18)-sparkSQL 自定义函数

    sparkSQL 也允许用户自定义函数,包括 UDF.UDAF,但没有 UDTF 官方 API class pyspark.sql.UDFRegistration(sparkSession)[sour ...

  10. Katu Puzzle POJ - 3678 (2 - sat)

    有N个变量X1X1~XNXN,每个变量的可能取值为0或1. 给定M个算式,每个算式形如 XaopXb=cXaopXb=c,其中 a,b 是变量编号,c 是数字0或1,op 是 and,or,xor 三 ...