天天看點

mapper映射檔案中用到的标簽

mapper映射檔案中标簽的使用基本都出現在mapper映射檔案中和測試使用的時候,這裡先給大家展示标簽的總結,接着是兩個檔案的代碼

                幾個标簽的總結:

                             if:         <if test="條件">符合條件會做的事</if>

                             where:          <where><if test="條件">符合條件會做的事</if></where> 

                                                     where标簽會自動補充where并且自動去掉第一個and

                             trim:                <trim prefix="要改為的字首" prefixOverrides="要被改的字首" 

                                                     suffix="要改為的字尾" suffixOverrides="要被改的字尾"></trim>

                             set:                    <set><if test="條件">符合條件會做的事</if></set>

                                                     set标簽會自動添加set并且自動去掉最後一個逗号

                             choose:                        類似于if(){}if(){}else,else{}

                                                                <choose>

                                                                    <when test="條件">

                                                                        符合條件就會執行,然後就不會執行後面的了

                                                                    </when>

                                                                    <when test="">

                                                                    </when>

                                                                    <otherwise>

                                                                    </otherwise>

                                                                </choose>

                             foreach:        <foreach collection="" item="" open="" separator=""></foreach>

                                                    collection中的内容根據參數不同來寫,數組用array,集合用list,别名的話就用别名;item是臨時                                                     的對象變量

TeacherMapper.xml:

---------------------------------------代碼開始---------------------------------------

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.dao.TeacherDAO">

        <select id="getTeaArray" resultType="teacher">

            select * from teacher 

            <!-- collection中的内容根據參數不同來寫,數組用array,集合用list,别名的話就用别名;item是臨時的對象變量 -->

            <foreach collection="array" item="elm" open="where" separator="or">

                    teaName=#{elm.teaName}

            </foreach>

        </select>

        <select id="getTeaById" resultType="teacher">

            select * from teacher

            <!-- choose中的when,otherwise相當于if ... else和else -->

            <choose>

                <when test="teaId!=0">

                    where teaId=#{teaId}

                </when>

                <when test="teaName!=null">

                    where teaName=#{teaName}

                </when>

                <otherwise>

                </otherwise>

            </choose>

        </select>

        <update id="update">

        <!-- 不要重複了set -->

                update teacher

                <!-- set标簽會自動添加set并且自動去掉最後一個, -->

                <set>

                    <if test="teaName!=null">

                            teaName=#{teaName},

                        </if>

                        <if test="teaAge!=0">

                            teaAge=#{teaAge},

                        </if>

                </set>

                where teaId=#{teaId}

                <!-- 把第一個字尾,覆寫成為空,因為沒有說明suffix的值,是以預設是空字元覆寫 -->

                <!-- 

                    <trim suffixOverrides=",">

                        <if test="teaName!=null">

                            teaName=#{teaName},

                        </if>

                        <if test="teaAge!=0">

                            teaAge=#{teaAge},

                        </if>

                </trim>

                where teaId=#{teaId}

                 -->

                <choose>

                    <when test="">

                    </when>

                </choose>

        </update>

        <select id="getTeaByMore"  resultType="teacher">

                <!-- 沒使用where标簽的時候可以使用 where 1=1 -->

                <!-- 不要重複了where -->

                select * from teacher 

                <!-- 

                prefix是字首的意思, prefixOverrides是字首覆寫的意思,

                意思是把整個trim标簽中第一個prefixOverrides裡的值換成prefix裡的值

                -->

                <trim prefix="where" prefixOverrides="and">

                        <if test="teaId!=0">

                            and teaId=#{teaId}

                        </if>

                        <if test="teaName!=null">

                            and  teaName=#{teaName}

                        </if>

                        <if test="teaAge!=0">

                            and teaAge=#{teaAge}

                        </if>

                </trim>

                <!-- 因為變量teaId是integer類型的是以這裡是不等于0 -->

                <!-- where标簽會自動補充where并且自動去掉第一個and -->

                <!--     

            <where>

                        <if test="teaId!=0">

                            and teaId=#{teaId}

                        </if>

                        <if test="teaName!=null">

                            and  teaName=#{teaName}

                        </if>

                        <if test="teaAge!=0">

                            and teaAge=#{teaAge}

                        </if>

            </where>

                 -->

                 <!-- 

                         标簽:

                             if:         <if test="條件">符合條件會做的事</if>

                             where:          <where><if test="條件">符合條件會做的事</if></where> 

                                                     where标簽會自動補充where并且自動去掉第一個and

                             trim:                <trim prefix="要改為的字首" prefixOverrides="要被改的字首" 

                                                     suffix="要改為的字尾" suffixOverrides="要被改的字尾"></trim>

                             set:                    <set><if test="條件">符合條件會做的事</if></set>

                                                     set标簽會自動添加set并且自動去掉最後一個逗号

                             choose:                        類似于if(){}if(){}else,else{}

                                                                <choose>

                                                                    <when test="條件">

                                                                        符合條件就會執行,然後就不會執行後面的了

                                                                    </when>

                                                                    <when test="">

                                                                    </when>

                                                                    <otherwise>

                                                                    </otherwise>

                                                                </choose>

                             foreach:        <foreach collection="" item="" open="" separator=""></foreach>

                                                    collection中的内容根據參數不同來寫,數組用array,集合用list,别名的話就用别名;item是臨時的對象變量

                  -->

</select>

</mapper>

---------------------------------------代碼結束---------------------------------------

test.java

---------------------------------------代碼開始---------------------------------------

package com.test;

import java.util.List;

import org.junit.Test;

import com.dao.TeacherDAO;

import com.dao.impl.TeacherDAOImpl;

import com.entity.Teacher;

public class TeacherDAOTest {

            @Test

            public void getTeaByMoreTest(){

                TeacherDAO dao=new TeacherDAOImpl();

                //對象tea一定要實作,否則不能使用

                Teacher tea=new Teacher();

                //字元串就是字元串,不能寫成單引号字元

                tea.setTeaName("張四");

                List<Teacher> teaList=dao.getTeaByMore(tea);

                for(Teacher t:teaList){

                    System.out.println(t);

                }

            }

            //測試方法不要有傳回值,否則報錯,而又沒有錯誤資訊

            @Test

            public void updateTest(){

                TeacherDAO dao=new TeacherDAOImpl();

                Teacher tea=new Teacher();

                //别忘了選擇學号

                tea.setTeaId(1);

                tea.setTeaAge(100);

                int count=dao.update(tea);

                System.out.println(count);

            }

            @Test

            public void getTeaByIdTest(){

                TeacherDAO dao=new TeacherDAOImpl();

                Teacher tea=new Teacher();

                tea.setTeaName("李四");

                //别忘了選擇學号

                List<Teacher> teaList=dao.getTeaById(tea);

                for(Teacher t:teaList){

                    System.out.println(t);

                }

            }

            @Test

            public void getTeaArrayTest(){

                TeacherDAO dao=new TeacherDAOImpl();

                Teacher[] tea=new Teacher[2];

                //對象數組要對每一個數組元素進行再次初始化,否則會空指針錯誤

                tea[0]=new Teacher();

                tea[1]=new Teacher();

                tea[0].setTeaName("張四");

                tea[1].setTeaName("李四");

                List<Teacher> teaList=dao.getTeaArray(tea);

                for(Teacher t:teaList){

                    System.out.println(t);

                }

            }

}

---------------------------------------代碼結束---------------------------------------

繼續閱讀