首页 > 数据库 >Mybatis20_MyBatis映射文件深入(动态SQL)6

Mybatis20_MyBatis映射文件深入(动态SQL)6

时间:2024-03-07 20:11:51浏览次数:23  
标签:SQL appender id apache Mybatis20 org MyBatis import log4j

一、动态sql语句

 1、动态sql语句概述

  Mybatis的映射文件中,前面我们的SQL都是比较简单的,有些时候业务逻辑复杂时,我们的 SQL是动态变化的,此时在前面的学习中我们的 SQL 就不能满足要求了。

 2、环境搭建

  

  UserMapper.java

package com.itheima.mapper;

import com.itheima.domain.User;
import java.util.List;

public interface UserMapper {

    public List<User> findByCondition(User user);

}

  UserMapper.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="com.itheima.mapper.UserMapper">

    <!--查询操作-->
    <select id="findByCondition" parameterType="user" resultType="user">
        select * from user where id=#{id} and username=#{username} and password=#{password}
    </select>

</mapper>

  log4j.properties

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=debug, stdout

  MapperTest.java

package com.itheima.test;

import com.itheima.domain.User;
import com.itheima.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MapperTest {

    @Test
    public void test1() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        //模拟条件user
        User condition = new User();
        condition.setId(1);
        condition.setUsername("zhangsan");
        condition.setPassword("123");

        List<User> userList = mapper.findByCondition(condition);
        System.out.println(userList);
    }
}

  Run test1方法,检查结果:[User{id=1, username='zhangsan', password='123'}]

  当查询条件id、username和password都存在时控制台打印的sql语句如下:

   

 3、动态sql之<if>

  我们根据实体类的不同取值,使用不同的 SQL语句来进行查询。比如在 id如果不为空时可以根据id查询,如果username 不为空时还要加入用户名作为条件。这种情况在我们的多条件组合查询中经常会碰到。

<select id="findByCondition" parameterType="user" resultType="user">
    select * from User
    <where>
        <if test="id!=0">
            and id=#{id}
        </if>
        <if test="username!=null">
            and username=#{username}
        </if>
    </where>
</select>

  当查询条件id和username都存在时,控制台打印的sql语句如下:

 

标签:SQL,appender,id,apache,Mybatis20,org,MyBatis,import,log4j
From: https://www.cnblogs.com/ajing2018/p/18059658

相关文章

  • SQL的知识补充
    case……when……selectsubstring(身份证号,7,8)as出生日期,YEAR(now())-YEAR(substring(身份证号,7,8))年龄,CASEwhenSubstring(身份证号,17,1)%2=1then'男'else'女'ENDAS性别from转换 case……when……子句主要用于多种情况的分类去......
  • MyBatis Java 和 数据库 数据类型对应表
    类型处理器(typeHandlers)MyBatis在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时,都会用类型处理器将获取到的值以合适的方式转换成Java类型。下表描述了一些默认的类型处理器。提示 从3.4.5开始,MyBatis默认支持JSR-310(日期和时间API)。类型处......
  • MySQL8.0.21安装初始化失败
    情况说明:安装到最后一步第三个“Initializedatabase(maytakealongtime)”打叉,“Log”中存在“mysqld:File'.\鐜嬫旦鐒?bin.index'notfound(OSerrno2-Nosuchfileordirectory)”,已退出安装程序。问题分析:如果是第一次安装,问题在主机名称是中文;如果曾退出安装,问题......
  • mysql.h学习记录
    目录简介简介mysql.h是MySQLCAPI的主要头文件,它为C开发者提供了一套函数和定义,以与MySQL服务器交互。这些函数和定义使得开发者能够编写应用程序,实现与MySQL服务器的连接、执行查询、检索结果等操作。以下是一些常见的函数及其在mysql.h中的简要介绍:连接和关......
  • MySQL 的 datetime 日期类型,以当前时间作为初始默认值
     1.以当前时间作为默认值使用DEFAULTCURRENT_TIMESTAMP声明字段,插入记录时不用指定dt,自动置入当前时间CREATETABLEt1(dtDATETIMEDEFAULTCURRENT_TIMESTAMP); 2.以当前时间作为默认值以及更新值使用ONUPDATECURRENT_TIMESTAMP声明字段,修改记录时dt自......
  • PostgreSQL的generate_series函数应用
    一、简介PostgreSQL中有一个很有用处的内置函数generate_series,可以按不同的规则产生一系列的填充数据。二、语法函数参数类型返回类型描述generate_series(start,stop)int或bigintsetofint或setofbigint(与参数类型相同)生成一个数值序列,从start到stop,步进......
  • sqlalchemy的快速使用
    sqlalchemy是一个企业级的orm框架类似于Django的orm框架---》只能用在django框架中,不能用在别的位置sqlalchemy可以单独使用,也可以用在其他框架中安装pipinstallsqlalchemySQLAlchemy本身无法操作数据库,其必须依赖pymsql等第三方插件#Dialect用于和数据API进行交......
  • java使用ssh通道连接mysql
    添加依赖<dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency>添加配置importcom.jcraft.jsch.JSch;......
  • Navicat 无法连接Oracle / SQLserver
    报  cannotcreateocihandle cannotcreateocienviromentORA-XXXX等;排除用户名密码端口错误原因:Navicat本地的OCI版本与Oracle本地的不匹配查看Oracle本地的OCI版本,将Navicat升级至对应版本解决:下载新的oci进行替换https://www.oracle.com/database/technol......
  • mysql 5.7安装mariadb审计插件
    官方文档:https://mariadb.com/kb/en/mariadb-audit-plugin/参考文档:https://segmentfault.com/a/1190000042056617下载10.5版本的mariadb,再高的版本不适合5.7 1、下载mariadb下载界面:https://dlm.mariadb.com/browse/mariadb_server/101/1956/bintar-linux-x86_64/root......