MyBatis动态SQL

1.动态SQL是什么

  动态SQL是通过不同的参数组成不同的SQL语句,其实也就是进行SQL语句的拼接。

2.动态SQL的作用

  动态SQL其实就是通过拼接可以进行完成某种特定需求的SQL语句,可以提高代码的重用性

3.基于xml动态SQL的一些重要标签

<sql>  用于声明公有的SQL语句块.,在操作标签中使用<include>调用 [不建议用]

不建议的原因,会导致代码难以维护。

<if>  类似java if(){},用于判断

<foreach>:类似javaforeach循环,一般用户批量处理的SQL语句

<trim> :切割标签,主要用于切割关键字的头和尾的字符.新版的Mybatis使用的几率很少.

<set>:使用 set标签就是SQL语言的set关键字,可以在update 的时候set 关键字后面的,逗号可以自动忽略

<where>:使用where标签作为SQL语言的where关键字,好处如果where后面的条件都不成立,忽略where关键字.

<choose> <when> <otherwise> :  javaswithc case

4.动态SQL的入门配置

  动态SQL其实就是基于MyBatis的基础入门配置相对于SQL语句方面做了些调整,当然首先要先配置xml基础配置

  1.导包

 

  2.Mybatisxml基础配置环境

  

  3.进行Mybatis的功能类创建会话工厂获得会话对象

  package cn.gzsxt.utils;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MybatisUtils {
    //要求对外只开放一个会话
    private static final SqlSessionFactory SSF = createSSF();
    //声明一个线程变量
    private static final ThreadLocal<SqlSession> THREAD_LOCAL = new ThreadLocal<>();
    
    //获得会话工厂
    public static SqlSessionFactory createSSF() {
        try {
            //读取配置文件
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            //创建会话构造类对象
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            //构建会话工厂
            return builder.build(reader);
        } catch (IOException e) {
            e.printStackTrace();
        }    
        return null;
    }    
    
    //获得会话
    public static SqlSession getSession() {
        //如果线程没有变量就把获得的会话对象放在线程变量里
        if(THREAD_LOCAL.get()==null) {
            SqlSession session = SSF.openSession();
            THREAD_LOCAL.set(session);
        }
        //如果已有变量直接返回这个线程
        return THREAD_LOCAL.get();
    }
    //使用了线程,关闭会话的时候必须清楚线程对象
    public static void close() {
        if(THREAD_LOCAL.get()!=null) {
            SqlSession session = SSF.openSession();
            session.close();
            THREAD_LOCAL.remove();        
        }
        
    }
    public static void main(String[] args) {
        System.out.println(MybatisUtils.getSession());
        System.out.println(MybatisUtils.getSession());
    }
}

   4.实体类

  

  5.完成方法接口

  

  6.对其接口的xml配置,插入拼接的SQL语句实现动态SQL

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper namespace="cn.gzsxt.mapper.StudentMapper">
    <!-- 编写插入的sql语句
        其中<foreach>为循环标签,用来循环拼接SQL语句
        其属性item为每次循环所返回的对象
        其属性separator为每次循环后追加的字符,它会自动匹配SQL语句
     -->
     <insert id="batachInsert" useGeneratedKeys="true" keyProperty="studentId" keyColumn="student_id">
         insert into t_student(student_name,student_pwd,student_status,create_date,student_account)values
         <foreach collection="list" item="item" separator=",">
         (#{item.studentName},#{item.studentPwd},#{item.studentStatus},#{item.createDate},#{item.studentAccount})
         </foreach>
         
     </insert>
</mapper>

  7.做一个测试类进行验证

  

 

转载于:https://www.cnblogs.com/Virtual-field/p/10758642.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值