一小时迅速入门Mybatis之bind与多数据源支持 Java API


Posted in Javascript onSeptember 15, 2021

这次说一下bind、多数据源支持、Java API

一、bind

// 测试bind
List<Person> testBind(@Param("name") String name);
<!--测试bind-->
<!--相当于SQL select * from person where name like '%小强%' -->
<select id="testBind" resultType="entity.Person">
    <bind name="bidname" value="'%'+name+'%'" />
    select * from person where name like #{bidname}
</select>
import dao.PersonMapper;
import entity.Person;
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.InputStream;
import java.util.*;

/**
 * @author 发现更多精彩  关注公众号:木子的昼夜编程
 * 一个生活在互联网底层,做着增删改查的码农,不谙世事的造作
 */
public class TestMain03 {
    public static void main(String[] args) throws Exception {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        try (SqlSession session = sqlSessionFactory.openSession()) {
            // 通过sesson获取Mapper 这个Mapper会编程Mybatis的代理Mapper
            PersonMapper mapper = session.getMapper(PersonMapper.class);
            List<Person> list = mapper.testBind("小强");
            Optional.ofNullable(list).orElse(new ArrayList<>()).forEach(item -> {
                System.out.println(item);
            });
        }
    }
}

bind就是允许使用OGNL表达式创建一个变量(例如:bidname) ,然后将其绑定在当前上下文

二、 多数据库支持

搞了半天搞错了,浪费了点儿点儿时间

2.1 pom.xml

我用的jar包版本是3.4.5

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>testDB</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!-- 引入Mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <!-- mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
    </dependencies>
</project>

2.2 mybatis-config.xml

databaseIdProvider我用了默认配置 没有自定义,下一篇天写一个自定义实现类的示例

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=GMT%2B8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--DB_VENDOR是默认实现  这里可以定义自己的实现类 下一篇写-->
    <databaseIdProvider type="DB_VENDOR" >
        <!--这里是因为原名称太长了 指定一下缩写 xml中判断类型就用缩写名称判断-->
        <property name="DB2" value="db2" />
        <property name="Oracle" value="oracle" />
        <property name="Adaptive Server Enterprise" value="sybase" />
        <property name="MySQL" value="mysql" />
    </databaseIdProvider>
    <!--扫描-->
    <mappers>
        <mapper resource="PersonMapper.xml"/>
    </mappers>
</configuration>

2.3 接口 PersonMapper

package dao;


/**
 * @author 发现更多精彩  关注公众号:木子的昼夜编程  分享一个生活在互联网底层做着增删改查的码农的感悟与学习
 * @create 2021-08-30 21:54
 */
public interface PersonMapper {
    // 测试返回当前时间
    String testDb();
}

2.4 xml PersonMapper.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="dao.PersonMapper">
    <!--选择不同的数据库-->
    <select id="testDb" resultType="string" >
        <!--如果是mysql 执行这个 -->
        <if test="_databaseId == 'mysql'">
            select CONCAT("mysql-->",#{_databaseId},"-->",now()) from dual
        </if>
        <!--如果是oracle 执行这个-->
        <if test="_databaseId == 'oracle'">
            select "oracle-->"||#{_databaseId}  from dual
        </if>
    </select>

</mapper>

2.5 测试

import dao.PersonMapper;
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.InputStream;

/**
 * @author 发现更多精彩  关注公众号:木子的昼夜编程
 * 一个生活在互联网底层,做着增删改查的码农,不谙世事的造作
 * @create 2021-09-02 21:42
 */
public class TestMain {
    public static void main(String[] args) throws Exception {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();
            // 通过sesson获取Mapper 这个Mapper会编程Mybatis的代理Mapper
            PersonMapper mapper = session.getMapper(PersonMapper.class);
            String type = mapper.testDb();
            System.out.println("数据库类型:"+type);
    }
}

可以看到我pom里边引入的是Mysql的驱动包,所以我这里结果肯定是Mysql,如果引入多个包,那么会默认使用databaseIdProvider第一个匹配到的,引入多个驱动下一篇写demo

输出结果:

一小时迅速入门Mybatis之bind与多数据源支持 Java API

下集预告:

  1. 自定义DatabaseIdProvider 自己定义_databaseId 类型
  2. databaseId标签使用 不再用if
  3. 引入多驱动 表现结果

到此这篇关于一小时迅速入门Mybatis之bind与多数据源支持 Java API的文章就介绍到这了,更多相关Mybatis bind 多数据源支持 Java API内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript去掉空格的方法集合
Dec 28 Javascript
Javascript中引用示例介绍
Feb 21 Javascript
js图片轮播效果实现代码
Apr 18 Javascript
AngularJS 2.0入门权威指南
Oct 08 Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
Dec 02 Javascript
Javascript设计模式之装饰者模式详解篇
Jan 17 Javascript
原生JS实现九宫格抽奖效果
Apr 01 Javascript
Vue 进入/离开动画效果
Dec 26 Javascript
js实现HTML中Select二级联动的实例
Jan 05 Javascript
React中常见的动画实现的几种方式
Jan 10 Javascript
打通前后端构建一个Vue+Express的开发环境
Jul 17 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
Dec 19 Javascript
Javascript之datagrid查询详解
Sep 15 #Javascript
Js类的构建与继承案例详解
Sep 15 #Javascript
JavaScript 数组去重详解
Sep 15 #Javascript
5种方法告诉你如何使JavaScript 代码库更干净
Sep 15 #Javascript
JavaScript小技巧带你提升你的代码技能
Sep 15 #Javascript
javascript函数式编程基础
Sep 15 #Javascript
15个值得收藏的JavaScript函数
Sep 15 #Javascript
You might like
PHP中call_user_func_array()函数的用法演示
2012/02/05 PHP
php简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
jquery uaMatch源代码
2011/02/14 Javascript
jquery中的mouseleave和mouseout的区别 模仿下拉框效果
2012/02/07 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
js实现将选中值累加到文本框的方法
2015/08/12 Javascript
JS组件Bootstrap Table使用方法详解
2016/02/02 Javascript
AngularJS ng-bind 指令简单实现
2016/07/30 Javascript
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
2017/01/12 NodeJs
Vue-cli proxyTable 解决开发环境的跨域问题详解
2017/05/18 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
2017/08/04 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
2017/10/24 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
微信小程序拍照和摄像功能实现方法示例
2019/02/01 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
JavaScript设计模型Iterator实例解析
2020/01/22 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
Vue包大小优化的实现(从1.72M到94K)
2021/02/18 Vue.js
[01:07:53]RNG vs VG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
Flask框架学习笔记之使用Flask实现表单开发详解
2019/08/12 Python
浅析Python语言自带的数据结构有哪些
2019/08/27 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
python软件都是免费的吗
2020/06/18 Python
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
毕业生自我推荐
2013/11/04 职场文书
教师自荐信范文
2013/12/09 职场文书
访谈节目策划方案
2014/05/15 职场文书
走群众路线剖析材料
2014/10/09 职场文书
2016年中秋节慰问信
2015/12/01 职场文书