mybatis mysql if_mybatis动态SQL--if--choose

学习动态SQL

b584b610dfe5f9b22afcba1161f2f17f.png

先学习动态SQL中的if

开始干活,先在接口里面写一个方法

/Mybatis02/src/com/chen/dao/GoodsDao2.java

//动态SQL 。。。 if..

public List queryByIf(GoodsInfo a);

/Mybatis02/config/mappers/GoodsInfoMapper.xml

select * from goods where

name like '${name}%'

上面这个if标签的意思是,如果你传递过来的name不为空,那么就把下面 name like '${name}%' 拼接到 where的后面去。即变成,select * from goods where name like '${name}%'

在主入口类 设置好对象的属性,以传值进去

/Mybatis02/src/test/Start2.java

package test;

import java.io.IOException;

import java.io.InputStream;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

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 com.chen.GoodsInfo;

import com.chen.dao.GoodsDao;

import com.chen.dao.GoodsDao2;

public class Start2 {

public static void main(String[] args) throws IOException {

String resource = "mybatis-conf.xml";

InputStream inputStream = Resources.getResourceAsStream(resource);

//创建SqlSessionFactory

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//true表示自动提交。否则需要使用commit方法才会提交。默认是false

SqlSession session = sqlSessionFactory.openSession();

//拿到接口的代理对象

GoodsDao2 dao=session.getMapper(GoodsDao2.class);

//拿到了dao这个对象接下来就可以创建sql语句了;(直接调用接口方法)

//因为接口方法里需要传入一个对象,所以

GoodsInfo goods =new GoodsInfo();

//然后给对象插属性

goods.setId(123);

goods.setName("牛");

List list =dao.queryByIf(goods);

System.out.println(list.size());

//如果上面不设置自动提交表单,那么就需要commit方法

session.commit();

}

}

三个地方连起来就是表达了 select * from goods where name like '牛'% 这句话

点击运行,查询到结果

ec93a2531dd304911e0f81e02b7325ee.png

**因为name以牛开头的 ,数据库表里有三条,即有三个对象

现在学习动态SQL的---Choose

/Mybatis02/config/mappers/GoodsInfoMapper.xml

select * from goods where

name like '${name}%'

id =${id}

order by name

在接口中添加一个新方法

/Mybatis02/src/com/chen/dao/GoodsDao2.java

//动态SQL 。。Choose

public List queryByChoose(GoodsInfo a);

在主入口类 设置好对象的属性,以传值进去

/Mybatis02/src/test/Start2.java

public class Start2 {

public static void main(String[] args) throws IOException {

String resource = "mybatis-conf.xml";

InputStream inputStream = Resources.getResourceAsStream(resource);

//创建SqlSessionFactory

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//true表示自动提交。否则需要使用commit方法才会提交。默认是false

SqlSession session = sqlSessionFactory.openSession();

//拿到接口的代理对象

GoodsDao2 dao=session.getMapper(GoodsDao2.class);

//拿到了dao这个对象接下来就可以创建sql语句了;(直接调用接口方法)

//因为接口方法里需要传入一个对象,所以

GoodsInfo goods =new GoodsInfo();

//然后给对象插属性

goods.setId(10);

goods.setName("牛");

List list =dao.queryByChoose(goods);

System.out.println(list.size());

//如果上面不设置自动提交表单,那么就需要commit方法

session.commit();

}

}

点击运行

b4049ebe14a87c3b17f322e37f0ca45e.png

这表示List 里面 存放着 3个对象 , 就意味这 ,查询到了 三条数据。不信,我去mysql客户端 查下

9d57057a43793897ed1c74af06ca9a41.png

因为现在我们用的是choose标签 ,那么when 标签里写着

id =${id}

假如我们只设置:goods.setId(10);,而把goods.setName("牛");注释掉,那么就只传入了id这个参数。然后即是相当于执行了

select * from goods where id =${id}这条语句

23ae5cc92fd9a716c9a42364cdd553b5.png

结果显示 只得到了一个对象,就意味着数据库查到的只有一条数据

那么现在将这条语句放mysql客户端查一下 并验证

2b09da39b1ac7b503b484bbc31a3925b.png

验证成功,也是数据库查到的只有一条数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值