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

查看所有标签

猜你喜欢:

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

Inside Larry's and Sergey's Brain

Inside Larry's and Sergey's Brain

Richard Brandt / Portfolio / 17 Sep 2009 / USD 24.95

You’ve used their products. You’ve heard about their skyrocketing wealth and “don’t be evil” business motto. But how much do you really know about Google’s founders, Larry Page and Sergey Brin? Inside......一起来看看 《Inside Larry's and Sergey's Brain》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

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

Markdown 在线编辑器