对本博客的mybatis重新读一下,做一个整理。如下:
1:为什么会有mybatis,因为原生的jdbc方式有很大问题:
(1)数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响 数据库性能。
设想:使用数据库连接池管理数据库连接。
(2)、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。
(3)、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。
设想:将sql语句及占位符号和参数全部配置在xml中。
(4)、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。
设想:将查询的结果集,自动映射成java对象。
2:mybatis开发流程:
(1)先建立下SqlSessionFactoryBuilder:通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory
(2)通过SqlSessionFactory创建SqlSession,使用单例模式管理sqlSessionFactory(工厂一旦创建,使用一个实例)。将来mybatis和spring整合后,使用单例模式管理sqlSessionFactory。
(3)sqlSession的诞生过程是这样的:通过SqlSessionFactory创建一个SqlSession.
3:DAO开发分成两个方面:
(1)传统的DAO方式:
程序员需要写dao接口以及dao的实现类。
在DAO的实现类中有变量:SqlSessionFactory 。
这个SqlSessionFactory变量在测试方法中写入。
(2)Mapper的开发方式
我先给出mapper代理开发的思路(mapper代理开发的规范):
我们用mapper代理开发时要写2个:
1.mapper.xml
2.mapper接口
我们写的mapper接口只要需要遵循一些开发规则,mybatis可以自动生成mapper接口实现类代理对象。(这句话很重要)
我们重点讲一下开发规则:
开发规范:
1、在mapper.xml中namespace等于mapper接口地址
2、mapper.java接口中的方法名和mapper.xml中statement的id一致
mapper.xml中是这样的:
mapper.java接口应该是这样的:
名字要一模一样的。
3、mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致。
4、mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。
4:在写mapper.xml时,里面有映射。分为两种:resultType和resultMap:
resultType,pojo的名字和mapper.xml中配置的名字一模一样才能映射成功。
resultMap没有上面的要求,可以自己建立映射关系。
一对多怎么映射:用collection。
多对多怎么映射:用collection。
5:与spring的整合
(1)原始DAO开发的整合方式:
我们以前要用Mybatis是需要sqlMapConfig.xml(这个配置文件需要配置dataource,以及mapper.xml文件。)原始的sqlMapConfig.xml如下:
现在我们加入spring之后,database就要交给spring的配置文件applicationContext.xml来处理了。而且我们以前在用Dao时,传统的做法是要在Dao类中有SqlSessionFactory,现在用Spring之后,最主要的改变就是这里了。
需要spring通过单例方式管理SqlSessionFactory。
spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession。(spring和mybatis整合自动完成)
application.xml的配置文件如下:
(2)mapeer代理开发整合: