zoukankan      html  css  js  c++  java
  • Mybatis-01

    Mybatis

    1. 简介

      1、什么是Mybatis?

        Mybatis 是一款优秀的持久层框架,它支持自定义sql、存储过程以及高级映射。(它类似于JDBC,但较JDBC方便)

        (持久层:将业务数据存储到磁盘,也具备长期存储能力,只要磁盘不损坏,如果在断电情况下,重启系统仍然可以读取数据)

      2、Mybatis的特点

      • 简单易学

      • 灵活

      • 解除sql与程序代码的耦合

      • 提供映射标签,支持对象与数据库的orm字段关系映射

      • 提供对象关系映射标签,支持对象关系组建维护

      • 提供xml标签,支持编写动态sql

    2.第一个Mybatis程序

      在搭建第一个Mybatis程序前,我们先做一些准备工作

    1. 首先我们需要了解并学习它的文档:https://mybatis.org/mybatis-3/zh/index.html
    2. 接着我们需要添加它的Maven依赖
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>x.x.x</version>
    </dependency>

      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>
      <environments default="development">
        <environment id="development">
          <transactionManager type="JDBC"/>
          <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>
      <mappers>
        <mapper resource=""/>
      </mappers>
    </configuration>

      接下来,我们开始编写第一个Mybatis程序(为方便,我们过滤了service层)

    1、添加maven依赖

        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
                <scope>test</scope>
            </dependency>
    
            <!--mysql驱动-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.15</version>
            </dependency>
    
            <!-- lombok包 -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.12</version>
                <scope>provided</scope>
            </dependency>
    
            <!-- mybatis -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.4</version>
            </dependency>
    
        </dependencies>

    2、配置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>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql:///customs?useSSL=true&amp;useUnicode=true&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=UTF-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="1234"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="com/charles/dao/UserMapper.xml"/>
        </mappers>
    </configuration>

    3、添加数据库中的实体类

    package com.charles.pojo;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @AllArgsConstructor
    @NoArgsConstructor
    @Data
    public class UserInfo {
        private int id;
        private String username;
        private String password;
        private String perms;
    
    }

    4、编写dao接口

    package com.charles.dao;
    
    import com.charles.pojo.UserInfo;
    
    import java.util.List;
    
    public interface UserMapper {
    
        // 查询所有用户
        List<UserInfo> queryAll();
    
    }

    5、 编写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.charles.dao.UserMapper">
      <!-- id是namespace中的方法名 resultType是SQL语句执行的返回值 --> <select id="queryAll" resultType="com.charles.pojo.UserInfo"> select * from userinfo; </select> </mapper>

    6、要编写一个Utils来获取Mybatis的工厂

    package com.charles.utils;

    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;

    public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;

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

    public static SqlSession getSession(){
    return sqlSessionFactory.openSession();
    }
    }

    7、 测试

    package com.charles.dao;
    
    import com.charles.pojo.UserInfo;
    import com.charles.utils.MybatisUtils;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    
    import java.util.List;
    
    public class UserInfoDaoTest {
    
        @Test
        public void test(){
            SqlSession session = MybatisUtils.getSession();
            UserMapper mapper = session.getMapper(UserMapper.class);
            List<UserInfo> userInfos = mapper.queryAll();
    
            for (UserInfo user : userInfos){
                System.out.println(user);
            }
    
            // 使用后需要及时关闭,跟JDBC差不多.
            session.close();
        }
    
    }

    结果展示:与数据库一致

     

     

  • 相关阅读:
    Python中获取字典中最值对应的键
    Python中if __name__ == "__main__": 的作用
    Python中将打印输出导向日志文件
    python函数参数前面单星号(*)和双星号(**)的区别
    Python中用datetime包进行对时间的一些操作
    python中scipy.misc.logsumexp函数的运用场景
    Python中在脚本中引用其他文件函数的方法
    KS-检验(Kolmogorov-Smirnov test) -- 检验数据是否符合某种分布
    R如何检验类别变量(nominal variable)与其他变量之间的相关性
    机器学习-贝叶斯算法
  • 原文地址:https://www.cnblogs.com/Charles-H/p/Mybatis-01.html
Copyright © 2011-2022 走看看