Mybatis

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 &lt; #{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 实现类组件 需要组件扫描 
posted @ 2020-09-03 18:09  火星的巧克力  阅读(162)  评论(0编辑  收藏  举报
/* 返回顶部代码 */ TOP