zoukankan      html  css  js  c++  java
  • 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 实现类组件 需要组件扫描
  • 相关阅读:
    Python_FTP通讯软件
    Python_NAT
    Python_跟随目标主机IP变换
    Python_网络攻击之端口
    spring
    Java多线程总结之线程安全队列Queue
    队列
    路径
    事务的概念
    GBK,UTF-8,和ISO8859-1之间的编码与解码
  • 原文地址:https://www.cnblogs.com/lzy1212/p/13609101.html
Copyright © 2011-2022 走看看