zoukankan      html  css  js  c++  java
  • Mybatis-入门

    mybatis的概述

    • mybatis是一个持久层框架,用java编写的。
    • 它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动,创建连接等繁杂过程
    • 它使用了ORM思想实现了结果集的封装。

    ORM

    • Object Relational Mappging 对象关系映射
    • 就是把数据库表和实体类及实体类的属性对应起来

    mybatis的环境搭建

    1. 创建maven工程并导入坐标

    <dependencies>
         <dependency>
             <groupId>org.mybatis</groupId>
             <artifactId>mybatis</artifactId>
             <version>3.4.5</version>
         </dependency>
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version>4.10</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <version>5.1.6</version>
             <scope>runtime</scope>
         </dependency>
         <dependency>
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
             <version>1.2.12</version>
         </dependency>
     </dependencies>
    

    2. 创建实体类和dao的接口

    3. 创建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>
        <!-- 配置 mybatis 的环境 -->
        <environments default="mysql">
            <!-- 配置 mysql 的环境 -->
            <environment id="mysql">
                <!-- 配置事务的类型 -->
                <transactionManager type="JDBC"></transactionManager>
                <!-- 配置连接数据库的信息:用的是数据源(连接池) -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/ee50"/>
                    <property name="username" value="root"/>
                    <property name="password" value="1234"/>
                </dataSource>
            </environment>
        </environments>
    <!-- 告知 mybatis 映射配置的位置 -->
    <mappers>
            <mapper resource="com/itheima/dao/UserMapper.xml"/>
            </mappers>
    </configuration>
    
    

    4. 创建映射配置文件

    • mybatis的映射配置文件位置必须和dao接口的包结构相同
    • 映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
    • 映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名
    <?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.itheima.dao.IUserDao">
        <!-- 配置查询所有操作 -->
        <select id="findAll" resultType="com.itheima.domain.User">
            select * from user
        </select>
    </mapper>
    

    5. 测试类

    //1.读取配置文件
    InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
    //2.创建 SqlSessionFactory 的构建者对象
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    //3.使用构建者创建工厂对象 SqlSessionFactory
    SqlSessionFactory factory = builder.build(in);
    //4.使用 SqlSessionFactory 生产 SqlSession 对象
    SqlSession session = factory.openSession();
    //5.使用 SqlSession 创建 dao 接口的代理对象
    IUserDao userDao = session.getMapper(IUserDao.class);
    //6.使用代理对象执行查询所有方法
    List<User> users = userDao.findAll();
    for(User user : users) {
        System.out.println(user);
    }
    //7.释放资源
    session.close();
    in.close();
    

    基于注解的入门案例

    1. 移除映射配置文件,在dao接口的方法上使用@Select注解,并且指定SQL语句
    2. 在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定

    Mybatis分析

    查询所有的分析

    入门案例分析

    自定义Mybatis分析

    基于 XML 的自定义 Mybatis 框架

    • 编写读取配置文件 Resources类
    • 编写 Mapper 类: 用于封装查询时的必要信息:要执行的 SQL 语句和实体类的全限定类名
    • 编写 Configuration 配置类:1.数据库信息 2.sql 的 map 集合
    • 编写构建者 SqlSessionFactory类
    • 编写 SqlSessionFactory 接口和DefaultSqlSessionFactory 实现类 #openSession
    • 编写 SqlSession 接口和 DefaultSqlSession 实现类 #getMapper
    • 编写用于创建 Dao 接口代理对象的类

    基于注解方式定义 Mybatis 框架

    • 自定义@Select 注解

    自定义mybatis开发流程图

  • 相关阅读:
    读书笔记 effective c++ Item 32 确保public继承建立“is-a”模型
    读书笔记 effective c++ Item 31 把文件之间的编译依赖降到最低
    读书笔记 effective c++ Item 30 理解内联的里里外外 (大师入场啦)
    程序猿开发语言投票
    读书笔记 effective c++ Item 29 为异常安全的代码而努力
    读书笔记 effective c++ Item 28 不要返回指向对象内部数据(internals)的句柄(handles)
    C++ 11和C++98相比有哪些新特性
    读书笔记 effective c++ Item 27 尽量少使用转型(casting)
    如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文
    如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文
  • 原文地址:https://www.cnblogs.com/mewcoder/p/10699037.html
Copyright © 2011-2022 走看看