mybatis:
①介绍:
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。
MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
②原生态的JDBC程序出现的问题
一、在创建连接时会存在硬编码
二、在执行statement时存在硬编码
三、频繁的开启和关闭数据库连接,会造成数据库性能下降
③创建全局配置文件
在config目录下创建SQLMapConfig.xml 文件,名称不固定
配置的文件信息包括有:
<!-- 配置mybatis的环境信息 --> (与spring整合后,该信息由spring来管理)
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,采用dbcp连接池 -->
<dataSource type="POOLED">。。。
</dataSource>
加载映射文件:<!-- 加载mapper -->
<mappers>
<mapper resource="sqlmap/User.xml"/>
</mappers>
④ 添加log4j.properties文件
⑤编写映射文件
<!--
namespace:命名空间,它的作用就是对SQL进行分类化管理,可以理解为SQL隔离
注意:使用mapper代理开发时,namespace有特殊且重要的作用
-->
<mapper namespace="test">
<!-- 根据用户ID,查询用户信息 -->
<!--
[id]:statement的id,要求在命名空间内唯一
[parameterType]:入参的java类型
[resultType]:查询出的单条结果集对应的java类型
[#{}]: 表示一个占位符?
[#{id}]:表示该占位符待接收参数的名称为id。注意:如果参数为简单类型时,#{}里面的参数名称可以是任意定义
-->
<select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
SELECT * FROM USER WHERE id = #{id}
</select>
</mapper>
⑥编写测试程序步骤
一、读取配置文件SQLMapConfig
二、通过sqlSessionFactoryBuilder获取sqlSessionFactory对象
三、获取SQLSession对象
四、sqlSession 执行statement,并返回映射结果
//第一个参数:statement的id,建议:namespace.statementId(确保唯一)
//第二个参数:入参的值,它的类型要和映射文件中对应的statement的入参类型一致
User user = sqlSession.selectOne("findUserById", 1);
五、关闭sqlSessionmybatis与spring整合:
整合思路介绍:
Ø 需要spring来管理数据源信息。
Ø 需要spring通过单例方式管理SqlSessionFactory。
Ø 使用SqlSessionFactory创建SqlSession。(spring和mybatis整合自动完成)
Ø 持久层的mapper都需要由spring进行管理,spring和mybatis整合生成mapper代理对象。
集成步骤
1、 jar包集成;
2、 配置文件集成(数据源);
3、 SqlSessionFactory集成;
4、 Mapper接口集成;( + mapper.xml文件)
配置文件的集成:1、Mybatis的sqlMapConfig.xml
设置全局参数
定义别名
加载映射mapper文件
<!-- 注意:与spring集成后,数据源和事务交给spring来管理 --
2、spring的applicationContext.xml
引用java配置文件
<context:property-placeholder location="db.properties"/>
配置数据源,使用jdbc连接池
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">。。。</bean>