使用MyBatis进行数据库映射的方式

在Java中,MyBatis是1个支持自定义SQL的持久层框架,它可以存储过程和高级的映射。

在正式介绍之前,我们首先通过mvn进行安装,我们将下面的内容添加到 pom.xml 配置文件中:

<dependency>
 <groupId>org.mybatis</groupId>
 <artifactId>mybatis</artifactId>
 <version>3.4.5</version>
</dependency>

上述操作完成后,我们首先新建1个MyBatis的配置文件,使用XML的格式进行编写:

<?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>
 <properties resource="db.properties"></properties>
 <environments default="my-config">
   <environment id="my-config">
    <transactionManager type="JDBC" />
    <dataSource type="POOLED">
     <property name="driver" value="${driver}"></property>
     <property name="url" value="${url}"></property>
     <property name="username" value="${user}"></property>
     <property name="password" value="${pwd}"></property>
    </dataSource>
   </environment>
 </environments>
 <mappers>
  <mapper resource="mapping.xml" />
 </mappers>
</configuration>

我们将上述的内容写入到 config.xml 文件中。其中environments是配置的环境,其中的environment用于对应的环境的配置。这里,我们默认使用的环境是 my-config ,其使用JDBC的方式进行连接,数据源的方式为连接池。其中,数据源可以使用:

  • UNPOOLED,每次请求时打开和关闭连接
  • POOLED,连接池
  • JNDI,主要用于EJB或应用服务器中使用

而环境通过对 db.properties 中的内容进行配置,其内容如下:

url=jdbc:oracle:thin:@xxx.xxx.xxx.xx:1521/orcl
user=xxx
pwd=xxx
driver=oracle.jdbc.driver.OracleDriver

更多关于MyBatis的配置,可以 参考 。其中包括别名、类型处理器typeHandler的说明,这里就不一一叙述了。

最后,我们还设置了1个匹配的资源,其支持4种方式:

resource,使用相对于类路径的资源引用

url,使用完全限定资源定位符

class,使用映射器接口实现类的完全限定类名

name,将包内的映射器接口实现全部注册为映射器

在这里我们使用resource的方式指定匹配的文件的名称。其内容如下:

<?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="user">
  <select id="es_temp" fetchSize="10" resultType="java.util.LinkedHashMap">
   select ENTNAME,UNISCID,INDUSTRY,REGION,OPSTATE,ESTYEAR,SCALE from xxx where rownum <![CDATA[<=]]> 20
  </select>
</mapper>

由于在XML中,括号具有单独的意义,因此如果我们使用尖括号会出现解析错误,此时我们可以使用HTML实体转义编码,如 < 来进行处理,或者直接使用 <![CDATA[xxxx]]> 进行实际符号的处理。

我们通过mapper标签中的namespace定义了映射的命名空间,其中的id用于对应语句的匹配,方便进行命名解析。

接着是对应的Java代码的编写:

import java.io.Reader;
import java.util.*;
import com.alibaba.fastjson.*;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.*;
public class Demo {
  public static SqlSessionFactory sessionFactory;
  public static void main(String[] args) {
    try {
      Reader reader = Resources.getResourceAsReader("config.xml");
      sessionFactory = new SqlSessionFactoryBuilder().build(reader);
      SqlSession session = sessionFactory.openSession();
      List<LinkedHashMap<?,?>> result = session.selectList("user.es_temp");
      String json_str = JSON.toJSONString(result);
      System.out.println(json_str);
      session.close();
    } catch (Exception e){
      e.printStackTrace();
    }
  }
}

在这里,我们通过Resources类对配置文件进行读取,然后构建1个SqlSessionFactory,之后通过其openSession得到1个Session对象,这样我们就可以进行对应的SQL操作了。

我们使用selectList函数进行对应SQL的执行,其使用的是 命名空间.id 的方式来进行对应的操作。另外,还有1个selectOne函数用于单个记录的查询,对于多个结果会直接返回异常。

其结果为:

[
  {
    "ENTNAME":"深圳市蓝海汇装饰设计工程有限公司",
    "UNISCID":"91440300359236108Q",
    "INDUSTRY":"批发和零售业",
    "REGION":"深圳",
    "OPSTATE":"存续(在营、开业、在册)",
    "ESTYEAR":"3年以下",
    "SCALE":"小微企业"
  },
  {
    "ENTNAME":"暴风雨(深圳)电子商务有限公司",
    "UNISCID":"91440300MA5DF887XE",
    "INDUSTRY":"批发和零售业",
    "REGION":"深圳",
    "OPSTATE":"存续(在营、开业、在册)",
    "ESTYEAR":"3年以下",
    "SCALE":"小微企业"
  },
  ...
]

