Mybatis 框架 5 - 动态sql返回map或pojo合集

2022-06-29 11:35:26

1.动态sql

——Mybatis框架可以对sql语句进行灵活操作,通过表达式进行判断,
对sql进行灵活拼接、组装。

实现动态的主要元素

MyBatis中用于实现动态SQL的元素主要有:

if
choose(when,otherwise)
trim
where
set
foreach

2.一个动态查询语句

UserDao.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="myBatisTest.dao.UserDao"><!--resultType可以为包加类的model对象 如果返回多条数据,他会返回一个list<UserInfo>的集合--><!--可以使用java.util.Map 但不能直接指定为java.util.List 因为返回的是一个泛型集合list<UserInfo>--><!--resultType的返回类型为POJO类型(list<UserInfo>类型)所以UserDao接口需要保持一致--><selectid="getUser"parameterType="UserInfo"resultType="UserInfo">
        select * from userinfo<!--where 加入where语句 也可以在上面语句用 where 1=1之类的 --><where><!--为true则加入下面语句  test内的id是从对象UserInfo中获取的属性值--><iftest="id!=0"><!--加入了where标签如果是第一个条件,组合语句会自动去掉and-->
                and id=#{id}</if><!--语句可以用and(&&)或者or(||)连接--><iftest="userName!=null and userName!=''"><!--在双引号内 需要把#改为$  ${userName}用于与%%拼接字符串 否则会出现%?%的占位符而出错-->
                and username like '%${userName}%'</if></where></select></mapper>

test.java

package myBatisTest.dao;

import ....publicclass test {publicstaticvoidmain(String[] args) throws IOException, SQLException {// TODO Auto-generated method stub
        InputStreamis = Resources.getResourceAsStream("myBatisTest/dao/SqlMapConfig.xml");
        SqlSessionFactory sf =new SqlSessionFactoryBuilder().build(is);

        SqlSession sqlSession = sf.openSession();
        UserDao ud= sqlSession.getMapper(UserDao.class);//获取代理对象

        List<UserInfo> ulist=ud.getUser(new UserInfo(0,"张","","",""));for (int i =0; i < ulist.size(); i++) {
            System.out.println(ulist.get(i));
        }
    }
}

concole

UserInfo [id=51, userName=张九, password=123456, sex=男, email=23123@qq.com]
UserInfo [id=52, userName=张九, password=123456, sex=男, email=null]
UserInfo [id=53, userName=张九, password=123456, sex=男, email=null]
UserInfo [id=59, userName=张九, password=123456, sex=男, email=null]

如果设定resultType=”java.util.Map”
在接口该方法需要设定返回值为list

List<Map<String,Object>>  getUserMapList(UserInfo user)  throws SQLException;

输出语句

List<Map<String,Object>> ulist=ud.getUserMapList(new UserInfo(0,"张","","",""));for(Map<String,Object> user : ulist){
    System.out.println(user);
}

取出的都是键值对 而且键是从数据库取的
concole

{ID=51, USERNAME=张九, PASSWORD=123456, SEX=男, EMAIL=23123@qq.com}
{ID=52, USERNAME=张九, PASSWORD=123456, SEX=男, EMAIL=null}
{ID=53, USERNAME=张九, PASSWORD=123456, SEX=男, EMAIL=null}
{ID=59, USERNAME=张九, PASSWORD=123456, SEX=男, EMAIL=null}

  • 作者:冒泡虾
  • 原文链接:https://blog.csdn.net/qq_21693547/article/details/78376653
    更新时间:2022-06-29 11:35:26