MyBatis(二)动态sql

1.使用mavne管理项目

pom文件如下

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>LATEST</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.20</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>2.0.0-alpha1</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>2.0.0-alpha1</version>
    </dependency>
</dependencies>

<!--使用插件,让项目使用jdk1.8编译-->
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>1.8</encoding>
            </configuration>
        </plugin>
    </plugins>
    <resources>
        <resource>  <!--为了保证包目录下的配置文件在编译后能够发布到执行目录,需要指定编译后生成的文件内容 -->
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
</build>

2.用户表

简简单单一张表,所有操作都围绕着此表进行,其中userTime是datetime类型
MyBatis(二)动态sql

3.需要的配置文件以及dao层接口以及dao接口

mapper映射文件和接口放在同一个包下,
MyBatis(二)动态sql

log4j.properties 帮助我们打印日志信息,还能看到语句执行过程
MyBatis(二)动态sql

接口方法

List<User> selectUserById(User user);

List<User> selectUserByName(String name1,String name2);

List<User> testDaoSelectUserChoose(User user);

List<User> selectUserIn(List<Integer> list);

List<User> selectUserByMapOrArray(Map<String,Integer> mmp);

void updateUser(User user);

4.动态sql之where节点

语句里的where标签的内容如果有效会自动给sql语句加上where关键字,通常和if标签来一起使用
where内的include标签引用了外部sql的if标签,写在外面,那么所有的语句都能利用include节点来使用这个sql。
MyBatis(二)动态sql
如果传入的user对象中未给id赋值或者赋为空,那么就查询所有,如果不为空且不为0,就查询对应id的user信息
MyBatis(二)动态sql
MyBatis(二)动态sql
赋为1,只会查询出一条信息
MyBatis(二)动态sql

5.动态sql之多个参数

对于多个参数如何使用
如果使用之前的写法,确实可以执行,但是一旦其中一个参数为空,就会出现不同的情况(与预期相违背),我们来使用动态sql优化
MyBatis(二)动态sql

测试,第一个参数传空字符串,第二个传值,会发现查询出来了,说明mybatis帮我们去掉了or关键字,还是非常方便
MyBatis(二)动态sql

如果第一个参数传值,第二个参数为空呢
MyBatis(二)动态sql

6.动态sql之choose、otherwise

choose和otherwise一般一起使用,也用作条件,类似于switch语句,传什么值,执行对应的行为
MyBatis(二)动态sql

MyBatis(二)动态sql

测试,date不为空,小于当前时间的都会查询
MyBatis(二)动态sql
id不为空,只根据对应的id值
MyBatis(二)动态sql
如果都为空,会执行otherwise里面的语句
MyBatis(二)动态sql
如果都不为空,会按照次序,也就是choose语句的顺序,所以会按照id来查询
MyBatis(二)动态sql

7.动态sql之foreach

主要和sql语句in关键字一起使用,用来生成in的数据
MyBatis(二)动态sql
属性:collection : 集合类型
open="(" 左括号开始
close=")" 右括号结束
separator="," 值与值之间以逗号分隔
item="item" 代表集合里的值
参数使用list集合,传值
MyBatis(二)动态sql

如果使用map集合作为参数呢,使用map集合,可以不用添加参数类型属性
foreach中的集合类型可以使用entrySet(键值对)集合。
_parameter是没有指定参数名时候的默认参数名,_parameter获取所有的entrySet(键值对的集合)
然后,就是foreach中的属性,此时index是键,item是value
然后 使用
${} #{} 都可将id取出

MyBatis(二)动态sql
测试,取index时,可以看到,所有的key都被取出来了,并且成功拼接
MyBatis(二)动态sql
取item,取出了所有的cvalue,并且成功拼接
MyBatis(二)动态sql

如果是数组呢,不需要参数类型,只需要将集合类型改为array即可,然后利用# $取值

MyBatis(二)动态sql

上一篇:sql server查询行数和加了order by的查询行数不同!!!


下一篇:windows 下 redis for php 配置