首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Mapper代理开发

Mapper代理开发

作者头像
GeekLiHua
发布2025-01-21 15:24:35
发布2025-01-21 15:24:35
2540
举报
文章被收录于专栏:JavaJava

Mapper代理开发

概述

Mybatis 官网推荐使用 Mapper 代理的方式进行开发,他们的区别如下。

下面是实用Mybatis开发与使用Mapper代理,可以看出在第二张图,也就是Mapper代理的开发方式里面,没有了第一种的名字空间的引入,这可以大大的提高代码的维护效率。

具体操作

  • 文件结构
  • UserMapper.xml
  • resources 下创建 com/study/mapper 目录,并在该目录下创建 UserMapper.xml 映射配置文件。

配置内容

代码语言:javascript
复制
<?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">

<!--
    namespace:名称空间
-->

<mapper namespace="com.itheima.mapper.BrandMapper">

    <!--
        数据库表的字段名称  和  实体类的属性名称 不一样,则不能自动封装数据
            * 起别名:对不一样的列名起别名,让别名和实体类的属性名一样
                * 缺点:每次查询都要定义一次别名
                    * sql片段
                        * 缺点:不灵活
            * resultMap:
                1. 定义<resultMap>标签
                2. 在<select>标签中,使用resultMap属性替换 resultType属性

    -->
    <!--
        id:唯一标识
        type:映射的类型,支持别名
    -->
    <resultMap id="brandResultMap" type="brand">
        <!--
            id:完成主键字段的映射
                column:表的列名
                property:实体类的属性名
            result:完成一般字段的映射
                column:表的列名
                property:实体类的属性名
        -->
        <result column="brand_name" property="brandName"/>
        <result column="company_name" property="companyName"/>
    </resultMap>



    <select id="selectAll" resultMap="brandResultMap">
        select *
        from tb_brand;
    </select>


</mapper>

mybatis-config.xml配置文件内容

代码语言:javascript
复制
<?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>

    <typeAliases>
        <package name="com.study.pojo"/>
    </typeAliases>

    <!--
    environments:配置数据库连接环境信息。可以配置多个environment,通过default属性切换不同的environment
    -->
    <environments default="database1">
<!--        这里需要注意的是 environments标签中可以存在多个environment
            代表多个数据库环境,然后default就是一个默认值,我这里把默认值设置成了
            第一个数据库database1
-->
        <environment id="database1">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--数据库连接信息-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8&amp;useOldAliasMetadataBehavior=true"/>
                <property name="username" value="root"/>
                <property name="password" value="12345"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!--加载sql映射文件-->
<!--         <mapper resource="UserMapper.xml"/>-->
        <!--Mapper代理方式-->
        <package name="com.study.mapper"/>
    </mappers>
</configuration>
  • com.study.mapper 包下创建 UserMapper接口,代码如下:
代码语言:javascript
复制
package com.study.mapper;

import com.study.pojo.User;

import java.util.List;

public interface UserMapper {
   List<User> selectAll();
   User selectById(int id);
}
  • 创建测试类
代码语言:javascript
复制
import com.study.mapper.UserMapper;
import com.study.pojo.User;
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.IOException;
import java.io.InputStream;
import java.util.List;

public class MyBatisDemo {
   public static void main(String[] args) throws IOException {
       //1. 加载mybatis的核心配置文件,获取 SqlSessionFactory
       String resource = "mybatis-config.xml";
       InputStream inputStream = Resources.getResourceAsStream(resource);
       SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
       //2. 获取SqlSession对象,用它来执行sql
       SqlSession sqlSession = sqlSessionFactory.openSession();
       //3. 执行sql
       //3.1 获取UserMapper接口的代理对象
       UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
       List<User> users = userMapper.selectAll();
       System.out.println(users);
       //4. 释放资源
       sqlSession.close();
   }
}

运行结果:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mapper代理开发
    • 概述
    • 具体操作
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档