对于SSM(MyBatis+Spring+SpringMVC)之MyBatis总结
对于ORM持久化框架之前一直是用的JDBC去连接数据库 ,对于JDBC来连接库来说可能存在一些不足,那么MyBatis确切的说只能算半持久化框架,因为MyBatis是需要我们去自动的编写我们的SQL语句的,我们可以用JDBC&MyBatis做一些比较
我们在使用JDBC的时候会对数据库进行一些频繁创建连接和释放连接的操作从而影响的整个系统的性能。那么针对这一方面我们的MyBatis很好的利用了数据库连接池来对我们的链接进行的管理,列如我们在SQLMapConfig.xml的配置文件中使用连接池的技术很好的解决了这一问题那么连接池的原理就是为了提高性能而生产出来的,第一次连接数据库时会创建一个连接然后请求结束后那么连接并不会去关闭,而是放入了连接池中等待下一次的连接,当有请求来时直接使用上一次的连接进行对Server的访问那么这样就省略了创建连接和销毁连接从而从一定程度上提高了程序的性能
回顾之前学习JDBC技术的时候,我们使用JDBC连接数据库SQL语句使用StringBUffer和StringBuilder或者是String进行拼接的那么不利于我们对代码的维护,我们都知道在实际的应用中很多的时候都会变动SQL语句 MyBatis呢将我们的SQL语句放入到Mapper映射文件中动态的拼写SQL那么SQL语句从一定程度上来说也是可以提高性能,并且提高了代码的可扩展性的问题
MyBatis也能够利用@Param注解(两个以上的参数需要加上@Param注解)自动的将Java对象映射到我们SQL语句,MyBatis也能将我们执行完之后的SQL语句映射到对象中
MyBatis的执行一共可以分为五步:首先创建SqlSessionFactory,通过SqlSessionFactory创建SqlSession,这时候我们就可以通过SqlSession进行一些对数据库方面的操作,然后调用session对数据库的事务进行一些提交,最后session.close()方法关闭数据库
MyBatis的一级缓存和二级缓存
Mybatis首先去缓存中查询结果集,如果没有则查询数据库,如果有则从缓存取出返回结果集就不走数据库。Mybatis内部存储缓存使用一个HashMap,key为hashCode+sqlId+Sql语句。value为从查询出来映射生成的java对象
Mybatis的二级缓存即查询缓存,它的作用域是一个mapper的namespace,即在同一个namespace中查询sql可以从缓存中获取数据。二级缓存是可以跨SqlSession的。
那么一级缓存是需要默认开启的而二级缓存是需要手动的去开启的
MyBatis中Sql语句使用#{}传入参数和${}传入参数区别
使用#{}传入参数时会自动的为参数加上单引号而${}是原样的把参数直接显示到SQL语句中,#{}在很大的程度上能够防止SQL注入,${}无法阻止SQL的注入,一般${}用于传递对象比如数据库中的表名,MyBatis排序时使用order by 动态参数时需要注意,用$而不是#
MyBatis中namescape的作用
在MyBatis中,映射文件中的那么namespace是用于绑定Dao的接口的,也就是我们常说的面向接口的编程方式,我们通过namespace绑定接口后,不需要去写接口的实现类,mybatis会通过自动绑定的功能帮助你找到要执行的对应的SQL语句中
那么在这里也可以去提一下我们的CURD中的ID作用也是一致的 那么通过ID找到对应的SQL语句
输出结果类型
- resultType,字段和java对象中属性一致推荐使用resultType
- resultMap,字段和java对象中属性不一致的情况比较多的时候使用resultMap
原文地址:https://www.cnblogs.com/liulei0919/p/9256646.html