一小时迅速入门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 相关文章推荐
地址栏上的一段语句,改变页面的风格。(教程)
Apr 02 Javascript
Javascript打印网页部分内容的脚本
Nov 17 Javascript
javascript是怎么继承的介绍
Jan 05 Javascript
js控制href内容的连接内容的变化示例
Apr 30 Javascript
javascript实现当前页导航激活的方法
Feb 27 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
Jun 19 Javascript
bootstrap table表格插件使用详解
May 08 Javascript
Bootstrap fileinput文件上传组件使用详解
Jun 06 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
Apr 01 Javascript
vue+element tabs选项卡分页效果
Jun 29 Javascript
vue实现路由不变的情况下,刷新页面操作示例
Feb 02 Javascript
vue简单封装axios插件和接口的统一管理操作示例
Feb 02 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随机生成福彩双色球号码的2种方法
2013/02/04 PHP
使用PHP函数scandir排除特定目录
2014/06/12 PHP
php打造智能化的柱状图程序,用于报表等
2015/06/19 PHP
php 无限级分类 获取顶级分类ID
2016/03/13 PHP
PHP 表单提交及处理表单数据详解及实例
2016/12/27 PHP
jQuery 使用手册(七)
2009/09/23 Javascript
页面中iframe相互传值传参
2009/12/13 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
JS实现的自定义右键菜单实例二则
2015/09/01 Javascript
jQuery+css实现的tab切换标签(兼容各浏览器)
2016/01/28 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
解析JavaScript数组方法reduce
2016/12/12 Javascript
微信小程序 wx:for的使用实例详解
2017/04/27 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
2019/01/23 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
2018/11/23 Python
python3使用matplotlib绘制条形图
2020/03/25 Python
对Python的交互模式和直接运行.py文件的区别详解
2019/06/29 Python
python实现简单俄罗斯方块
2020/03/13 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
销售经理竞聘书
2014/03/31 职场文书
党的群众路线教育实践方案
2014/05/11 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
少年派的奇幻漂流观后感
2015/06/08 职场文书
关于python爬虫应用urllib库作用分析
2021/09/04 Python