一小时迅速入门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 一个图片切换的插件
Oct 09 Javascript
jQuery中关于ScrollableGridPlugin.js(固定表头)插件的使用逐步解析
Jul 17 Javascript
JavaScript里四舍五入函数round用法实例
Apr 06 Javascript
JavaScript的jQuery库插件的简要开发指南
Aug 12 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
Jul 11 Javascript
AngularJS中的作用域实例分析
May 16 Javascript
原生JS封装_new函数实现new关键字的功能
Aug 12 Javascript
vue-better-scroll 的使用实例代码详解
Dec 03 Javascript
详解vue路由篇(动态路由、路由嵌套)
Jan 27 Javascript
js实现倒计时器自定义时间和暂停
Feb 25 Javascript
this.$toast() 了解一下?
Apr 18 Javascript
JQuery绑定事件四种实现方法解析
Dec 02 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 HtmlReplace输入过滤安全函数
2010/07/03 PHP
thinkphp 框架数据库切换实现方法分析
2020/05/18 PHP
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
在多个页面使用同一个HTML片段《续》
2011/03/04 Javascript
11个用于提高排版水平的基于jquery的文字效果插件
2012/09/14 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
js实现进度条的方法
2015/02/13 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
JavaScript手风琴页面制作
2017/05/17 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
2017/05/20 jQuery
angular.js实现购物车功能
2017/10/23 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
axios实现简单文件上传功能
2019/09/25 Javascript
Javascript操作select控件代码实例
2020/02/14 Javascript
封装 axios+promise通用请求函数操作
2020/08/11 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python处理csv数据的方法
2015/03/11 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
2018/02/11 Python
Django 响应数据response的返回源码详解
2019/08/06 Python
Python实现一个优先级队列的方法
2020/07/31 Python
Python中logging日志记录到文件及自动分割的操作代码
2020/08/05 Python
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
教你如何一步一步用Canvas写一个贪吃蛇
2018/10/22 HTML / CSS
汽车检测与维修应届毕业生求职信
2013/10/19 职场文书
房屋租赁意向书
2014/04/01 职场文书
小城镇建设汇报材料
2014/08/16 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
青岛导游词
2015/02/12 职场文书
Spring boot实现上传文件到本地服务器
2022/08/14 Java/Android