mybatis的使用
一、回顾jdbc的开发步骤
-
1、加载驱动
class.forName();
-
2、获取数据库连接
DriverManager.getConnect();
-
3、获取sql执行器
connect.getStatement();
-
4、编写sql
String sql="";
-
5、执行sql
statement.excuet();
-
6、获取结果集
Result
-
7、释放资源
state.close(); con.close();
二、使用mybatis解决什么问题
- 解决jdbc编码的SQL硬编码问题
- 解决jdbc数据库连接的硬编码问题
- 解决jdbcSQL参数传递的复杂性问题
- 解决数据库数据和表的pojo的映射问题
- 解决sql集合操作的复杂性
三、mybatis的执行原理
1、通过Resources.getResourceAsStream(配置文件)加载核心配置文件,
2、通过new SqlSessionFactoryBuilder().bulid(加载文件的输入流),获取SqlSessionFactory
3、通过 sqlSessionFactory.openFactory(),开启sql会话
4、sqlSession调用executor执行器
5、executor调用MapperStatement来处理sql语句和结果集的映射
四、两个配置文件
-
核心配置文件mybatis-config.xml
mybatis使用的DTD约束,标签的书写是有序的 //环境配置 <!-- default:默然使用的数据源环境--> <environments default="development"> <environment id="development"> <!-- 事务管理 jdbc和MANAGE(只存在查询操作的时候使用)--> <transactionManager type="JDBC"/> <!-- 数据源 POOLED(连接池) unplooed(只是每次请求的时候打开连接) JNDI:可以在EJB或者应用服务上使用 --> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> //属性的配置,使用${}属性名来引用 <properties resource="外部资源文件"></properties> //别名的配置 <typeAliases></typeAliases> //设置配置,用来改变mybatis的运行时行为 <settings> <setting name="" value=""/> </settings> //插件配置 //映射文件配置 <mappers> <!-- DTD约束要求标签的书写有顺序--> <mapper resource="y映射文件放的名称"/> <!--类扫描 : 要求1、接口文件必须和配置文件在同一目录下 2、配置文件的名称必须和接口的类名保持一致 --> <mapper class="接口的全限定名"/> <!--包扫描 : 要求1、接口文件必须和配置文件在同一目录下 2、配置文件的名称必须和接口的类名保持一致 --> <package name="com.zl.dao"/> </mappers>
-
sql映射文件mapper.xml
查询 <select></select> 插入 <insert></insert> 修改 <update></update> 删除 <delete></delete> 条件 <where></where> 集合参数的处理,collection属性填写的是集合的类型 <foreach></foreach> set设置 <set></set> 条件为真时才添加 <if test=""></if> sql代码段的处理 <sql></sql>
五、传入参数处理方式
五、传入参数的处理
- 三个及以上的参数封装成对象
- 两个参数使用@param标注
六、sql结果输出的处理
- 属性名和字段名一致,使用reultType
- 属性名和字段名不一致,使用resultMap
七、动态代理接口的开发规则
- 映射文件和接口在同一资源路径下
- 映射文件的名字和接口的名字一致
- 映射文件的id和接口的方法名一致
- 映射文件的paramType和接口的方法参数一致
- 映射文件的resultType/resultMap和接口的方法返回值一致
八、缓存机制
- 一级缓存
- 用来处理同一用户的多次相同的操作
- 默认是开启的,并没有提供关闭
- 二级缓存
- 用来处理不同用户的相同操作
- 使用
- 对于缓存设计的数据pojo要实现序列化
- 要释放资源
- 注意:在会话中不要对数据库操作后的数据做修改,会造成缓存数据的失真