使用MyBatis进行数据库映射

栏目: Java · 发布时间: 6年前

内容简介:在Java中,MyBatis是1个支持自定义SQL的持久层框架,它可以存储过程和高级的映射。在正式介绍之前,我们首先通过mvn进行安装,我们将下面的内容添加到上述操作完成后,我们首先新建1个MyBatis的配置文件,使用XML的格式进行编写:

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实体转义编码,如 &lt; 来进行处理,或者直接使用 <![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进行数据库映射》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

疯狂科学家大本营

疯狂科学家大本营

Bei Er Fei Ao Er / 本书翻译组 译、黄晓庆 周宇煜 张为民 审译 / Science Press / 2012-1-5 / 48.00元

美国最棒的创意工场不是贝尔实验室,不是硅谷,也不是麻省理工学院的媒体实验室,而是由五角大楼领导的绝密军事机构DARPA——国防高级研究计划局。DARPA是由美国前总统艾森豪威尔建立的军事部门,创建的目的是为了回应苏联的太空计划。 虽然DARPA属于政府机构,但是没有冷冰 冰的氛围和官僚做派,那里的科学家偏爱牛仔裤和运动鞋。不过他们最爱的还是在各个领域寻找颠覆性创意。从航空航天、IT,到能源领......一起来看看 《疯狂科学家大本营》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具