zoukankan      html  css  js  c++  java
  • 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类型

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

    mapper映射文件和接口放在同一个包下,

    log4j.properties 帮助我们打印日志信息,还能看到语句执行过程

    接口方法

    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。

    如果传入的user对象中未给id赋值或者赋为空,那么就查询所有,如果不为空且不为0,就查询对应id的user信息


    赋为1,只会查询出一条信息

    5.动态sql之多个参数

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

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

    如果第一个参数传值,第二个参数为空呢

    6.动态sql之choose、otherwise

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

    测试,date不为空,小于当前时间的都会查询

    id不为空,只根据对应的id值

    如果都为空,会执行otherwise里面的语句

    如果都不为空,会按照次序,也就是choose语句的顺序,所以会按照id来查询

    7.动态sql之foreach

    主要和sql语句in关键字一起使用,用来生成in的数据

    属性:collection : 集合类型
    open="(" 左括号开始
    close=")" 右括号结束
    separator="," 值与值之间以逗号分隔
    item="item" 代表集合里的值
    参数使用list集合,传值

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


    测试,取index时,可以看到,所有的key都被取出来了,并且成功拼接

    取item,取出了所有的cvalue,并且成功拼接

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

  • 相关阅读:
    UINavigationController
    UIWebView
    控制器view的加载顺序initWithNibName >>> viewDidLoad >>> viewWillAppear >>> viewDidAppear
    UITableView
    JS调用OC方法
    【概念】winform的特点
    【概念】指针
    【c++】类的继承(三种继承方式)、基类和派生类、面向对象三要素
    【笔试】C++笔试题
    【c#】解决DataTable.Rows.Add(dr)语句执行速度慢的问题(GridControl)
  • 原文地址:https://www.cnblogs.com/LaughTale/p/12918823.html
Copyright © 2011-2022 走看看