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 -> 正文阅读

[大数据]Mybatis

Mybatis(ibatis)

什么是Mybatis

  • MyBatis 是一款优秀的持久层框架
  • 它支持自定义 SQL、存储过程以及高级映射。
  • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
  • MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

依赖和源码

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version>
</dependency>

Mybatis源码中文注释
Mybatis源码github
Mybatis jar包

第一个Mybatis项目

官网入门指导

  1. 导入依赖
    junit(用于测试),mysql-connector-java(sql驱动),mybatis

  2. 封装实体类(pojo)

  3. 封装工具类
    每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。有了 SqlSessionFactory,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句

SqlSessionFactoryBuilder----》SqlSessionFactory-----》SqlSession-----》sql

public class MybatisUtil {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}
  1. 其中需要mybatis的配置文件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>
<!--    环境,可以通过default选择具体环境-->
    <environments default="development">
<!--        id :给环境命名,便于区分和选择-->
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
<!--                sql驱动-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<!--                xml中的 &amp; 转义后等于 & -->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
<!--    注意每写Mapper.xml都要注册-->
<!--    当你没有注册时会报一个错
		org.apache.ibatis.binding.BindingException: 
		Type interface com.czc.dao.UserMaps is not known to the MapperRegistry.-->
    <mappers>
        <mapper resource="com/czc/dao/UserMap.xml"/>
    </mappers>
</configuration>
  1. 编写接口
  2. 编写Mapper.xml
<?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 : 绑定接口-->
<!--从com开始写-->
<!--注意这里用 . 隔开不是 / -->
<mapper namespace="com.czc.dao.UserMaps">
<!--    注意resultType不能只写User,要写全路径-->
<!--	id = 接口中的方法名-->
    <select id="getUserList" resultType="com.czc.pojo.User">
        select * from `user`
    </select>
</mapper>
  1. 测试
public class UserMapText {
    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        
        UserMaps mapper = sqlSession.getMapper(UserMaps.class);
        
        List<User> userList = mapper.getUserList();
        for (User user : userList) {
            System.out.println(user);
        }
        
        sqlSession.close();
    }
}

注意

  • 每写一个Mapper.xml都要在mybatis的配置文件(mybatis-config.xml)中注册
    否则就会报错 org.apache.ibatis.binding.BindingException: Type interface com.czc.dao.UserMaps is not known to the MapperRegistry
  • resources目录下的东西和java目录下的东西不能互相访问
    即无法导出配置文件的解决
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
  • 各文件路径格式
    从最外层的自建包开始写
    若访问文件,则以 / 隔开,如 com/czc/dao/UserMapper.xml
    若访问 class类或接口,则以 . 隔开,如 com.czc.dao.UserMappers

  • Mapper.xml 编写
    mapper 中 namespace 所绑定的接口,
    select 中 id 对应的方法名,resultType 对应的返回值类型

基础CRUD

  • namespace需要绑定接口
  • select / insert / update / delete
    ---------------属性----------------
    id:对应接口中的方法名
    resultType:返回值类型
    parameterType:参数类型(对应方法中传入的参数类型)可以直接通过#{}来取传入的形参
    若传入的形参不是基本类型,则可以直接取其中的属性,如传入user对象,#{name}可以取到user.name属性

注意执行增删改操作时必须要提交事务

	sqlSession.commit();

万能的Map集合

  • Map传递参数,直接在sql中取出key即可!【parameterType=“map”】
// 传入Map
Map<String, Object> map = new HashMap<String, Object>();
map.put("userId",214);

// 取到传入的参数
#{userId} // 通过key取value值
  • 对象传递参数,直接在sql中取对象的属性即可! 【parameterType=“Object”】
  • 只有一个基本类型参数的情况下,可以直接在sql中取到!
  • 多个参数用Map,或者注解!

小进阶版CRUD

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:14:07  更:2021-09-12 13:15:31 
 
开发: 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 20:52:40-

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