Mybatis浅谈

Mybatis

  • 1.JDBC编程的流程和弊端?
  • 2.ORM是什么?
  • 3.Mybatis是什么?优点和缺点?
  • 4.映射器
    • 4.1在mppaer中如何传递多个参数?
    • 4.2表中的字段名和实体属性对应不上?
    • 4.3如何获取主键?
    • 4.4${}和#{}的区别?
    • 4.5模糊查询的like怎么写?
    • 4.6Mybatis如何做批量操作?
    • 4.7什么是Mybatis的接口绑定?
    • 4.8mapper接口调用需要注意些什么?
    • 4.9Mybatis的关联查询的方式有哪些?
    • 4.10缓存?spring结合mybatis默认开启缓存吗?
  • 5.SqlSession的四大对象?
  • 6.Mybatis的运行原理?

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

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

2.ORM是什么?

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

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

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

4.映射器

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

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

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

	1.用手动映射resultType=实体,map都行,然后给字段起别名。
	2.用自动映射resultMap。

4.3如何获取主键?

	如果是Oracle数据库的话用标签获取。

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

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

4.5模糊查询的like怎么写?

	concat('%',#{},'%')。

4.6Mybatis如何做批量操作?

	1.用动态sql的foreach循环value()。
	2.将SqlSession中的Excetor执行器设置成batch批量。

4.7什么是Mybatis的接口绑定?

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

4.8mapper接口调用需要注意些什么?

	namespace和mapper接口名一致,id和方法名一致、参数类型一致。

4.9Mybatis的关联查询的方式有哪些?

	1.嵌套结果
	2.嵌套查询

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

	1.一级缓存存在于一次会话中,作用域等同于SqlSession,如果sql相同的话会直接从缓存中取数据,不会再次执行sql。默认
	是开启的,但是和spring结合时候失效。
	2.二级缓存存在于整个应用中,作用域等同于SqlSessionFactory,一般用的少。

5.SqlSession的四大对象?

	执行器Executor,StatementHandler、ParameterHandler、ResultHandler

6.Mybatis的运行原理?

	1.创建SqlSessionFactory对象
	通过SqlSessionFactoryBuilder对象通过建造者模式创建。首先通过XMLConfigBuilder对象读取数据库连接等配置和映射器信息
	(主要是MappedStatement)存入Configuration。然后通过Confiuration创建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、入参类型、出参类型、映射等信息。

你可能感兴趣的:(Mybatis,mybatis)