Mybatis 框架 5

来源:互联网 发布:农村精神病 知乎 编辑:程序博客网 时间:2024/05/22 00:34

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

test.java

package myBatisTest.dao;import ....public class test {    public static void main(String[] args) throws IOException, SQLException {        // TODO Auto-generated method stub        InputStream is = 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}