MyBatis技术总结

MyBatis技术总结

分类:JavaEE框架技术原创文章
作者:程序猿VV

  • 什么是MyBatis?

    MyBatis是一个基于JDBC的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain OldJava Objects,普通老式 Java 对象)为数据库中的记录。

  • MyBatis中的主要组成部分

    SqlSessionFactory:SqlSessionFactory 可以被认为是一个数据库连接池,它的作用是创建 SqlSession 接口对象。因为 MyBatis 的本质就是 Java 对数据库的操作,所以 SqlSessionFactory 的生命周期存在于整个 MyBatis 的应用之中,所以一旦创建了 SqlSessionFactory,就要长期保存它,直至不再使用 MyBatis 应用,所以可以认为 SqlSessionFactory 的生命周期就等同于 MyBatis 的应用周期。

    SqlSessionFactory创建代码示例:
    InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
      ```
    >SqlSession:即会话,相当于JDBC中的连接+操作+结果集。
    >
    >如果说 SqlSessionFactory 相当于数据库连接池,那么 SqlSession 就相当于一个数据库连接(Connection 对象),你可以在一个事务里面执行多条 SQL,然后通过它的 commit、rollback 等方法,提交或者回滚事务。所以应该存活在一个业务请求中,处理完整个请求后,应该关闭这条连接,让它归还给 SqlSessionFactory,否则数据库资源就很快被耗费精光,系统就会瘫痪,所以用 try...catch...finally... 语句来保证其正确关闭。
    
    ##### SqlSession创建代码示例:
    
    ```java
    SqlSession sqlSession = sqlSessionFactory.openSession();
    
  • MyBatis配置

    • 设置(settings)

    主要作用:MyBatis框架运行规则配置,可以影响MyBatis的运行时行为。

    设置(settings)代码示例:
    
      
          
          
      
    
    • 类型别名(typeAliases)

      主要作用:1.通过标签下的子标签给指定类的完全限定名取别名。

      2.通过标签下的子标签直接指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean。

    类型别名(typeAliases)代码示例:
      
      
          
    
          
          
      
    
    • 环境配置(environments)

    主要作用:定义了如何配置元素,包括环境元素、事务管理器、数据源配置、数据源参数设置(此处使用properties外部文件设置);如果需要配置多个环境时,则在节点中配置多个即可,但要保证默认环境中匹配其中一个环境的id值。注意:每个sqlSessionFactory实例只能选择一种环境。

    环境配置(environments)代码示例:
      
          
    
              
              
    
              
              
    
                  
                  
                  
                  
                  
              
    
          
      
    
    • 映射器(mappers)

    主要作用:通过映射器,我们可以自定义SQL语句,灵活的操作数据库。

    ​ sql映射器:sql映射文件+sql映射接口 一张数据库内的表对应一个映射器,与表名相同。

    映射器(mappers)代码示例:
      
      
    
          
          
          
      
    
  • MyBatis XML 映射器

    1.常用节点作用总结

    • select :映射sql查询语句
    • update:映射sql修改语句
    • delete:映射sql删除语句
    • insert:映射sql插入语句

    2.常用属性作用总结

    • id 属性:sql语句的唯一标识符,通过id引用sql语句
    • resultType 属性:sql语句的返回值类型
    • parameterType 属:sql语句的参数类型
    • useGeneratedKeys属性:开启主键回填
    • keyProperty属性:设置用于保存回填主键值的属性名称,即对应实体类的属性名称

    3.常见SQL映射示例

    示例1:普通增加
    
        
            insert into answer_record(respondent,question,right_answer,submit_answer,submit_datetime)
             values(#{respondent},#{question},#{rightAnswer},#{submitAnswer},#{submitDatetime})
            
            
            /**
             * 添加新答题记录
             * @param answerRecord 答题记录对象
             * @return 影响行数
             * ps.测试时需要输出新答题记录的编号
             */
            int insertAnswerRecord(AnswerRecord answerRecord);
    
    
示例2:批量增加



    insert into answer_record(respondent,question,right_answer,submit_answer,submit_datetime)
    values
    
        (
            #{record.respondent},
            #{record.question},
            #{record.rightAnswer},
            #{record.submitAnswer},
            now()
        )
    

    /**
     * 批量添加新答题记录
     * @param answerRecordList 添加数据集合
     * @return 影响行数
     */
    int insertAnswerRecordBatch(List answerRecordList);
示例3:删除记录


    delete from answer_record
    where record_id = #{recordId}   

/**
 * 删除答题记录
 * @param recordId 答题记录编号
 * @return 影响行数
 */
int deleteAnswerRecord(int recordId);

示例4:批量删除
    
    
        delete from answer_record
        where record_id in
        
            #{rid}
        
    



    /**
     * 批量删除答题记录
     * @param recordIdList
     * @return
     */
    int deleteAnswerRecordBatch(List recordIdList);

示例5:动态修改

    
    
    
    
        update answer_record 
        
             respondent = #{respondent},
            question = #{question},
            right_answer = #{rightAnswer},
            submit_answer = #{submitAnswer},
            submit_datetime = now()
        
        where record_id = #{recordId}   
    


    /**
     * 动态修改答题记录
     * @param answerRecord 答题记录对象(包含答题记录编号)
     * @return 影响行数
     */
    int updateAnswerRecord(AnswerRecord answerRecord);

示例6:动态查询

    
    
    


    /**
     * 按照条件对象中的多条件值,动态查询
    * @param condition 条件对象
     * @return 答题记录集合
     */
    List listAnswerRecordByCondition(AnswerRecord condition);

示例7:查询结果封装为Map

    
    


    /**
     * 按照答题者姓名,统计该答题者的总答题数目、正确题目数目、错误题目数目
     * @param respondent
     * @return
     */
    Map countAnswerRecordDataByRespondent(String respondent);

你可能感兴趣的:(MyBatis技术总结)