xml里mysql数据库的if else标签

本文介绍了如何在MyBatis中使用choose标签进行条件选择查询,通过一个UserService接口及其实现类展示了根据userId和userName查询User的方法。测试案例涵盖了不同参数组合的情况,强调了otherwise在确保SQL逻辑正确性上的作用,防止查询结果出错。
摘要由CSDN通过智能技术生成

一 创建一个Service

public interface userService extends IService<User>{
	User selectUserByIdOrByUsername(User user);
}

二 创建实现类

@Slf4j
@Service
public class userServiceImpl extends ServiceImpl<userMapper, User> implements userService {
	@Override
    public User selectSysUserByIdOrByUserName(User user) {
        return userMapper.selectSysUserByIdOrByUserName(user);
    }
}

三 添加xml

 <select id="selectSysUserByIdOrByUserName" resultType="com.central.user.model.user">
        SELECT *
        FROM user u
        WHERE
        1=1
        <choose>
            <when test="userId != null">
                and user_id = #{userId}
            </when>
            <when test="userName != null">
                and user_name = #{userName}
            </when>
            <otherwise>
                and 1=2
            </otherwise>
        </choose>
    </select>

四 测试类

@Test
    public void selectSysUserByIdOrByUserNameTest() {
        log.info("selectSysUserByIdOrByUserNameTest");
        // 获取SqlSession
        //SqlSession sqlSession = getSqlSession();
        try {
            log.info("======. 模拟传入了正确的id 没有传username或者传入了错误的userName======");
            // 1. 模拟传入了正确的id 没有传username或者传入了错误的userName
            Tengyu_user tengyuUser = new Tengyu_user();
            tengyuUser.setUserId(1);
            tengyuUser.setUserName("admin");
            // 调用selectSysUserByIdOrByUserName,查询单个用户

            Tengyu_user user = tengyu_userService.selectSysUserByIdOrByUserName(tengyuUser);
            // 期望不为空
            Assert.assertNotNull(user);
            // userName 期望值为artisan
            Assert.assertEquals("admin", user.getUserName());
            log.info("user", user);

            log.info("======2. 模拟不传id,但是传入了正确的 userName======");
            // 2. 模拟不传id,但是传入了正确的 userName
            tengyuUser = new Tengyu_user();
            tengyuUser.setUserId(null);
            tengyuUser.setUserName("admin");
            user = tengyu_userService.selectSysUserByIdOrByUserName(tengyuUser);
            // 期望不为空
            Assert.assertNotNull(user);
            // 根据id查询 sysuser,然后获取userName 期望值为artisan
            Assert.assertEquals("admin", user.getUserName());
            log.info("user", user);

            log.info("======3.什么都不传======");
            // 2. 模拟不传id,但是传入了正确的 userName
            tengyuUser = new Tengyu_user();
            tengyuUser.setUserId(null);
            tengyuUser.setUserName(null);
            user = tengyu_userService.selectSysUserByIdOrByUserName(tengyuUser);
            // 期望为空
            Assert.assertNull(user);
            log.info("user", user);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //sqlSession.close();
            log.info("sqlSession close successfully ");
        }

    }


五 查看结果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

六 总结

使用choose when otherwise的时候逻辑要严密,避免由于某些值出现问题导致SQL出错。

在上述查询中,如果没有otherwise这个条件限制,当userId和userName都为空时,所有的用户都会被查询出来,添加otherwise后,由于where 后的条件不满足,因此这种这种情况下查不到结果。

以下是使用Qt中的QXmlStreamReader和QSqlDatabase连接MySQLXML文件的示例代码: ```cpp #include <QCoreApplication> #include <QXmlStreamReader> #include <QSqlDatabase> #include <QSqlError> #include <QSqlQuery> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 读取XML文件 QFile file("../plane/MysqlXml.xml"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "Failed to open file."; return -1; } QXmlStreamReader xmlReader(&file); // 解析XML文件 QString hostName, databaseName, userName, password; int port = 0; while (!xmlReader.atEnd()) { if (xmlReader.isStartElement()) { if (xmlReader.name() == "hostName") { hostName = xmlReader.readElementText(); } else if (xmlReader.name() == "port") { port = xmlReader.readElementText().toInt(); } else if (xmlReader.name() == "datebase") { databaseName = xmlReader.readElementText(); } else if (xmlReader.name() == "username") { userName = xmlReader.readElementText(); } else if (xmlReader.name() == "passWord") { password = xmlReader.readElementText(); } } xmlReader.readNext(); } // 连接MySQL数据库 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName(hostName); db.setPort(port); db.setDatabaseName(databaseName); db.setUserName(userName); db.setPassword(password); if (!db.open()) { qDebug() << "Failed to connect to database:" << db.lastError().text(); return -1; } // 执行SQL语句 QSqlQuery query; if (!query.exec("SELECT * FROM table_name")) { qDebug() << "Failed to execute SQL query:" << query.lastError().text(); return -1; } while (query.next()) { // 处理查询结果 } return a.exec(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值