IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MyBatis的Dao层实现(动态代理) -> 正文阅读

[大数据]MyBatis的Dao层实现(动态代理)

MyBatis的Dao层实现

  1. 代理开发方式

    采用 Mybatis 的代理开发方式实现 DAO 层的开发,这种方式是我们后面进入企业的主流。

    Mapper 接口开发方法只需要程序员编写Mapper 接口(相当于Dao 接口),由Mybatis 框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。

    Mapper 接口开发需要遵循以下规范:

    1. Mapper.xml文件中的namespace与mapper接口的全限定名相同
    2. Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
    3. Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
    4. Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hGfxtfjx-1651994198724)(F:\Java(黑马2022)]\6、第3阶段—Java开发框架\3、SSM框架\笔记\image\image-20220508144050498.png)

    上面的4点将在下面的项目中体现出来

  2. 项目搭建

    数据库使用上一个test库里面的user

    1. 创建mybatis-Dao项目

    2. 导入核心的pox.xml依赖坐标

      <!--mysql驱动-->
      <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.29</version>
      </dependency>
      <!--mybatis-->
      <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
      <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.5.9</version>
      </dependency>
      <!--测试依赖坐标-->
      <!-- https://mvnrepository.com/artifact/junit/junit -->
      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.13.2</version>
          <scope>test</scope>
      </dependency>
      
    3. main文件下的创建com.zcl.domain包,并创建User实体类对于数据库的字段

      package com.zcl.domain;
      
      /**
       * 项目名称:MyBatis
       * 描述:对应数据User实体类
       *
       * @author zhong
       * @date 2022-05-08 7:43
       */
      public class User {
          private int id;
          private String username;
          private String password;
      
          public int getId() {
              return id;
          }
      
          public void setId(int id) {
              this.id = id;
          }
      
          public String getUsername() {
              return username;
          }
      
          public void setUsername(String username) {
              this.username = username;
          }
      
          public String getPassword() {
              return password;
          }
      
          public void setPassword(String password) {
              this.password = password;
          }
      
          @Override
          public String toString() {
              return "User{" +
                      "id=" + id +
                      ", username='" + username + '\'' +
                      ", password='" + password + '\'' +
                      '}';
          }
      }
      
      
    4. main文件下的创建com.zcl.dao包,并创建UserMapper接口,对接映射文件的命名空间namespace

      package com.zcl.dao;
      
      import com.zcl.domain.User;
      
      import java.io.IOException;
      import java.util.List;
      
      /**
       * 项目名称:MyBatis
       * 描述:mybatis的dao层接口
       *
       * @author zhong
       * @date 2022-05-08 11:58
       */
      public interface UserMapper {
          List<User> findAll();
          
          User findById(int id);
      }
      
      

      同包下创建impl并创建接口实现类UserMapperImpl,完成对对数据的查询和返回操作

      package com.zcl.dao.impl;
      
      import com.zcl.dao.UserMapper;
      import com.zcl.domain.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;
      
      /**
       * 项目名称:MyBatis
       * 描述:实现mybatis接口类
       *
       * @author zhong
       * @date 2022-05-08 11:59
       */
      public class UserMapperImpl implements UserMapper {
          @Override
          public List<User> findAll() {
              InputStream resourceAsStream = null;
              try {
                  resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
              } catch (IOException e) {
                  e.printStackTrace();
              }
              SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
              SqlSession sqlSession = build.openSession();
              UserMapper mapper = sqlSession.getMapper(UserMapper.class);
              List<User> all = mapper.findAll();
              return all;
          }
          
          @Override
          public User findById(int id) {
              InputStream resourceAsStream = null;
              try {
                  resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
              } catch (IOException e) {
                  e.printStackTrace();
              }
              SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
              SqlSession sqlSession = build.openSession();
              UserMapper mapper = sqlSession.getMapper(UserMapper.class);
              User all = mapper.findById(id);
              return all;
          }
      }
      
      

      代理开发方式与传统方式不同的地方在于:

      UserMapper mapper = sqlSession.getMapper(UserMapper.class);

      代替了原先直接指定namespace命名空间下的sql方法id

      直接调用mapper 里面的接口方法,就可以了

    5. main文件下的创建com.zcl.service包,并创建ServiceDemo模拟业务层获取dao查询返回的对象

      package com.zcl.service;
      
      import com.zcl.dao.impl.UserMapperImpl;
      import com.zcl.domain.User;
      
      import java.io.IOException;
      import java.util.List;
      
      /**
       * 项目名称:MyBatis
       * 描述:模拟业务层
       *
       * @author zhong
       * @date 2022-05-08 12:06
       */
      public class ServiceDemo {
          public static void main(String[] args) throws IOException {
              // 创建dao层对象
              UserMapperImpl userMapper = new UserMapperImpl();
              List<User> all = userMapper.findAll();
              System.out.println(all);
              User byId = userMapper.findById(1);
              System.out.println(byId);
          }
      }
      
      

      执行方法可以输出查询的内容

    6. resources文件下创建com/zcl/mapper包目录,并在里面创建UserMapper.xml配置文件编写sql语句

      <?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="com.zcl.dao.UserMapper">
          <!--编写查询sql语句-->
          <select id="findAll" resultType="user">
              select * from user
          </select>
          
          <!--根据id查询数据-->
          <select id="findById" resultType="user" parameterType="int">
              select * from user where id = #{id}
          </select>
      </mapper>
      

      namespace命名空间改为了com.zcl.dao.UserMapper对接dao层的UserMapper接口,mybatis会自动代理完成

      findAll:需要与接口的方法一致

      resultType:输出参数类型要与接口中的方法返回值类型一致

    7. resources文件下创建jdbc.properties文件,存放数据库的连接信息

      jdbc.driver=com.mysql.jdbc.Driver
      jdbc.url=jdbc:mysql:///test
      jdbc.username=root
      jdbc.password=1234
      
    8. resources文件下创建mybatis-config.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加载外部文件-->
          <properties resource="jdbc.properties"></properties>
      
          <!--自定义别名,注意typeAliases存放的顺序-->
          <typeAliases>
              <typeAlias type="com.zcl.domain.User" alias="user"/>
          </typeAliases>
      
          <environments default="development">
              <!--连接数据源-->
              <environment id="development">
                  <!--使用的事务管理器-->
                  <transactionManager type="JDBC"/>
                  <!--连接数据库信息-->
                  <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>
          </environments>
      
          <!--加载映射文件-->
          <mappers>
              <mapper resource="com/zcl/mapper/UserMapper.xml"/>
          </mappers>
      </configuration>
      
  3. 知识小结

    MyBatis的Dao层实现的两种方式:

    1. 手动对Dao进行实现:传统开发方式

    2. 代理方式对Dao进行实现

      UserMapper mapper = sqlSession.getMapper(UserMapper.class);

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 12:46:25  更:2022-05-09 12:48:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:13:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码