Mybatis映射文件规则实例详解

目录
  • 1.ORM概念
  • 2.映射文件命名规则
  • 3.Mybatis的两个一致
  • 4.总结创建mybatis的步骤
  • 补充:MyBatis_自定义结果映射规则
  • 总结

在说明映射文件规则之前,先来回顾一下ORM相关概念。

1.ORM概念

ORM(Object Relationship Mapping)对象关系映射

对象:Java的实体类对象

关系:关系型数据库

映射:二者之间的对应关系

字段名和属性名要一一对应才可以,它们的名字要相同,底层调用的是反射机制

Java概念 数据库概念
属性 列,字段
对象 记录

2.映射文件命名规则

表对应的实体类的类名+Mapper.xml

举例:假如数据库的表的名字是t_user,它对应的实体类是User,那么对应的映射文件为UserMapper.xml

一个映射文件对应一个实体类,对应一张表的操作,调用Mapper中的方法就是来执行SQL

Mybatis映射文件用来写SQL语句,访问和操作表的数据

Mybatis映射文件存放位置是src/main/resources/mappers目录下面

3.Mybatis的两个一致

Mybatis可以面向接口操作数据,如果我们以包为单位引入映射文件,需要有两个一致

① 映射文件的namespace要和mapper接口的全类名一致

当调用Mapper接口中的方法,它会先根据Mapper接口的全类名去找到映射文件,然后根据方法名去找到对应的SQL语句

②映射文件中SQL语句的id要和mapper接口中的方法名一致

4.总结创建mybatis的步骤

  1. 创建maven工程
  2. 在pom.xml中引入相关依赖,比如数据库驱动,mybatis,junit单元测试,log4j日志
  3. 在src/main/java建包
    1. 3.1 在pojo包下面创建对应的实体类
      注:实体类对应数据库表的记录
      也就是说数据库查询出来的结果要以什么方式返回
    2. 3.2 在mapper包下面创建mapper接口,里面定义操作数据库中表的相关方法
  4. 在resources目录下面建mybatis的核心配置文件
<?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代表核心配置文件-->
<configuration>
<!--    The content of element type "configuration" must match "
(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,
objectWrapperFactory?,reflectorFactory?,plugins?,environments?,
  databaseIdProvider?,mappers?)".-->
<!--    <typeAliases></typeAliases>-->
<!--    因为后面要查询的语句很多,每一个查询语句要对应一个实体类,那么我们在指定返回类型的时候-->
<!--    要写类的全路径,路径可能很长,这样就很麻烦,我们就可以使用标签-->
   <properties resource="jdbc.properties"/>
<!--    设置类型别名-->
   <typeAliases>
<!--        typeAlias:设置某个类型的别名
           属性:
               type:设置需要设置别名的类型
               alias:设置某个类型的别名,如果不设置该属性,则这个类型有默认的别名,而且类名不区分大小写
-->
       <typeAlias type="com.atguigu.mybatis.mybatis.pojo.User" alias="User"></typeAlias>
<!--       以包为单位,把包下面的所有类型设置成为默认的类型别名,——类名不区分大小写-->
       <package name="com.atguigu.mybatis.pojo"/>
   </typeAliases>
   <!--    环境可以有多个,我们用默认的环境-->
   <!--    enviments:配置连接数据库的环境
              id:表示连接数据库环境的唯一标识,不能重复-->
   <environments default="development">
       <environment id="development">
           <!--            transactionManager设置事务管理方式
                        type=DBC|MANAGED
                        JDBC:表示在当前环境中,执行SQL时,使用的是JDBC中原生的事务管理方式,事务的提交或回滚需要手动处理
                        MANAGED:表示被谁管理,例如Spring-->
           <transactionManager type="JDBC"/>
<!--            type用来设置数据源的类型
type=POOLED|UNPOOLED|JNDI
POOLED:表示使用的是数据库连接池缓存数据库连接
UNPOOLED:表示不使用数据库连接池
JNDI:表示使用的是上下文中的数据源-->
           <dataSource type="POOLED">
               <property name="driver" value="${jdbc.driver}"/>
               <property name="url" value="${jdbc.url}"/>
               <property name="username" value="${jdbc.username}"/>
               <property name="password" value="${jdbc.password}"/>
               <!--                数据源就是连接是连接数据库的信息-->
           </dataSource>
       </environment>
       <environment id="test">
           <transactionManager type="JDBC"/>
           <!--            type=POOLED表示使用数据库连接池-->
           <dataSource type="POOLED">
               <property name="driver" value="${driver}"/>
               <property name="url" value="${url}"/>
               <property name="username" value="${username}"/>
               <property name="password" value="${password}"/>
           </dataSource>
       </environment>
   </environments>
   <!--    引入映射文件-->
   <!--    每一个Mapper.xml都需要在Mybatis的核心配置文件中注册-->
