zoukankan      html  css  js  c++  java
  • Java框架之Mybatis

    Mybatis系列教材 (一)- 基础 - 入门教程


    平时我们都用JDBC访问数据库,除了需要自己写SQL之外,还必须操作Connection, Statement, ResultSet 这些其实只是手段的辅助类。 不仅如此,访问不同的表,还会写很多雷同的代码,显得繁琐和枯燥。

    那么用了Mybatis之后,只需要自己提供SQL语句,其他的工作,诸如建立连接,Statement, JDBC相关异常处理等等都交给Mybatis去做了,那些重复性的工作Mybatis也给做掉了,我们只需要关注在增删改查等操作层面上,而把技术细节都封装在了我们看不见的地方。

    必读: 基于框架的程序要成功运行,对于JAR包的版本,配置文件的正确性有着苛刻的要求,任何一个地方出错了,都会导致框架程序运行失败。 如果你是第一次学习本框架,务必严格按照教程的指导,完全模仿操作,直到成功看到运行效果。 第一次成功之后,信心,思路都会有较好的铺垫,然后再根据自己的疑惑,在“成功”的代码上做原本想做的改动和调整,这样可以大大节约学习的时间,提高效率,切勿一来就擅自改动,给自己的学习制造障碍
    步骤1:学习之前先看效果
    步骤2:创建数据库
    步骤3:创建表
    步骤4:导入数据
    步骤5:先运行,看到效果,再学习
    步骤6:模仿和排错
    步骤7:创建项目
    步骤8:导入jar包
    步骤9:创建实体类
    步骤10:配置文件mybatis-config.xml
    步骤11:配置文件Category.xml
    步骤12:测试类TestMybatis
    步骤13:基本原理图
    步骤14:可运行的项目
    步骤15:练习
    步骤 1 : 学习之前先看效果
    这两条数据就是通过mybatis从数据库中查询出来的
    学习之前先看效果
    步骤 2 : 创建数据库
    首先创建数据库 how2java
    如果没有安装数据库,请参考 安装mysql-server
    create database how2java
    步骤 3 : 创建表
    接着创建表category_
    USE how2java;
     
    CREATE TABLE category_ (
      id int(11) NOT NULL AUTO_INCREMENT,
      name varchar(32) DEFAULT NULL,
      PRIMARY KEY (id)
    ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    步骤 4 : 导入数据
    USE how2java;
    INSERT INTO category_ VALUES (null,'category1');
    INSERT INTO category_ VALUES (null,'category2');
    步骤 5 : 先运行,看到效果,再学习
    先下载下载区(点击进入)的可运行项目,配置运行起来,确认可用之后,再学习做了哪些步骤以达到这样的效果。
    步骤 6 : 模仿和排错
    在确保可运行项目能够正确无误地运行之后,再严格照着教程的步骤,对代码模仿一遍。
    模仿过程难免代码有出入,导致无法得到期望的运行结果,此时此刻通过比较正确答案 ( 可运行项目 ) 和自己的代码,来定位问题所在。
    采用这种方式,学习有效果,排错有效率,可以较为明显地提升学习速度,跨过学习路上的各个槛。

    推荐使用diffmerge软件,进行文件夹比较。把你自己做的项目文件夹,和我的可运行项目文件夹进行比较。
    这个软件很牛逼的,可以知道文件夹里哪两个文件不对,并且很明显地标记出来
    这里提供了绿色安装和使用教程:diffmerge 下载和使用教程
    步骤 7 : 创建项目
    通过ecipse创建java project: mybatis
    项目目录必须是 e:projectmybatis
    因为后续的学习都是基于这个位置,以及在右上方下载的可运行项目中的jar包依赖位置也是这里,所以请务必使用这个项目目录,有助于在使用本教程的过程中提高相当的学习效率。
    用其他项目位置反而会带来不必要的困扰
    创建项目
    步骤 8 : 导入jar包
    本项目用到了两个jar包,在下载区(点击进入)的lib.rar中下载。
    下载解压后,在项目目录e:/project/mybatis下新建目录lib,并复制过来
    然后通过ecipse在mybatis的项目上导入这两个jar包
    导入jar包
    步骤 9 : 创建实体类
    准备实体类Category,用于映射表category_
    package com.how2java.pojo;
     
    public class Category {
        private int id;
        private String name;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
         
    }
    步骤 10 : 配置文件mybatis-config.xml
    在src目录下创建mybatis的主配置文件mybatis-config.xml (相当于hibernate.cfg.xml,如果没有hibernate基础请忽略本句)。
    其作用主要是提供连接数据库用的驱动,数据库名称,编码方式,账号密码
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8"/>
    <property name="username" value="root"/>
    <property name="password" value="admin"/>


    以及别名,自动扫描com.how2java.pojo下的类型,使得在后续配置文件Category.xml中使用resultType的时候,可以直接使用Category,而不必写全com.how2java.pojo.Category
    <typeAliases>
        <package name="com.how2java.pojo"/>
    </typeAliases>

    映射Category.xml
    <mappers>
        <mapper resource="com/how2java/pojo/Category.xml"/>
    </mappers>
    <?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.how2java.pojo"/>
        </typeAliases>
        <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://localhost:3306/how2java?characterEncoding=UTF-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="admin"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="com/how2java/pojo/Category.xml"/>
        </mappers>
    </configuration>
    步骤 11 : 配置文件Category.xml
    在包com.how2java.pojo下,新建文件Category.xml

    namespace="com.how2java.pojo"

    表示命名空间是com.how2java.pojo,在后续调用sql语句的时候,会用到它
    里面定义了一条sql语句
    select * from   category_

    这条sql语句用id: listCategory 进行标示以供后续代码调用。resultType="Category" 表示返回的数据和Category关联起来,这里本应该使用的是 com.how2java.pojo.Category, 但是因为上一步配置了别名,所以直接使用Category就行了
    <?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.how2java.pojo">
            <select id="listCategory" resultType="Category">
                select * from   category_     
            </select>
        </mapper>
    步骤 12 : 测试类TestMybatis
    运行并观察到如图所示的结果。
    根据配置文件mybatis-config.xml得到sqlSessionFactory 。
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    然后再根据sqlSessionFactory 得到session
    SqlSession session=sqlSessionFactory.openSession();

    最后通过session的selectList方法,调用sql语句listCategory。listCategory这个就是在配置文件Category.xml中那条sql语句设置的id。
    执行完毕之后,得到一个Category集合,遍历即可看到数据。
    List<Category> cs = session.selectList("listCategory");
    for (Category c : cs) {
        System.out.println(c.getName());
    }


    注: session.selectList("listCategory"); 也可以写成 session.selectList("com.how2java.pojo.listCategory"); 效果一样。 但是我嫌弃其臃肿,不愿采用这种方式
    测试类TestMybatis
    package com.how2java;
     
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
     
    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 com.how2java.pojo.Category;
     
    public class TestMybatis {
     
        public static void main(String[] args) throws IOException {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session=sqlSessionFactory.openSession();
             
            List<Category> cs=session.selectList("listCategory");
            for (Category c : cs) {
                System.out.println(c.getName());
            }
             
        }
    }
    步骤 13 : 基本原理图
    1. 应用程序找Mybatis要数据
    2. mybatis从数据库中找来数据
    2.1 通过mybatis-config.xml 定位哪个数据库
    2.2 通过Category.xml执行对应的select语句
    2.3 基于Category.xml把返回的数据库记录封装在Category对象中
    2.4 把多个Category对象装在一个Category集合中
    3. 返回一个Category集合
    基本原理图
    步骤 14 : 可运行的项目
    如果老是搞不出来,就使用下载区(点击进入)的已经配置好的可运行项目搞一把。 然后比对自己哪一部分不一样,定位问题所在。
    步骤 15 : 练习
    参考Category,做一个Product类的mybatis查询。 Product类有三个属性:
    int id
    String name
    float price

    更多Mybatis学习内容: https://how2j.cn/k/mybatis/mybatis-tutorial/1087.html?p=144217
  • 相关阅读:
    CODING x 百果园 _ 水果零售龙头迈出 DevOps 体系建设第一步
    Nocalhost 亮相 CD Foundation 国内首届 Meetup,Keith Chan 将出席致辞
    做云原生时代标准化工具,实现高效云上研发工作流
    打造数字化软件工厂 —— 一站式 DevOps 平台全景解读
    WePack —— 助力企业渐进式 DevOps 转型
    CODING Compass —— 打造行云流水般的软件工厂
    Nocalhost —— 让云原生开发回归原始而又简单
    CODING 代码资产安全系列之 —— 构建全链路安全能力,守护代码资产安全
    Nocalhost:云原生开发新体验
    使用 Nocalhost 开发 Kubernetes 中的 APISIX Ingress Controller
  • 原文地址:https://www.cnblogs.com/GGLoner/p/12693457.html
Copyright © 2011-2022 走看看