一小时迅速入门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 相关文章推荐
js验证表单第二部分
Nov 25 Javascript
高效率JavaScript编写技巧整理
Aug 23 Javascript
jquery实现弹出层遮罩效果的简单实例
Mar 03 Javascript
javascript HTML+CSS实现经典橙色导航菜单
Feb 16 Javascript
jQuery内容过滤选择器用法示例
Sep 09 Javascript
深入理解Javascript中的观察者模式
Feb 20 Javascript
vue-router 路由基础的详解
Oct 17 Javascript
JavaScript callback回调函数用法实例分析
May 08 Javascript
vue+iview 实现可编辑表格的示例代码
Oct 31 Javascript
vue中eslintrc.js配置最详细介绍
Dec 21 Javascript
微信小程序与webview交互实现支付功能
Jun 07 Javascript
jQuery实现简单飞机大战
Jul 05 jQuery
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 验证码实例代码
2010/06/01 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
ThinkPHP文件上传实例教程
2014/08/22 PHP
php自动获取关键字的方法
2015/01/06 PHP
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
ASP SQL防注入的方法
2008/12/25 Javascript
javascript 多浏览器 事件大全
2010/03/23 Javascript
控制文字内容的显示与隐藏示例
2014/06/11 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
浅谈Javascript中深复制
2014/12/01 Javascript
基于JavaScript实现生成名片、链接等二维码
2015/09/20 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
浅谈JS中的常用选择器及属性、方法的调用
2017/07/28 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
微信小程序3D轮播实现代码
2019/09/19 Javascript
解决vue项目运行npm run serve报错的问题
2020/10/26 Javascript
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
python异常处理和日志处理方式
2019/12/24 Python
详解python itertools功能
2020/02/07 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
购买原创艺术品:Zatista
2019/11/09 全球购物
类如何去实现接口
2013/12/19 面试题
J2EE面试题集锦(附答案)
2013/08/16 面试题
node中使用shell脚本的方法步骤
2021/03/23 Javascript
仓库保管员岗位职责
2013/12/20 职场文书
2014年统战工作总结
2014/12/09 职场文书
PHP策略模式写法
2021/04/01 PHP
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
2021/05/28 Python
oracle连接ODBC sqlserver数据源的详细步骤
2021/07/25 Oracle
MySQL数据管理操作示例讲解
2022/12/24 MySQL