[Mybatis]动态SQL环境搭建(重温UUID工具类,Mubatis-config配置类)

91 阅读2分钟

动态SQL? 动态SQL就是根据不同的条件生成不同的sql语句

在 MyBatis 之前的版本中,需要花时间了解大量的元素。借助功能强大的基于 OGNL 的表达式,MyBatis 3 替换了之前的大部分元素,大大精简了元素种类,现在要学习的元素种类比原来的一半还要少。

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

搭建环境

数据库

CREATE TABLE blog(
id VARCHAR(50) NOT NULL COMMENT '博客id',
title VARCHAR(100) NOT NULL COMMENT '博客标题',
author VARCHAR(30) NOT NULL COMMENT '博客作者',
create_time DATETIME NOT NULL COMMENT '创建时间',
views INT(30) NOT NULL COMMENT '浏览量'
)ENGINE=INNODB DEFAULT CHARSET=utf8;

创建基础工程

1.导包

2.编写配置文件

数据库配置文件

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/sqlstudy?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=123456

mybatis配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<!--configuration核心配置文件-->
<configuration>
    <!--映入外部配置文件-->
    <properties resource="db.properties">
        <!--可以全写在db.properties里  也可以两边搭配混合都能实现效果,如果存在 优先使用外部配置文件-->
<!--        <property name="username" value="root"/>-->
<!--        <property name="password" value="123456"/>-->
    </properties>

    <!--设置 日志配置logImpl规范填写,严格区分大小写,空格-->
    <settings>
        <!--标准的日志工厂实现-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
        <!--LOG4J-->
<!--        <setting name="logImpl" value="LOG4J"/>-->
<!--        是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <!--设置类型别名-->
    <typeAliases>
        <!--给实体类起别名-->
<!--        <typeAlias type="com.mybatisstudy.pojo.Student" alias="Student"></typeAlias>-->
<!--        <typeAlias type="com.mybatisstudy.pojo.Teacher" alias="Teacher"></typeAlias>-->
        <!--配置包名-->
<!--        <package name="com.mybatisstudy.pojo" />-->
    </typeAliases>

    <!--default 切换环境-->
    <environments default="development">
        <!--开发环境-->
        <environment id="development">
            <!--事务管理器 默认事务处理器JDBC-->
            <transactionManager type="JDBC"/>
            <!--数据源 默认POOLED / UNPOOLED-->
            <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.studymb.dao.BlogMapper"></mapper>
<!--        <mapper resource="dao/StudentMapper.xml"></mapper>-->
    </mappers>

</configuration>

3.编写实体类

/**
 * @author tian
 */

@Data
public class Blog {
    private int id;
    private String title;
    private String author;
    private Date createTime;
    private int views;
}

4.编写实体类对应的Mapper

5.测试

@Test
public void addInitBlog(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);

    Blog blog = new Blog();
    blog.setId(IDUtils.getId());
    blog.setViews(200);
    blog.setAuthor("zhang");
    blog.setTitle("java学习");
    blog.setCreateTime(new Date());

    int i = mapper.addBlog(blog);

    sqlSession.close();
}

重温工具类

MybatisUtils

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;

/**
 * @author tian
 * sqlSessionFactory --> sqlSession
 */
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    // 静态代码块
    static {
        // 使用mybatis第一步 获取sqlSessionFactory
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    // 既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
    /**
     * sqlSession完全包含了面向数据库执行sql,命令所需的所有方法.
     */
    public static SqlSession getSqlSession(){
        // 加上true后增删改不再需要手动commit提交
        return sqlSessionFactory.openSession(true);
    }
}

UUID工具类

import org.junit.Test;

import java.util.UUID;

/**
 * @author tian
 */
public class IDUtils {

    public static String getId(){
        return UUID.randomUUID().toString().replaceAll("-","");
    }


    @Test
    public void testUUID(){
        System.out.println(IDUtils.getId());
    }
}