Mybatis學習筆記之---動態sql中標簽的使用


動態Sql語句中標簽的使用

(一)常用標簽

1.<if>

       if標簽通常用於WHERE語句中,通過判斷參數值來決定是否使用某個查詢條件, 他也經常用於UPDATE語句中判斷是否更新某一個字段,還可以在INSERT語句中用來判斷是否插入某個字段的值

2.<where>

        where元素的作用是給SQL語句添加一個條件判斷. 如果輸出后是and 開頭的,MyBatis會把第一個and忽略,當然如果是or開頭的,MyBatis也會把它忽略;此外,在where元素中你不需要考慮空格的問題,MyBatis會智能的幫你加上

3.<foreach>

        主要用在構建in條件中,它可以在SQL語句中進行迭代一個集合。

        foreach元素的屬性主要有item,index,collection,open,separator,close

        collection屬性的值有三個分別是list、array、map三種,分別對應的參數類型為:List、數組、map集合

    item : 表示在迭代過程中每一個元素的別名

    index :表示在迭代過程中每次迭代到的位置(下標)

    open :前綴

    close :后綴

    separator :分隔符,表示迭代時每個元素之間以什么分隔

(二)應用

1.pom.xml

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
  </dependency>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.41</version>
  </dependency>
  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.6</version>
  </dependency>
</dependencies>

 

2.SqlMapperConfig.xml

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

<!DOCTYPEconfiguration

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

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

<!--mybatis的主配置文件-->

<configuration>

    <!--配置環境-->

    <environments default="mysql">

        <!--配置mysql環境-->

        <environment id="mysql">

            <!--配置事務的類型-->

            <transactionManager type="JDBC"></transactionManager>

            <!--配置數據源(連接池)-->

            <dataSource type="POOLED">

                <!--配置連接數據庫的4個基本信息-->

                <property name="driver" value="com.mysql.jdbc.Driver"></property>

                <property name="url" value="jdbc:mysql://localhost:3306/zml?useUnicode=true&amp;characterEncoding=utf-8"></property>

                <property name="username" value="root"></property>

                <property name="password" value="root"></property>

            </dataSource>

            

        </environment>

    </environments>

    <!--指定映射配置文件的位置,映射配置文件指的是每個dao獨立的配置文件-->

<mappers>

    <mapper resource="dao/UserDao.xml"></mapper>

</mappers>

</configuration>

 

3.Users.java

package entity;



public class Users {

    private int id;

    private String username;

    private String password;



    public int getId() {

        return id;

    }



    public void setId(int id) {

        this.id = id;

    }



    public String getUsername() {

        return username;

    }



    public void setUsername(String username) {

        this.username = username;

    }



    public String getPassword() {

        return password;

    }



    public void setPassword(String password) {

        this.password = password;

    }



    @Override

    public String toString() {

        return "Users{" +

                "id=" + id +

                ", username='" + username + '\'' +

                ", password='" + password + '\'' +

                '}';

    }

}

 

4.UserVo.java

package entity;



import java.util.List;



public class UserVo {

    private Users users;

    private List<Integer> ids;



    public Users getUsers() {

        return users;

    }



    public void setUsers(Users users) {

        this.users = users;

    }



    public List<Integer> getIds() {

        return ids;

    }



    public void setIds(List<Integer> ids) {

        this.ids = ids;

    }

}

 

5.UserDao.java

package dao;



        import entity.UserVo;

        import entity.Users;

        import org.apache.ibatis.annotations.Param;



        import java.util.List;



public interface UserDao {

     //查詢所有用戶信息

     List<Users> findAll();

     //根據ID進行查詢

     Users find(int id);

     //模糊查詢

     List<Users> findVague(String name);

     //查詢用戶總數

     int count();

     //將實體類封裝到另一個實體類中的模糊查詢

     List<Users> findVo(UserVo vo);

     //根據傳入參數進行查詢

     Users findby(Users users);

     //根據UserVo中的ids集合查詢用戶信息

     List<Users> findids(UserVo vo);

}

 

6.UserDao.xml

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

<!DOCTYPEmapper

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

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

