定义
它本是apache的一个开源项目iBatis,它是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,是开发者只需要关注SQL本身,而不需要花费精力去处理;例如注册驱动,创建connection,创建statment,手动设置参数,结果集检索等jdbc繁杂的过程代码,总之,mybatis对jdbc访问数据库的过程进行了封装,简化了JDBC代码。
架构图
(1)mybatis-config.xml是Mybatis的核心配置文件,通过其中的配置可以生成SqlSessionFactory,也就是SqlSession工厂
(2)基于SqlSessionFactory可以生成SqlSession对象
(3)SqlSession是一个既可以发送SQL去执行,并返回结果,类似于JDBC中的Connection对象,也是Mybatis中至关重要的一个对象。
(4)Executor是SqlSession底层的对象,用于执行SQL语句
(5)MapperStatement对象也是SqlSession底层的对象,用于接收输入映射(SQL语句中的参数),以及做输出映射(即将SQL查询的结果映射成相应的结果)
为什么要使用MyBatis?
使用传统方式JDBC访问数据库
(1)使用JDBC访问数据库有大量重复代码(比如注册驱动、获取连接、获取传输器、释放资源等);
(2)JDBC自身没有连接池,会频繁的创建连接和关闭连接,效率低;
(3)SQL是写死在程序中,一旦修改SQL,需要对类重新编译;
(4)对查询SQL执行后返回的ResultSet对象,需要手动处理,有时会特别麻烦;
使用mybatis框架访问数据库(优点)
(1)Mybatis对JDBC对了封装,可以简化JDBC代码;
(2)Mybatis自身支持连接池(也可以配置其他的连接池),因此可以提高程序的效率;
(3)Mybatis是将SQL配置在mapper文件中,修改SQL只是修改配置文件,类不需要重新编译。
(4)对查询SQL执行后返回的ResultSet对象,Mybatis会帮我们处理,转换成Java对象。
占位符
{}占位符
在上面的增删改查中,SQL语句中的值是写死在SQL中,而在实际开发中,此处的值往往是用户提交过来的值,因此这里我们需要将SQL中写死的值替换为占位符
{}代码
<select id="findById" resultType="com.tedu.pojo.Emp">
select * from emp where id=#{id}
</select>
${}占位符
在上面的增删改查中,当SQL语句中包含的参数是传递过来的,在SQL语句中我们会通过#{}占位符进行占位,在SQL语句真正执行时,再将传递过来的值替换SQL语句中的占位符
{}代码
<select id="findAll2" resultType="com.tedu.pojo.Emp">
select ${cols} from emp
</select>