<!--    mapper文件的位置是为了找到要执行的sql语句
resources属性指定的是mapper文件的路径
这个路径是从target/classes路径开始的
用/作为分隔符-->
   <mappers>
<!--        <mapper resource="mappers/UserMapper.xml"/>-->
<!--        这个时候,这个包里面的所有配置文件都会被引入-->
<!--        以包为单位引入映射文件
            要求:
            1.mapper接口所在的包要和映射文件所在的包一致
            2.mapper接口要和映射文件的名字一致
                  -->
       <package name="com.atguigu.mybatis.mapper"/>
   </mappers>
</configuration>

4.在resources目录下面建立mapper映射文件

5.测试

   //加载核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //获取SqlSessionFactoryBuilder
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取SqlSessionFactory 工厂模式
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //获取mybatis操作的会话对象
        //sqlSession默认是不自动提交事务的,如果我们写上参数true,就代表自动提交
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //获取mapper接口的对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int i = mapper.insertUser();
        //提交事务
//        sqlSession.commit();
        System.out.println("结果:"+i);

补充:MyBatis_自定义结果映射规则

自定义resultMap,实现高级结果集映射

在EmployeeMapperPlus.xml中有:

package com.atguigu.mybatis.dao;
import java.util.List;
import com.atguigu.mybatis.bean.Employee;
public interface EmployeeMapperPlus {
    public Employee getEmpById(Integer id);
}

在EmployeeMapperPlus.xml中实现方法:

    <!--自定义某个javaBean的封装规则
    type:自定义规则的Java类型
    id:唯一id方便引用
      -->
    <resultMap type="com.atguigu.mybatis.bean.Employee" id="MySimpleEmp">
        <!--指定主键列的封装规则
        id用来定义主键,会底层有优化;
        column:指定哪一列
        property:指定对应的javaBean属性
          -->
        <id column="id" property="id"/>
        <!-- result定义普通列封装规则 -->
        <result column="last_name" property="lastName"/>
        <!-- 其他不指定的列会自动封装:我们只要写resultMap就把全部的映射规则都写上。 -->
        <result column="email" property="email"/>
        <result column="gender" property="gender"/>
    </resultMap>

    <!-- resultMap:自定义结果集映射规则;  -->
    <!-- resultMap与resultType只能二选一  -->
    <!-- public Employee getEmpById(Integer id); -->
    <select id="getEmpById"  resultMap="MySimpleEmp">
        select * from tbl_employee where id=#{id}
    </select>

测试:

先把驼峰命名法关了<setting name="mapUnderscoreToCamelCase" value="false"/>,或者注释掉也可以

@Test
    public void test05() throws IOException{
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        SqlSession openSession = sqlSessionFactory.openSession();
        try{
            EmployeeMapperPlus mapper = openSession.getMapper(EmployeeMapperPlus.class);
            Employee empById = mapper.getEmpById(1);
            System.out.println(empById);
        }finally{
            openSession.close();
        }
    }

即使把驼峰命名关了还是可以按照我们自定义的规则封装成功的

总结

