MyBatis技术总结

2020-08-29  本文已影响0人  头发旺盛的程序猿
```java
//1.InputStream in = Resources.getResourceAsStream("xxx.xml");
  SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
  SqlSessionFactory sqlSessionFactory = sfb.build(in);
  ```

SqlSession:使用Mybatis的主要java接口就是SqlSession。可以通过这个接口来执行命令,获取映射器和管理事务,从而实现增删改查,每个线程都应该有它自己的 SqlSession 实例,SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。

SqlSession创建代码示例:
```java
//1.SqlSession sqlSession = sqlSessionFactory.openSession();
```
示例1:普通增加
SQL映射配置
   <insert id="insertAnswerRecord"
           parameterType="AnswerRecord"
           useGeneratedKeys="true"
           keyProperty="recordId">
       insert into answer_record(respondent,question,right_answer,submit_answer,submit_datetime)
       values(#{respondent},#{question},#{rightAnswer},#{submitAnswer},now())
   </insert>
接口方法定义
int insertAnswerRecord(AnswerRecord answerRecord);
>示例2:批量增加

> SQL映射配置
    <insert id="insertAnswerRecordBatch"
            parameterType="list"
            useGeneratedKeys="true" keyProperty="recordId">
        INSERT INTO
        answer_record(respondent,question,right_answer,submit_answer,submit_datetime)
        VALUES
        <foreach collection="list" item="record" separator=",">
            (
                #{record.respondent},
                #{record.question},
                #{record.rightAnswer},
                #{record.submitAnswer},
                now()
            )
        </foreach>
    </insert>
接口方法定义
int insertAnswerRecordBatch(List<AnswerRecord> answerRecordList);
>示例3:普通删除

> SQL映射配置
    <delete id="deleteAnswerRecord">
        delete from answer_record
        where record_id = #{recordId}
    </delete>
    
>> 接口方法定义
int deleteAnswerRecord(int recordId);

>示例4:批量删除
>
>​  > SQL映射配置
>
>   <delete id="deleteAnswerRecordBatch" parameterType="list">
>       DELETE FROM answer_record
>       WHERE record_id IN
>       <foreach collection="list" item="rid" separator="," open="(" close=")">
>           #{rid}
>       </foreach>
>   </delete>
>   >>```java
>   >>  >> 接口方法定义
>   >>  int deleteAnswerRecordBatch(List<Integer> recordIdList);
>   >>```

>示例5:动态修改
>
>​  > SQL映射配置
>
>   <update id="updateAnswerRecord" parameterType="AnswerRecord">
>       update answer_record 
>       <set>
>           <if test="respondent!=null">respondent = #{respondent},</if>
>           <if test="question!=null">question = #{question},</if>
>           <if test="rightAnswer!=null">right_answer = #{rightAnswer},</if>
>           <if test="submitAnswer!=null">submit_answer = #{submitAnswer},</if>
>           submit_datetime = now()
>       </set>
>       where record_id = #{recordId}
>   </update>```
>   >> 接口方法定义
>int updateAnswerRecord(AnswerRecord answerRecord);

>示例6:动态查询
>
>​  > SQL映射配置
>
>   <select id="listAnswerRecordByCondition" resultType="AnswerRecord" parameterType="AnswerRecord">
>       
>       SELECT record_id AS recordId,
>              respondent,
>              question,
>              right_answer AS rightAnswer,
>              submit_answer AS submitAnswer,
>              submit_datetime AS submitDatetime
>       FROM answer_record
>       
>       <where>
>           <if test="respondent != null">
>               AND respondent = #{respondent}
>           </if>
>           
>           <if test="question != null">
>               AND question = #{question}
>           </if>
>           
>           <if test="rightAnswer != null">
>               AND right_answer = #{rightAnswer}
>           </if>
>           
>           <if test="submitAnswer != null">
>               AND submit_answer = #{submitAnswer}
>           </if>
>       </where>
>   </select>```
>   >> 接口方法定义
>List<AnswerRecord> listAnswerRecordByCondition(AnswerRecord condition);

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

​ > SQL映射配置```

    <select id="countAnswerRecordDataByRespondent" resultType="Map">
        select count(record_id) as total_question,
               (select count(record_id) from answer_record where respondent = #{respondent} and right_answer = submit_answer) as right_question,
               (select count(record_id) from answer_record where respondent = #{respondent} and right_answer != submit_answer) as wrong_question 
               from answer_record 
        where respondent = #{respondent}
    </select>```
    >> 接口方法定义
    Map<String,Integer> countAnswerRecordDataByRespondent(String respondent);
上一篇 下一篇

猜你喜欢

热点阅读