① 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。 解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。
② Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。 解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。
③ 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。 解决: Mybatis自动将java对象映射至sql语句。
④ 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。 解决:Mybatis自动将sql执行结果映射至java对象。
① 创建SqlSessionFactory ② 通过SqlSessionFactory创建SqlSession ③ 通过sqlsession执行数据库操作 ④ 调用session.commit()提交事务 ⑤ 调用session.close()关闭会话
① Mapper接口方法名和mapper.xml中定义的每个sql的id相同 ② Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同 ③ Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同 ④ Mapper.xml文件中的namespace即是mapper接口的类路径。
SqlMapConfig.xml中配置的内容和顺序如下: properties(属性) settings(配置) typeAliases(类型别名) typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件) environments(环境集合属性对象) environment(环境子属性对象) transactionManager(事务管理) dataSource(数据源) mappers(映射器)
Mybatis首先去缓存中查询结果集,如果没有则查询数据库,如果有则从缓存取出返回结果集就不走数据库。Mybatis内部存储缓存使用一个HashMap,key为hashCode+sqlId+Sql语句。value为从查询出来映射生成的java对象 Mybatis的二级缓存即查询缓存,它的作用域是一个mapper的namespace,即在同一个namespace中查询sql可以从缓存中获取数据。二级缓存是可以跨SqlSession的。
使用此种方法需要编写mapper接口,mapper接口实现类、mapper.xml文件 1、在sqlMapConfig.xml中配置mapper.xml的位置 2、定义mapper接口 3、实现类集成SqlSessionDaoSupport mapper方法中可以this.getSqlSession()进行数据增删改查。 4、spring 配置
1、在sqlMapConfig.xml中配置mapper.xml的位置 如果mapper.xml和mappre接口的名称相同且在同一个目录,这里可以不用配置 2、定义mapper接口 注意 1、mapper.xml中的namespace为mapper接口的地址 2、mapper接口中的方法名和mapper.xml中的定义的statement的id保持一致 3、 Spring中定义
1、mapper.xml文件编写, 注意: mapper.xml中的namespace为mapper接口的地址 mapper接口中的方法名和mapper.xml中的定义的statement的id保持一致 如果将mapper.xml和mapper接口的名称保持一致则不用在sqlMapConfig.xml中进行配置 2、定义mapper接口 注意mapper.xml的文件名和mapper的接口名称保持一致,且放在同一个目录 3、配置mapper扫描器 4、使用扫描器后从spring容器中获取mapper的实现对象 扫描器将接口通过代理方法生成实现对象,要spring容器中自动注册,名称为mapper 接口的名称。