可以看到,通过上述的方式,我们可以很容易的实现代码与SQL语句的分离。但是,对应的SQL语句依赖于数据库,可移植性差。另外,对于字段多、关联表多时,编写SQL语句的工作量很大。

总结

以上所述是小编给大家介绍的使用MyBatis进行数据库映射,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Mybatis中的高级映射一对一、一对多、多对多

    学习hibernate的时候,小编已经接触多各种映射,mybatis中映射有到底是如何运转的,今天这篇博文,小编主要来简单的介绍一下mybatis中的高级映射,包括一对一.一对多.多对多,希望多有需要的小伙伴有帮助,小编主要从四个方面进行介绍,订单商品数据模型.一对一查询.一对多查询.多对多查询. 一.订单商品数据模型 1.数据库执行脚本,如下所示: <span style="font-family:Comic Sans MS;font-size:18px;">CREATE

  • 详解Java的MyBatis框架中SQL语句映射部分的编写

    1.resultMap SQL 映射XML 文件是所有sql语句放置的地方.需要定义一个workspace,一般定义为对应的接口类的路径.写好SQL语句映射文件后,需要在MyBAtis配置文件mappers标签中引用,例如: <mappers> <mapper resource="com/liming/manager/data/mappers/UserMapper.xml" /> <mapper resource="com/liming/mana

  • Mybatis映射文件实例详解

     一.输入映射 parameterType 指定输入参数的Java类型,可以使用别名或者类的全限定名.它可以接收简单类型.POJO.HashMap. 1.传递简单类型 根据用户ID查询用户信息: <select id="findUserById" parameterType="int" resultType="com.itheima.mybatis.po.User"> SELECT * FROM USER WHERE id =#{id

  • MyBatis中多对多关系的映射和查询

    先说一下需求: 在页面上显示数据库中的所有图书,显示图书的同时,显示出该图书所属的类别(这里一本书可能同时属于多个类别) 创建表: 笔者这里使用中间表连接图书表和图书类别表,图书表中没有使用外键关联图书类别表 而是在中间表中引用了图书主键和类别主键 通过中间表来 表示 图书 和 图书类别 的关系 建立图书表(图书编号,图书名字) create table book ( bid int primary key auto_increment, bname varchar(20) ); 建立类别表(类

  • Mybatis实体类和表映射问题(推荐)

    本文是小编给大家带来的mybatis中实体类和表映射问题的知识,学习本教程能够快速帮助我们解决字段名与实体类属性名不相同的冲突问题,需要的朋友一起看看吧! 一.准备演示需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), order_price FLOAT ); INSERT INTO orders(order_no, order_price) VALUES('a

  • 深入浅出MyBatis中映射文件和实体类的关联性

    mybatis的映射文件写法多种多样,不同的写法和用法,在实际开发过程中所消耗的开发时间.维护时间有很大差别,今天我就把我认为比较简单的一种映射文件写法记录下来,供大家修改建议,争取找到一个最优写法~~: 以User对象和UserMap.xml为例讲解,代码如下: User为用户实体类(仅作为讲解,可以只关注引用类型变量,get/set方法省略): import com.google.common.collect.Lists; import com.gukeer.common.persisten

  • Mybatis结果集自动映射的实例代码

    在使用Mybatis时,有的时候我们可以不用定义resultMap,而是直接在<select>语句上指定resultType.这个时候其实就用到了Mybatis的结果集自动映射.Mybatis的自动映射默认是开启的,有需要我们也可以将其关闭(还可以调整自动映射的策略). 1       Mybatis结果集自动映射 在使用Mybatis时,有的时候我们可以不用定义resultMap,而是直接在<select>语句上指定resultType.这个时候其实就用到了Mybatis的结果集

  • Java的MyBatis框架中关键的XML字段映射的配置参数详解

    properties 这些是外部化的,可替代的属性,这些属性也可以配置在典型的Java属性配置文件中,或者通过properties元素的子元素来传递.例如: <properties resource="org/mybatis/example/config.properties"> <property name="username" value="dev_user"/> <property name="pas

  • Java的MyBatis框架中Mapper映射配置的使用及原理解析

    Mapper的内置方法 model层就是实体类,对应数据库的表.controller层是Servlet,主要是负责业务模块流程的控制,调用service接口的方法,在struts2就是Action.Service层主要做逻辑判断,Dao层是数据访问层,与数据库进行对接.至于Mapper是mybtis框架的映射用到,mapper映射文件在dao层用. 下面是介绍一下Mapper的内置方法: 1.countByExample ===>根据条件查询数量 int countByExample(UserE

  • 使用MyBatis进行数据库映射的方式

    在Java中,MyBatis是1个支持自定义SQL的持久层框架,它可以存储过程和高级的映射. 在正式介绍之前,我们首先通过mvn进行安装,我们将下面的内容添加到 pom.xml 配置文件中: <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency

  • Mybatis Plus插件三种方式的逆向工程的使用

    本文源码:GitHub·点这里 || GitEE·点这里 一.逆向工程简介 在Java开发中,持久层最常用的框架就是mybatis,该框架需要编写sql语句,mybatis官方提供逆向工程,可以把数据表自动生成执行所需要的基础代码,例如:mapper接口,sql映射文件,pojo实体类等,避免基础代码维护的繁杂过程. 在实际的使用中,常用的逆向工程方式如上,mybatis框架,mybatis-plus框架,插件方式. 二.Mybatis方式 1.基础描述 基于xml配置的方式,生成mybatis

  • Mybatis实现关联关系映射的方法示例

    目录 数据库表结构 一.实现Project关联Company一对一关联 二.实现Company关联Project一对多关系 三.Mybatis子查询方式实现关联关系查询 类和类有关联,将查询的结果注入到对象和对象的关联关系中 Mybatis处理的关联关系 包括一对一关联 和 一对多关联 ,例如学生关联班级是一对一 :班级关联学生是一对多. Mybatis实现关联关系映射,有两种方式:多表连接 和 子查询 数据库表结构 tb_project tb_cmpany 一.实现Project关联Compa

  • Spring Boot集成MyBatis访问数据库的方法

    基于spring boot开发的微服务应用,与MyBatis如何集成? 集成方法 可行的方法有: 1.基于XML或者Java Config,构建必需的对象,配置MyBatis. 2.使用MyBatis官方提供的组件,实现MyBatis的集成. 方法一 建议参考如下文章,完成集成的验证. MyBatis学习 之 一.MyBatis简介与配置MyBatis+Spring+MySql 基于Spring + Spring MVC + Mybatis 高性能web构建 spring与mybatis三种整合

  • 通过MyBatis读取数据库数据并提供rest接口访问

    1 mysql 创建数据库脚本 -- phpMyAdmin SQL Dump -- version 4.2.11 -- http://www.phpmyadmin.net -- -- Host: localhost -- Generation Time: 2016-08-02 18:13:50 -- 服务器版本: 5.6.21 -- PHP Version: 5.6.3 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = &q

  • MyBatis多对多映射初识教程

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 在上篇文章给大家介绍MyBatis一对一映射初识教程. 下面给大家说下mybatis多对多映射知识,具体详情如下所示: 多对多的例子也不少,比如课程与学生之间的关系

  • Mybatis批量更新三种方式的实现

    Mybatis实现批量更新操作 方式一: <update id="updateBatch" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" open="" close="" separator=";">

  • Mybatis中Mapper映射文件使用详解

    紧接上文所述,在这篇文章中我将对Mapper映射文件进行详细的说明. Mapper映射文件是一个xml格式文件,必须遵循相应的dtd文件规范,如ibatis-3-mapper.dtd.我们先大体上看看支持哪些配置?如下所示,从Eclipse里截了个屏: 从上图可以看出,映射文件是以<mapper>作为根节点,在根节点中支持9个元素,分别为insert.update.delete.select(增删改查);cache.cache-ref.resultMap.parameterMap.sql. 下

  • 使用Mybatis对数据库进行单表操作的实现示例

    简介 该篇文章主要是介绍如何使用MyBatis对Mysql数据库进行单表操作(对于mybatis的下载以及配置文件的作用和具体信息,我在上一篇文章中也已经提到了),使用的环境如下: JDK版本:1.8 编译器:IDEA2019 JDBC版本:8.0.18 mybatis版本:3.5.3 配置文件 首先需要有两个配置文件,一个是configuration.xml文件,配置的是连接数据库的环境以及对于mapper.xml文件的映射,还有另一个文件就是mapper.xml,这个文件主要是用来写sql语

  • mybatis-plus实体类中出现非数据库映射字段解决办法

    在使用mybatis 或者其它mybatis的二次开发框架时(例如mybatis-plus),有时候数据库中的字段和实体类中的字段可能不一致.例如数据库中只有3个字段,而实体类中除了数据库中对应映射的三个字段以外还有多余的其余字段,例如实体类中有5个字段.那么运行就会报错 如果需要在mybatis映射实体类中加入非数据库映射字段.那么可以使用@TableField(exist = false)进行标识对应字段不属于数据库的映射字段即可. 当然可以点击进入@TableField(exist = f

随机推荐