Mybatis入门之动态sql

Mybatis入门之动态sql

    通过mybatis提供的各种标签方法实现动态拼接sql。

  1、if、where、sql、include标签(条件、sql片段)

复制代码
<sql id="selector">
        select * from account
</sql>

<!--根据性别和名称查询用户 where标签可以去掉第一个前and -->
    <select id="selectUserBySexAndUsername" parameterType="deep.pojo.Account"
        resultType="deep.pojo.Account">
        <include refid="selector"/>
        <where>
            <if test="sex != null and sex != '' ">
                sex = #{sex}
            </if>
<if test="username != null and username !=''"> and username = #{username} </if> </where> </select>
复制代码

 

2、foreach

生成的sql语句是:    select * from acccount where id in (1,2,3,27);

复制代码
<!-- 多个ID -->
    <select id="selectUserByIds" parameterType="deep.pojo.QueryVo" resultType="deep.pojo.Account">
        <include refid="selector"/>
        <where>
            id in 
            <foreach collection="idsList" item="id" separator="," open="(" close=")">
                #{id}
            </foreach>    
        </where>
    </select>
复制代码

 

复制代码
package deep.pojo;

import java.io.Serializable;
import java.util.List;

public class QueryVo implements Serializable{

    private static final long serialVersionUID = 1L;
    
    private Account account;
    
    
    public List<Integer> getIdsList() {
        return idsList;
    }

    public void setIdsList(List<Integer> idsList) {
        this.idsList = idsList;
    }

    public Integer[] getIds() {
        return ids;
    }

    public void setIds(Integer[] ids) {
        this.ids = ids;
    }

    List<Integer> idsList;
    
    Integer[] ids;
    
    
    

    public Account getAccount() {
        return account;
    }

    public void setAccount(Account account) {
        this.account = account;
    }

}
复制代码
复制代码
@Test
    public void testFindUserIDs() throws Exception {
        //加载核心配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        
        
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        
        List<Integer> ids = new ArrayList<Integer>();
        ids.add(1);
        ids.add(2);
        ids.add(3);
        ids.add(27);
        QueryVo vo = new QueryVo();
        vo.setIdsList(ids);
        
        
        List<Account> accountList = userMapper.selectUserByIds(vo);
        
        for (Account a : accountList) {
            System.out.println(a);
        }
    }
复制代码

 

posted @   瓶子coder  阅读(251)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示