人只会记住自己跋山涉水去见的人,不会记住跋山涉水去见自己的人|

小北以北

园龄:2年7个月粉丝:0关注:3

Mybatis基础

1. Mybatis概述

1.1 Mybatis概念

  • MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发

  • MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github

  • 官网https://mybatis.org/mybatis-3/zh/index.html

持久层:

  • 负责将数据到保存到数据库的那一层代码。

    以后开发我们会将操作数据库的Java代码作为持久层。而Mybatis就是对jdbc代码进行了封装。

  • JavaEE三层架构:表现层、业务层、持久层

框架:

  • 框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型
  • 在框架的基础之上构建软件编写更加高效、规范、通用、可扩展

1.2 JDBC 缺点

下面是 JDBC 代码,通过该代码分析都存在什么缺点:

img

  • 硬编码

    • 注册驱动、获取连接

      上图标1的代码有很多字符串,而这些是连接数据库的四个基本信息,以后如果要将Mysql数据库换成其他的关系型数据库的话,这四个地方都需要修改,如果放在此处就意味着要修改我们的源代码。

    • SQL语句

      上图标2的代码。如果表结构发生变化,SQL语句就要进行更改。这也不方便后期的维护。

  • 操作繁琐

    • 手动设置参数

    • 手动封装结果集

      上图的代码是对查询到的数据进行封装,而这部分代码是没有什么技术含量,而且特别耗费时间的。

1.3 Mybatis 优化

  • 硬编码可以配置到配置文件
  • 操作繁琐的地方mybatis都自动完成

img

下图是持久层框架的使用占比。

img

2. Mybatis快速入门

2.1 入门

需求:查询user表中所有的数据

  • 创建user表,添加数据

    create database mybatis;
    use mybatis;
    drop table if exists tb_user;
    create table tb_user(
    id int primary key auto_increment,
    username varchar(20),
    password varchar(20),
    gender char(1),
    addr varchar(30)
    );
    INSERT INTO tb_user VALUES (1, 'zhangsan', '123', '男', '北京');
    INSERT INTO tb_user VALUES (2, '李四', '234', '女', '天津');
    INSERT INTO tb_user VALUES (3, '王五', '11', '男', '西安');
  • 创建模块,导入坐标

    在创建好的模块中的 pom.xml 配置文件中添加依赖的坐标

    <dependencies>
    <!--mybatis 依赖-->
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.5</version>
    </dependency>
    <!--mysql 驱动-->
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.46</version>
    </dependency>
    <!--junit 单元测试-->
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13</version>
    <scope>test</scope>
    </dependency>
    <!-- 添加slf4j日志api -->
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.20</version>
    </dependency>
    <!-- 添加logback-classic依赖 -->
    <dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
    </dependency>
    <!-- 添加logback-core依赖 -->
    <dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.3</version>
    </dependency>
    </dependencies>

    注意:需要在项目的 resources 目录下创建logback的配置文件

  • 编写 MyBatis 核心配置文件 -- > 替换连接信息 解决硬编码问题

    在模块下的 resources 目录下创建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>
    <typeAliases>
    <package name="com.itheima.pojo"/>
    </typeAliases>
    <!--
    environments:配置数据库连接环境信息。可以配置多个environment,通过default属性切换不同的environment
    -->
    <environments default="development">
    <environment id="development">
    <transactionManager type="JDBC"/>
    <dataSource type="POOLED">
    <!--数据库连接信息-->
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
    <property name="username" value="root"/>
    <property name="password" value="1234"/>
    </dataSource>
    </environment>
    <environment id="test">
    <transactionManager type="JDBC"/>
    <dataSource type="POOLED">
    <!--数据库连接信息-->
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
    <property name="username" value="root"/>
    <property name="password" value="1234"/>
    </dataSource>
    </environment>
    </environments>
    <mappers>
    <!--加载sql映射文件-->
    <mapper resource="UserMapper.xml"/>
    </mappers>
    </configuration>
  • 编写 SQL 映射文件 --> 统一管理sql语句,解决硬编码问题

    在模块的 resources 目录下创建映射配置文件 UserMapper.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">
    <mapper namespace="test">
    <select id="selectAll" resultType="com.itheima.pojo.User">
    select * from tb_user;
    </select>
    </mapper>
  • 编码

    • com.itheima.pojo 包下创建 User类

      public class User {
      private int id;
      private String username;
      private String password;
      private String gender;
      private String addr;
      //省略了 setter 和 getter
      }
    • com.itheima 包下编写 MybatisDemo 测试类

      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
      List<User> users = sqlSession.selectList("test.selectAll"); //参数是一个字符串,该字符串必须是映射配置文件的namespace.id
      System.out.println(users);
      //4. 释放资源
      sqlSession.close();
      }
      }

2.2 解决SQL映射文件的警告提示:

在入门案例映射配置文件中存在报红的情况。问题如下:

img

  • 产生的原因:Idea和数据库没有建立连接,不识别表信息。但是大家一定要记住,它并不影响程序的执行。
  • 解决方式:在Idea中配置MySQL数据库连接。

IDEA中配置MySQL数据库连接

  • 点击IDEA右边框的 Database ,在展开的界面点击 + 选择 Data Source ,再选择 MySQL

img

在弹出的界面进行基本信息的填写

img

点击完成后就能看到如下界面

img

而此界面就和 navicat 工具一样可以进行数据库的操作。也可以编写SQL语句

img

img

本文作者:小北以北

本文链接:https://www.cnblogs.com/NorthFog/p/16929321.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   小北以北  阅读(17)  评论(0编辑  收藏  举报
吾心安处即吾乡。吾乡何处不可眠
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示