MyBatis 动态SQL

MyBatis 动态SQL

我们在前面的基础上继续学习动态SQL。
样例:
在项目上面新建dbsql层,并新建类
然后如下代码

public class FatherSQL {
    public String queryFather(Map<String,String> params){
        return new SQL(){
            {

            }
        }.toString();
    }
}

String后面的queryFather是自己起的方法名,与后面在调用时相关联

参数选择的是Map<类型,类型>集合

return new SQL(){

}

在其中内部进行java语言的sql语句书写

dbsql层下类的完整代码:


public class FatherSQL {
    public String queryFathers(Map<String,String> map){
        return new SQL(){
            {
                SELECT("*");
                FROM("Father");
                if(map.get("fid")!=null){
                    WHERE("fid=#{fid}");
                }

            }
        }.toString();

    }
}

然后在Mapper层的FatherMapper新增@SelectProvider


    @SelectProvider(type= FatherSQL.class, method="queryFathers")
    @Results({
            @Result(column="fid", property="fid", jdbcType=JdbcType.INTEGER, id=true),
            @Result(column="fname", property="fname", jdbcType=JdbcType.VARCHAR),
            @Result(property = "sons",javaType= List.class,column = "fid",
                    many =@Many(select="com.ryh.mapper.SonMapper.selectSonsByFid"))
    })
    Father queryFathers(Map<String,String> map);


其中type后面是你写的运行时类的名字,method是你的方法名

下面是你表中字段的映射

select后面的内容是你在Mapper上使用方法的所在位置

将名称改为之前的方法名

然后在FatherService上写查询语句

 @Test
    public void queryFathers(){
        SqlSession session=ssf.openSession();
        Map<String,String> map=new HashMap();
        map.put("fid","3");
        Father f=session.selectOne("com.ryh.mapper.FatherMapper.queryFathers",map);
        System.out.println(f.getFname());
        f.getSons().forEach(c-> System.out.println(c.getSname()));
        session.close();

    }

就完成了动态sql的查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值