搜索
您的当前位置:首页Mybatis(一)

Mybatis(一)

来源:世旅网

一、传统JDBC弊端
1、没有连接池、操作数据库需要频繁创建连接,消耗很大。
2、写原生的jdbc代码在java中,一旦我们需要修改sql的话,java需要整体编译,不利于系统维护
3、使用PreparedStatement预编译的话对变量进行设置
流程:打开数据库,使用PreparedStatement方法,执行sql,关闭我们的数据库。
String sql=“insert into xxxx”
User c=赋值;
Conection conn=DbUtil.open();
PreparedStatement pstmt=(PreparedStatement ) conn.prepareStatement(sql);
pstmt.setString(1,c.getUserName);
pstmt.setString(2,c.getAge);
pstmt.setString(3,c.getSex);
按照123顺序编码,去掉之中的一个后面的需要全部去掉,这种分格代码量很大。不利于维护。
4、返回的结果集也需要硬编码
Mybatis
ORM框架:用于实现面向对象编程语言里不同类型系统的数据之间的转换;
比如字符串在java叫String,在sql中叫做varchar。mybatis就是中间的翻译。
5、mybatis如何获取数据库源。
数据库源:
1、driver驱动(是什么数据库),url怎么连接数据库,username,password;
执行语句:增删改查;
操作:Connection,PrepareStatement,ResultSet;
mybatis的全局配置,在mybatis中的xml文件上所有的标签都有对应的类和 他一一对应;
mybaits底层其实调用的就是jdbc的代码,mybatis就是封装了jdbc的代码。
6、一级缓存,二级缓存
默认之开启一级缓存;
① 什么时候触发:在参数和sql完全一样的情况下,在缓存未被声明需要刷新,并且缓存没有超时的情况下sqlSession都会取出当前一级缓存的数据而不是去数据库中拿。
②一级缓存的生命周期有多长?
mybatis在开启一个数据库会话时,会创建一个新的sqlSession对象,sqlSession对象会有一个新的Executor对象,一级缓存对象PerpetualCache就存在Executor中。
sqlSession调用close,释放一级缓存对象,就变得不可用,执行clearCache()就会清空一级缓存,数据被清空但是对象仍然可用。 sqlSession执行了增删改都会清空一级缓存。
③怎么判断两次查询是完全相同的查询
传入的statementId,传入的参数相同,结果集的范围相同,最终要传递给Preparedstatement的sql‘语句字符串相同
二级缓存:默认不开启,要求实体类必须是可序列化的(实现Serializable接口),在映射XML文件配置就可以开启二级缓存。
当配置了二级缓存:
所有的select 语句将会被缓存,所有增删改语句会刷新缓存。缓存会默认LRU(最近最少使用的)算法来回收,缓存会被视为read/write的缓存,对象的检索变得不是通向的,可以安全的被调用者修改。
7、动态sql都有哪些
trim,where ,set ,foreach,if ,choose,when ,otherwise, bind
8、#{}和${}的区别是什么?
${}是字符串替换,#{}是预处理 防止字符注入
9、mapper.xml文件,都会对应一个Dao接口,工作原理是什么?
mapper通过jdk动态代理在运行时使用jdk动态代理为mapper接口生成代理对象,代理对象拦截接口方法,根据唯一限定名+方法明唯一定位到一个MapperStatement并调用执行器执行所代表的sql,然后将sql执行结果返回。
10、Mybatis是如何进行分页的?
使用RowBounds对象进行分页,这种分页方式是将所有结果集查询出来再进行分页。我们可以使用比如mysql使用limit来分页。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top