到此这篇关于Mybatis映射文件规则的文章就介绍到这了,更多相关Mybatis映射文件规则内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mybatis中映射文件(mapper)中的使用规则

    目录 一.增删改 1.增加 2.删除 3.更新 二.传入参数处理 1.单个参数 2.多个参数 3.参数中有Collection(List.Set) 类型或者是数组 4.参数封装成数据模型 5.parameterType 配置 参数 三.查询 1.模糊查询 2.#{}与${}的区别 3.返回属性为resultType 4.返回属性为resultMap 一.增删改 1.增加 <!-- 添加用户--> <insert id="saveUser" parameterType=

  • Mybatis映射文件规则实例详解

    目录 1.ORM概念 2.映射文件命名规则 3.Mybatis的两个一致 4.总结创建mybatis的步骤 补充:MyBatis_自定义结果映射规则 总结 在说明映射文件规则之前,先来回顾一下ORM相关概念. 1.ORM概念 ORM(Object Relationship Mapping)对象关系映射 对象:Java的实体类对象 关系:关系型数据库 映射:二者之间的对应关系 字段名和属性名要一一对应才可以,它们的名字要相同,底层调用的是反射机制 Java概念 数据库概念 属性 列,字段 类 表

  • 基于Spring + Spring MVC + Mybatis 高性能web构建实例详解

    一直想写这篇文章,前段时间痴迷于JavaScript.NodeJs.AngularJS,做了大量的研究,对前后端交互有了更深层次的认识. 今天抽个时间写这篇文章,我有预感,这将是一篇很详细的文章,详细的配置,详细的注释,看起来应该很容易懂. 用最合适的技术去实现,并不断追求最佳实践.这就是架构之道. 希望这篇文章能给你们带来一些帮助,同时希望你们可以为这个项目贡献你的想法. 源码地址:https://github.com/Eliteams/quick4j 点击打开 源码地址:https://gi

  • Mybatis分页插件的实例详解

    Mybatis分页插件的实例详解 1.前言: 我们知道,在MySQL中,分页的sql是使用limit来做,如果我们自己写sql,那分页肯定是没有任何问题的.但是一旦model多了起来,复杂了起来,我们很自然的想到使用mybatis的逆向工程来生成相应的po和mapper,但是同时也会带来弊端,比如这里的分页问题就不好解决了. 可能有人会说,我可以修改生成的文件,没错,这是可行的,但是一般我们通过逆向工程生成的文件,都不会去动它,所以这个时候,就需要使用分页插件来解决了. 如果你也在用Mybati

  • 对python遍历文件夹中的所有jpg文件的实例详解

    python发现文件夹下所有的jpg文件,并且安装文件排放的顺序输出 glob模块是最简单的模块之一,内容非常少.用它可以查找符合特定规则的文件路径名.跟使用windows下的文件搜索差不多.查找文件只用到三个匹配符:"*", "?", "[]"."*"匹配0个或多个字符:"?"匹配单个字符:"[]"匹配指定范围内的字符,如:[0-9]匹配数字. glob.glob 返回所有匹配的文件路

  • C语言文件复制实例详解

    C语言文件复制实例详解 文件复制,在Linux中,将生成的read.o 重新文件拷贝一份复制到ReadCopy.o中,并且更改ReadCopy.o文件的操作权限.使其能够正常运行. 实例代码: #include <stdio.h> int main(){ FILE *r_file = fopen ("read.o","rb"); FILE *w_file = fopen ("ReadCopy.o","w"); ch

  • Android local.properties 文件读取实例详解

    Android local.properties 文件读取实例详解 在Android Studio项目里面有个local.properties文件,这个文件可以放一些系统配置.比如:sdk路径.ndk路径. ndk.dir=D\:\\soft\\android-ndk-r10e sdk.dir=D\:\\soft\\SDKandroidStudio 当然我们也可以在local.properties放一些自定义的配置,比如签名文件: key.file=C\:\\work\\Key.jks keyA

  • IOS 基本文件操作实例详解

    IOS 基本文件操作实例详解 在iOS的App沙盒中,Documents和Library/Preferences都会被备份到iCloud,因此只适合放置一些记录文件,例如plist.数据库文件.缓存一般放置到Library/Caches,tmp文件夹会被系统随机清除,不适宜防止数据. [图片缓存的清除] 在使用SDWebImage时,图片被大量的缓存,有时需要获取缓存的大小以及清除缓存. 要获取缓存大小,使用SDImageCache单例的getSize方法拿到byte为单位的缓存大小,注意计算时

  • Vuejs 单文件组件实例详解

    在之前的实例中,我们都是通过 Vue.component 或者 components 属性的方式来定义组件,这种方式在很多中小规模的项目中还好,但在复杂的项目中,下面这些缺点就非常明显了: 字符串模板:缺乏高亮,书写麻烦,特别是 HTML 多行的时候,虽然可以将模板写在 html 文件中,但是侵入性太强,不利于组件解耦分离. 不支持CSS:意味着当 HTML 和 JavaScript 组件化时,CSS明显被遗漏了 没有构建步骤:限制只能使用 HTML 和 ES5 JavaScript,而不能使用

  • python爬虫智能翻页批量下载文件的实例详解

    python爬虫遇到爬取文件内容时,需要一页页的翻页爬取,这样很是麻烦,其实可以获取每个列表信息下的文件名和文件链接,让文件名和文件链接处理为列表,保存后下载,实现智能翻页批量下载文件,本文以以京客隆为例,批量下载文件,如财务资料,他的每一份报告都是一份pdf格式的文档.以此页面为目标,下载他每个分类的文件python爬虫实战之智能翻页批量下载文件. 1.引入库 import requests import pandas as pd from lxml import etree import r

  • PHP中TP5 上传文件的实例详解

    php 文件上传 效果图: 实现代码: application\index\controller\Index.php <?php namespace app\index\controller; use think\Controller; use think\Request; class Index extends Controller { //文件上传表单 public function index() { return $this->fetch(); } //文件上传提交 public fu

随机推荐