22.动态SQL

本文介绍了如何搭建MyBatis的动态SQL环境,包括配置db.properties、mybatis-config.xml,创建SqlSessionFactory和SqlSession工具类。通过MybatisUtils和IDutils辅助类,实现了动态SQL的插入操作。在BlogMapper接口及其XML配置中展示了动态SQL的使用,成功插入多条博客数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态SQL环境搭建

什么是动态SQL:动态SQL就是指根据不同的条件生成不同的SQL语句

动态 SQL元素和―STL或基于类似XML的文本处理器相似。在MyBatis 之前的版本中,有很多元素需要花时间了解。MyBatis 3大大精简了元素种类,现在只需学习原来一半的元素便可。MyBatis采用功能强大的基于0GNL的表达式来淘汰其它大部分元素。

if
choose (when,otherwise)
trim (where,set)
foreach

搭建环境

在这里插入图片描述

数据库连接(导入相关依赖)

db.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?&characterEncoding=UTF-8
username=root
password=root

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--核心配置环境-->
<configuration>
<!--  引入外部配置文件  优先使用  -->
    <properties resource="db.properties" />

<settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
    <!--   开启驼峰命名规则映射  -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

<!--可以给实体类取别名-->
    <typeAliases>
        <package name="com.tian.pojo"/>
    </typeAliases>


    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

<mappers>
    <mapper class="com.tian.dao.BlogMapper"/>
</mappers>
</configuration>

工具类

MybatisUtils类

package com.tian.utils;

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 java.io.IOException;
import java.io.InputStream;

public class MybatisUtils {
    private static  SqlSessionFactory sqlSessionFactory;
    static {
        try{
            //使用mybatis获取sqlsessionfactory对象
            String resource="mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
             sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }catch (IOException e){
            e.printStackTrace();
        }

    }
    //既然有了 SqlSessionFactory.顺名思义,我们就可以从中获得 SqlSession 的实例了
    // sqlSession完全包含面向数据库执行sql命令所需的所有方法。
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession(true);
    }
}

IDutils类

package com.tian.utils;

import org.junit.Test;

import java.util.UUID;

public class IDutils {
    public static String getID(){
        return UUID.randomUUID().toString().replaceAll("-","");

    }
    @Test
    public void test(){
        System.out.println(IDutils.getID());
    }
}

实体类

@Data
public class Blog {
    private String id;
    private String title;
    private String author;
    private Date createTime;//属性名和字段名不一致,可以设置 开启驼峰命名
    private int views;

}

接口

public interface BlogMapper {
    //插入数据
    int addBlog(Blog blog);
}

接口对应的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.tian.dao.BlogMapper">

    <insert id="addBlog" parameterType="blog">
        insert into mybatis.blog(id,title,author,create_time,views)
        values (#{id},#{title},#{author},#{createTime},#{views});
    </insert>
</mapper>

测试

import com.tian.dao.BlogMapper;
import com.tian.pojo.Blog;
import com.tian.utils.IDutils;
import com.tian.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.Date;

public class MyTest {
    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
        Blog blog=new Blog();
        blog.setId(IDutils.getID());
        blog.setTitle("mybatis如此简单");
        blog.setAuthor("狂神说");
        blog.setCreateTime(new Date());
        blog.setViews(9999);
        mapper.addBlog(blog);

        blog.setId(IDutils.getID());
        blog.setTitle("java如此简单");
        mapper.addBlog(blog);

        blog.setId(IDutils.getID());
        blog.setTitle("spring如此简单");
        mapper.addBlog(blog);

        blog.setId(IDutils.getID());
        blog.setTitle("微服务如此简单");
        mapper.addBlog(blog);

        sqlSession.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值