1.历史
Apache Google GitHub
IBatis Mybatis Mybatis
2.Mybatis的作用
1 它支持普通的SQL 操作 以及 存储过程的调用
2 它是一个高级的ORM框架 (以面向对象的思想操作数据库)
3 它封装了几乎的jdbc操作 以及参数的手工设置
4 自动检索结果集(自动把结果集转换成对象 甚至关联的对象)
3.MyBatis 框架的构成
1 实体bean 封装数据信息
2 SQL 定义文件 封装SQL语句的XML
3 主配置文件 定义连接数据库的信息的 加载sql定义文件 等
4 框架的API 涉及到SqlSession对象的创建 还有SqlSession 对应的API 主要完成增删改查
4.以根据id 查询银行账户为例 编写Mybatis程序
1 建立一个项目 导入jar包(mybatis.jar ojdbc6.jar)
2 根据表 建立对应的实体类
3 编写SQL 定义文件 (拷贝sql定义的模板到一个包中)
<mapper namespace="com.xdl.dao.DeptMapper">
<!-- 定义SQL语句 -->
<select id="findById" parameterType="int"
resultType="com.xdl.entity.Bank">
select * from bank where bid = #{bid}
</select>
</mapper>
4 拷贝主配置文件模板到src下 修改对应的信息
5 使用Mybatis的API 获取SqlSession 对象 使用这个对象完成对应的sql操作
工具类
public class SqlSessionUtil {
private static SqlSessionFactory ssf;
static {
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
// 得到一个SqlSessionFactory 类型的对象
InputStream inputStream = Bank.class.getClassLoader().getResourceAsStream("sqlmap-config.xml");
ssf = ssfb.build(inputStream);
}
public static SqlSession getSqlSession(){
try {
return ssf.openSession();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
5.Mapper 映射器 ---- 根据规则设计DAO接口 可以自动产生实现类
1 DAO 接口的方法名 必须和 SQL 定义文件中 SQL语句的id保持一致
2 接口方法的返回值类型 一般和resultType 保持一致
查询语句如果返回单值 那使用 resultType
查询语句如果可能返回多个值 则使用List<resultType对应的类型>
对DML(insert delete update) 可以是返回void 也可以返回int 推荐返回int
3 接口方法的参数类型 和 parameterType 保持一致
如果没有 parameterType 则参数可以任意
4 SQL 定义文件中的namespace 必须是 包名.接口名
Mybatis 多个参数的处理
1 通过Map 或者 对象类型 包装多个参数
2 通过在sql 语句中 使用 index 对参数进行编号 编号从 0开始
3 也可以使用 param1 等对参数进行编号 编号从 param1 开始
4 @Param("参数名") 设置在接口方法的参数上
分页的实现
1 rownum
按照acc_money 排序 一页显示 X 条 显示 第 n 页数据
pageSize:每页显示条数 pageNumber:当前页
<select id="findBankListBypageInfo" resultType="com.xdl.entity.Bank">
select * from
(select rownum r,t.* from
(select * from bank order by money) t
where rownum < #{pageSize}*#{pageNumber} + 1
) where r > ((#{pageNumber}-1)*#{pageSize})
</select>
使用分页插件 ---- 根据某个字段排序 查询表中的所有数据
a.拷贝分页插件的jar包(pageHelper.jar jsqlparser.jar) 到lib
b.在主配置文件中配置 分页插件的拦截器
c.使用分页插件的api 完成分页查询
select * from (
select tmp_page.*, rownum row_id from (
select * from xdl_bank_account_30 order by acc_money )
tmp_page where rownum <= ? ) where row_id > ?
当数据库中的字段 表 实体类中属性不对应时如何解决?
1 使用字段的别名
2 使用resultMap 让数据库字段和实体类中的属性对应
Spring 和 Mybatis 整合
1 SqlSessionFactoryBean
产生的是 SqlSessionFactory 类型的对象 最终能提供 SqlSession
这个类型 依赖于 dataSource 和 Sql 定义文件
2 MapperFactoryBean
产生的是Mapper 的实现类
这个类型 依赖于 SqlSessionFactory 和 Mapper接口
整合步骤
5.1建立一个项目 导入jar包(mybatis.jar mybatis-spring.jar
ojdbc14.jar ioc aop dao 数据库连接池 ) 拷贝Spring配置文件到src
5.2 编写实体类
5.3 编写SQL 定义文件
根据id 查询银行账户
5.4 根据Mapper映射器规则 编写DAO 接口
5.5 在Spring 配置文件中 配置 SqlSessionFactoryBean
依赖于dataSource 和 SQL 定义
5.6 在Spring 配置文件中 配置 MapperFactoryBean 就可以产生DAO 的实现类
批量产生Mapper实现类的组件
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xdl.mapper"></property>
</bean>
通过自定义标注 控制接口产生实现类
第二种集成方案
SqlSessionTemplate
1建立一个项目 导入jar包(mybatis.jar mybatis-spring.jar
ojdbc14.jar ioc aop dao 数据库连接池 ) 拷贝Spring配置文件到src
2 编写实体类
3 编写SQL 定义文件
根据id 查询银行账户
4 根据Mapper映射器规则 编写DAO 接口
5 在Spring 配置文件中 配置 SqlSessionFactoryBean
依赖于dataSource 和 SQL 定义
6 编写DAO 的实现类 实现DAO 接口 并注入 SqlSessionTemplate 类型的对象
这个对象依赖于 sqlSessionFactory。利用SqlSessionTemplate 对应的API 完成操作。
注意创建DAO 实现类组件 需要组件扫描