<mapper namespace="dao.UserDao">

    <!--查詢所有-->

    <select id="findAll" resultType="entity.Users">

        select * from users

    </select>

    <!--根據ID查詢-->

    <select id="find" resultType="entity.Users">

        select * from users where id=#{id}

    </select>

    <!--模糊查詢-->

    <select id="findVague" resultType="entity.Users">

--         select * from users where username like '%${value}%'

        select * from users where username like #{name}

    </select>

    <!--查詢用戶總數-->

    <select id="count" resultType="int">

        select count(id) from users

    </select>

    <!--將實體類封裝到另一個實體類中的模糊查詢-->

    <select id="findVo" resultType="entity.Users">

        select * from users where username like #{users.username}

    </select>
<!--根據傳入參數進行查詢-->

    <select id="findby" resultType="entity.Users" >

        select * from users

        <where>

        <if test="id != null">

        and id=#{id}

        </if>

        <if test="username != null">

            and username=#{username}

        </if>

        </where>

    </select>

    <!--根據UserVo中的ids集合實現查詢用戶列表-->

    <select id="findids" resultType="entity.Users" parameterType="entity.UserVo">

        select * from users

        <where>

            <if test="ids != null and ids.size()>0">

                <foreach collection="ids" open="and id in (" close=")" item="id" separator=",">

                    #{id}

                </foreach>

            </if>

        </where>

    </select>

</mapper>

 

7.UserTest.java

package test;



import dao.UserDao;

import entity.UserVo;

import entity.Users;

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;



import java.io.IOException;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.List;



public class UserTest {

    private InputStream in;

    private SqlSession sqlSession;

    private UserDao UserDaoImpl;

    @Before

    public void init() throws IOException {

        //1.讀取配置文件

        in= Resources.getResourceAsStream("SqlMapperConfig.xml");

        //2.創建SqlSessionFactory工廠

        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();

        SqlSessionFactory factory=builder.build(in);

        //3.使用工廠生產SqlSession對象

        sqlSession=factory.openSession();

        //4.使用SqlSession創建dao接口的代理對象

        UserDaoImpl=sqlSession.getMapper(UserDao.class);

    }

    @After

    public void destroy() throws IOException {

        //提交事務

        sqlSession.commit();

        //6.釋放資源

        sqlSession.close();

        in.close();

    }



    /**

     * 查詢所有

     * @throws IOException

     */

    @Test

    public void findall() throws IOException {



        //5.使用代理對象執行方法

        List<Users> users=UserDaoImpl.findAll();

        for(Users u:users){

            System.out.println(u);

        }



    }



    /**

     * 根據ID進行查詢

     */

    @Test

    public void find(){

       Users u=UserDaoImpl.find(15);

        System.out.println(u);

    }

    /**

     * 模糊查詢,查詢所有名字中有小的用戶

     * @throws IOException

     */

    @Test

    public void findVague() throws IOException {



        //5.使用代理對象執行方法

        List<Users> users=UserDaoImpl.findVague("%小%");

        for(Users u:users){

            System.out.println(u);

        }



    }



    /**

     * 查詢用戶總數

     */

    @Test

    public void count(){

        int c=UserDaoImpl.count();

        System.out.println(c);

    }



    /**

     * 將實體類封裝到另一個實體類中的模糊查詢

     */

    @Test

    public void findVo(){

        UserVo vo=new UserVo();

        Users users=new Users();

        users.setUsername("%小%");

        vo.setUsers(users);

        List<Users> list=UserDaoImpl.findVo(vo);

        for(Users u:list){

            System.out.println(u);

        }

    }



    /**

     * if標簽查詢,查詢用戶名為小花,id為25的用戶信息

     */

    @Test

    public void findby(){

        Users users=new Users();

        users.setUsername("小花");

        users.setId(25);

        Users u=UserDaoImpl.findby(users);

        System.out.println(u);

    }



    /**

     * 根據UserVo中的ids集合查詢用戶信息

     */

    @Test

    public void findids(){

        UserVo vo=new UserVo();

        List<Integer> list=new ArrayList<Integer>();

        list.add(13);

        list.add(14);

        list.add(15);

        vo.setIds(list);

        List<Users> li=UserDaoImpl.findids(vo);

        for(Users u:li){

            System.out.println(u);

        }

    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM