说说mybaits原理
首先,之前Java连接数据库jdk有定义一套规范JDBC,但是这个规范使用起来太麻烦, 流程大概有加载驱动、连接数据库、执行sql、处理结果、释放资源。 特别是sql是以字符串的形式进行传参的,
所以在写sql时需要在代码里进行各种字符串的拼接,使用连接池也很不方便等等,严重影响开发的效率, 所以mybatis就是基于此诞生。
mybatis时对JDBC的增加,底层还是调用的JDBC接口,但是做一些方便开发者进行数据库操作的事情,
比如 通过mapper文件进行sql的编写,
一是进行sql和业务代码解耦,二是提供很多方便实用标签给开发者编写sql总比字符串拼接方便,三开发时通过接口的方式进行访问数据库,mybatis会自动通过动态代理生成接口的代理,接口被调用时执行相应的sql返回结果。 将数据库返回结果自动与Java对象进行映射,还支持如理驼峰命名这种命名习惯进行转换,省去了很多麻烦。 内置一个连接池的支持,不用开发者自己实现连接池。 通过一二级缓存机制提高访问性能
mybatis中#{}和${}区别?
使用#{}是进行预编译处理的,也就是话无论传什么值都直接加单引号作为参数的值传递,传入命令什么的都当作字符串处理,而${}是直接进行字符串拼接的,假设传入一些命令是会被执行的
mybatis中一二级缓存的工作机制?
首先这个缓存是未了减少进行数据库的查询次数进行缓存的,前提是当查询条件查询参数一样而且期间没有进行增删改时返回的结果时一样的
所以可以进行缓存,下次再查时直接取缓存的数据加快查询速度。
一级缓存时会话级别的,不同的sqlsession是不共享缓存的。
二级缓存是可以跨会话的,作用空间是namespace级别,不同的sqlsession操作同一个mapper是可以共享缓存的,但是一个mapper操作多个表的情况就会有误所以还是有局限的。
一级缓存默认开的,二级默认关闭,当查询是先去查二级缓存没有再查一级缓存。