Mybatis浅谈

1.JDBC编程的流程和弊端?

流程:
1.加载数据库驱动。
2.获得连接,如果事DML操作的话需要开启事务。
3.通过statement执行sql得resultSet。
4.结果集和实体做一个映射对应起来,提交事务。
5.关闭连接资源,异常处理等。
弊端:
代码量大且容易出错。

2.ORM是什么?

指的是对象关系映射,也就是说实体类和数据库表的映射。

3.Mybatis是什么?优点和缺点?

是一个ORM框架,解决了JDBC代码量大易出错的问题。
优点:
省去了JDBC加载驱动、创建连接、结果集映射等操作,直接写SQL就可以了,实体和数据库表的对应可以直接通过逆向工程生成xml。
缺点:
数据库的可移植性差。

4.映射器

4.1在mapper中如何传递多个参数?

1.如果是小于5个参数一般采用@Param注解。
2.大于5个参数可以用实体类或者map。

4.2表中的字段名和实体属性对应不上?

1.用手动映射resultType=实体,map都行,然后给字段起别名。
2.用自动映射resultMap,直接用逆向工程生成的就可以用。

4.3如何获取主键?

像Oracle数据库的话用我用标签获取序列的值。

4.4${}和#{}的区别?

#{}是预编译的,能防止sql注入,最开始通过?占位,执行时候加上引号当字符串处理。
${}不能防止sql注入,一般在动态的输入表名、字段名时候使用。

4.5模糊查询的like怎么写?

像oracle的话我一般使用concat(’%’,#{},’%’)。

4.6Mybatis如何做批量操作?

1.像oracle的话用动态sql的foreach循环value(),有的数据库对这种写法是不支持的。
2.将SqlSession中的Executor执行器设置成batch批量。

4.7什么是Mybatis的接口绑定?

1.采用mapper+xml的方式。
2.直接在mapper接口上写sql。

4.8mapper接口调用需要注意些什么?mapper中的接口能重载?

namespace和mapper接口名一致,id和方法名一致、参数类型一致。
不能重载,因为是根据namespace+id来存入Configuration对象中。

4.9映射文件xml中有哪些常用标签?


动态sql中的 等

4.10mybatis关联查询的方式有哪些?

1.嵌套结果(一对多的嵌套结果:https://blog.csdn.net/suprezheng/article/details/85010956)
2.嵌套查询 (一对多的嵌套查询:https://blog.csdn.net/suprezheng/article/details/85010843)
可以通过association和collection来实现一对一和一对多

4.11缓存?spring结合mybatis默认开启缓存吗?

1.一级缓存存在于一次会话中,作用域等同于SqlSession,如果sql相同的话会直接从缓存中取数据,不会再次执行sql。默认
是开启的。然后需要注意的是和Spring集成后,如果是同一事务中,调用多次mapper中的接口使用的是同一个SqlSession,一级缓存有效。
2.二级缓作用域是mapper级别,默认是不开启的。

5.SqlSession的四大对象?

执行器Executor,StatementHandler、ParameterHandler、ResultHandler

6.Mybatis的运行原理?

1.创建SqlSessionFactory对象
采用建造者模式,通过SqlSessionFactoryBuilder来创建。首先通过XMLConfigBuilder对象读取数据库连接等配置和映射器信息(主要是MappedStatement)存入Configuration。然后通过Configuration创建SqlSessionFactory。SqlSessionFactory存在于整个应用中,并且是单例的。
2.创建SqlSession
通过SqlSessionFactory创建SqlSession。存在于一个会话中,相当于JDBC中Connection对象,是多实例的。
3.SqlSession的运行
当调用Mapper中的接口时,会根据JDK的动态代理调用MapperProxy中的invoke方法,然后调用MapperMethod中的execute方法,接着SqlSession中的执行器Executor会协调StatementHandler、ParameterHandler、ResultHandler来对Sql进行预编译、参数设置、执行、结果集的映射等,执行的过程中会从MappedStatement中获取id、sql、入参类型、出参类型、映射等信息。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值