一小时迅速入门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 相关文章推荐
基于jquery+thickbox仿校内登录注册框
Jun 07 Javascript
js去除空格的12种实用方法
Nov 08 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
Dec 01 Javascript
基于jQuery实现响应式圆形图片轮播特效
Nov 25 Javascript
IE6-IE9使用JSON、table.innerHTML所引发的问题
Dec 22 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
Nov 25 Javascript
Rollup处理并打包JS文件项目实例代码
May 31 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
Sep 17 Javascript
VsCode与Node.js知识点详解
Sep 05 Javascript
vue中在vuex的actions中请求数据实例
Nov 08 Javascript
Vue Router的手写实现方法实现
Mar 02 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
Jul 21 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
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
关于JavaScript的一些看法
2009/05/27 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
js从Cookies里面取值的简单实现
2014/06/30 Javascript
angularjs 源码解析之injector
2016/08/22 Javascript
js中常用的Tab切换效果(推荐)
2016/08/30 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
2016/12/26 Javascript
vue.js父组件使用外部对象的方法示例
2017/04/25 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
VueJS 组件参数名命名与组件属性转化问题
2018/12/03 Javascript
vue自定义指令用法经典实例小结
2019/03/16 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
2019/08/27 Javascript
javascript开发实现贪吃蛇游戏
2020/07/31 Javascript
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
python实现上传文件到linux指定目录的方法
2020/01/03 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
python 基于UDP协议套接字通信的实现
2021/01/22 Python
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
2012/12/30 HTML / CSS
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
拉夫劳伦爱尔兰官方网站:Ralph Lauren爱尔兰
2020/04/10 全球购物
运动会入场词200字
2014/02/15 职场文书
房地产财务部员工岗位职责
2014/03/12 职场文书
劲霸男装广告词
2014/03/21 职场文书
活动总结的格式
2014/05/07 职场文书
质量标语大全
2014/06/12 职场文书
小学向国旗敬礼活动方案
2014/09/27 职场文书
2015年幼儿园教研活动总结
2015/03/25 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python
java objectUtils 使用可能会出现的问题
2022/02/28 Java/Android