标签:
1. 问题总结
1). 数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响 数据库性能。
设想:使用数据库连接池管理数据库连接。
2). 将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。
3). 向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。
设想:将sql语句及占位符号和参数全部配置在xml中。
4). 从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。
设想:将查询的结果集,自动映射成java对象。
2. mybatis主要流程:
1). SqlSessionFactory(会话工厂),根据配置文件创建工厂 作用:创建SqlSession
2). SqlSession(会话),是一个接口,面向用户(程序员)的接口 作用:操作数据库(发出sql增、删、改、查)
3). Executor(执行器),是一个接口(基本执行器、缓存执行器) 作用:SqlSession内部通过执行器操作数据库
4). mapped statement(底层封装对象) 作用:对操作数据库存储封装,包括 sql语句,输入参数、输出结果类型
输入参数类型: java简单类型,hashmap,pojo自定义
输出结果类型:java简单类型,hashmap,pojo自定义
3. 映射文件:
映射文件命名:User.xml(原始ibatis命名),mapper代理开发映射文件名称叫XXXMapper.xml,比如:UserMapper.xml、ItemsMapper.xml
映射文件中配置sql语句:
4. 加载配置文件(一般项目中使用包扫描的方式)
5. 模糊查询:传入参数中加上%(例如传入参数为:"%"+name+"%"),在代码中加入%的,而不是在mybatis配置文件中增加。配置文件中使用#{}。
6. 插入:
7. 自增主键返回(mysql):
8. 删除:
9. 更新:
9. 小结:
parameterType:在映射文件中通过parameterType指定输入参数的类型。
resultType:在映射文件中通过resultType指定输出结果的类型。
#{}和${}:
#{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。如果接收简单类型,#{}中可以写成value或其它名称。#{}接收pojo对象值,通过OGNL读取对象中的属性值,
通过属性.属性.属性...的方式获取对象属性值。
${}表示一个拼接符号,会引用sql注入,所以不建议使用${}。${}接收输入参数,类型可以是简单类型,pojo、hashmap。如果接收简单类型,${}中只能写成value。${}接收pojo对象值,通过
OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。
10. selectOne和selectList:
selectOne表示查询出一条记录进行映射。如果使用selectOne可以实现使用selectList也可以实现(list中只有一个对象)。selectList表示查询出一个列表(多条记录)进行映射。如果使用selectList
查询多条记录,不能使用selectOne,否则会报错。
11. mybatis和hibernate本质区别和应用场景:
hibernate:是一个标准ORM框架(对象关系映射)。入门门槛较高的,不需要程序写sql,sql语句自动生成了。对sql语句进行优化、修改比较困难的。
应用场景: 适用与需求变化不多的中小型项目,比如:后台管理系统,erp、orm、oa。。
mybatis:专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全 的ORM框架,虽然程序员自己写sql,mybatis 也可以实现映射(输入映射、输出映射)。
应用场景:适用与需求变化较多的项目,比如:互联网项目。
企业进行技术选型,以低成本 高回报作为技术选型的原则,根据项目组的技术力量进行选择。
12. mybatis开发dao的方法:
SqlSessionFactoryBuilder:通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory。将SqlSessionFactoryBuilder当成一个工具类使用即可,不需要使用单例管理
SqlSessionFactoryBuilder。在需要创建SqlSessionFactory时候,只需要new一次SqlSessionFactoryBuilder即可。
SqlSessionFactory:通过SqlSessionFactory创建SqlSession,使用单例模式管理sqlSessionFactory(工厂一旦创建,使用一个实例)。将来mybatis和spring整合后,使用
单例模式管理sqlSessionFactory。
SqlSession:一个面向用户(程序员)的接口。SqlSession中提供了很多操作数据库的方法:如:selectOne(返回单个对象)、selectList(返回单个或多个对象)。 SqlSession是线程不安全的,
在SqlSesion实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性。SqlSession最佳应用场合在方法体内,定义成局部变量使用。
13. 原始dao开发方法:
思路:程序员需要写dao接口和dao实现类。需要向dao实现类中注入SqlSessionFactory,在方法体内通过SqlSessionFactory创建SqlSession
问题:
a). dao接口实现类方法中存在大量模板方法,设想能否将这些代码提取出来,大大减轻程序员的工作量。
b). 调用sqlsession方法时将statement的id硬编码了
c). 调用sqlsession方法时传入的变量,由于sqlsession方法使用泛型,即使变量类型传入错误,在编译阶段也不报错,不利于程序员开发。
14. mapper代理方法:
思路: 程序员还需要编写mapper.xml映射文件。编写mapper接口时需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。程序员只需要mapper接口(相当 于dao接口)
开发规范:
a). 在mapper.xml中namespace等于mapper接口地址
标签:
原文地址:http://www.cnblogs.com/Jtianlin/p/5096789.html