【Java】Mybatis在Idea上的应用

  一、简介

  mybatis框架:是sql映射框架
  1)sql mapper:sql映射
    可以把数据库表中的一行数据,映射为一个javat对象。
    一行数据可以看做是一个java对象,操作这个对象,就相当于操作表中的数据
  2)Data Access Objects(DAOs):数据访问
    对数据库执行增删改查。

 

  mybatis提供了哪些功能:
  1)提供了创建Connection,Statement,ResultSet的能力,不用开发人员创建这个对象了
  2)提供了执行sql语句的能力,不用你执行sql
  3)提供了循环sql,把sql的结果转为java对象,List集合的能力
  4)提供了关闭资源的能力,不用你关闭Connection,Statement,ResultSet

  二、知识总结

  mybatis是一个映射sql的框架,提供了数据库的操作能力。增强的JDBC,使用mybatis让开发人员集中精神写sql就可以了,不必关心Connection,Statement,ResultSet的创建、销毁。

  2.1、Mybatis使用步骤

  1)新建Student表

  2)加入maven的mybatis依赖,mysql驱动的依赖

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.test</groupId>
  <artifactId>mybatisDemo</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>mybatisDemo</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!-- 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>8.0.21</version>
    </dependency>
  </dependencies>

  <build>
    <resources>
      <resource>
        <directory>src/main/java</directory> <!-- 所在的目录 -->
        <includes><!-- 包括目录下的.properties,.xml 文件都会扫描到 -->
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>
</project>

3)创建实体类,Student -- 保存表中的一行数据

package com.test.domain;

public class Student {

    private Integer userId;
    private String nickname;
    private String phone;
    private String gender;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Student{" +
                "userId=" + userId +
                ", nickname='" + nickname + '\'' +
                ", phone='" + phone + '\'' +
                ", gender='" + gender + '\'' +
                '}';
    }
}

4)创建持久层的Dao接口,定义操作数据库的方法

package com.test.dao;

import com.test.domain.Student;

import java.util.List;

public interface StudentDao {

    public List<Student> selectStudents();
}

5)创建一个mybatis使用的配置文件

叫做sql映射文件:写sql语句的。一般一个表一个sql映射文件
这个文件叫xml文件
5.1 写在接口所在目录。
5.2 文件名称和接口保持一致。

<?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.test.dao.StudentDao">
    <!--
        select:表示查询操作
        id:你要执行的sql语句的唯一标识,mybatis会使用这个id的值来找到要执行的sql语句
            可以自定义,但要求你使用接口中的方法名称。
        resultType:标识结果类型的,是sql语句执行后得到ResultSet,遍历这个ResultSet得到java对象的类型。
             值写的是类型的全限定名称
    -->
    <select id="selectStudents" resultType="com.test.domain.Student">
        select userId,nickname,phone,gender from user_table
    </select>
</mapper>

        <!--
            sql映射文件:写sql语句的,mybatis会执行这些sql
            1.指定约束文件
                <!DOCTYPE mapper
                    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
                mybatis-3-mapper.dtd 是约束文件的名称,扩展名是dtd的。

            2.约束文件的作用:限制、检查在当前文件中出现的标签,属性必须符合mybatis的要求。

            3.mapper 是当前文件的根标签,必须的。
                namesapce:叫做命名空间,唯一值,可以是自定义的字符串。
                            要求你使用dao接口的全限定名称
            4.在当前文件中,可以使用特定的标签,标识数据库的特定操作。
               <select>:标识查询
               <update>:表示更新数据库的操作,就是在<update>标签中,写的是update sql语句
               <insert>:表示插入,写的是insert 语句
               <delete>:标识删除,执行的是delete语句
        -->

6)创建mybatis的主配置文件

一个项目就一个主配置文件
主配置文件提供了数据库的连接信息和sql映射文件的位置信息。

<?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:必须和某个enviroment的id值一样。
    -->
    <environments default="mydev">
        <!--
            enviroment:一个数据库的配置,环境
            id:一个唯一值,自定义,标识环境的名称
        -->
        <environment id="mydev">
            <!--
                transactionManager:mybatis的事务类型
                type:JDBC(表示使用jdbc的connection对象的commit,rollback做事务处理)
            -->
            <transactionManager type="JDBC"/>
            <!--
                datasource:表示数据源,连接数据库
                type:标识数据源的类型,POOLE表示连接池的
            -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/BullMane"/>
                <property name="username" value="root"/>
                <property name="password" value="root123456"/>
            </dataSource>
        </environment>

        <!--表示线上的数据库,是项目真实使用的库-->
        <environment id="online">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/BullMane"/>
                <property name="username" value="root"/>
                <property name="password" value="root123456"/>
            </dataSource>
        </environment>
    </environments>

    <!-- sql mapper(sql映射文件)的位置 -->
    <mappers>
        <!-- 一个mapper标签指定一个文件的位置
                从类路径开始的路径信息。target/classes(类路径)
         -->
        <mapper resource="com/test/dao/StudentDao.xml"/>

        <!--        <mapper resource="org/example/dao/SchoolDao.xml"/>-->
    </mappers>
</configuration>

        <!--
            mybatis的主配置文件:定义了数据库的配置信息,sql映射文件的位置
            1.configureation根标签

        -->

  7)应用mybatis在程序中

import com.test.domain.Student;
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;
import java.util.List;

public class MyApp {
    public static void main(String[] args) throws IOException {

        //访问mybatis读取student数据

        //1.定义mybatis主配置文件的名称,从类路径的根开始(target/classes)
        String config = "mybatis.xml";
        //2.读取这个config表示的文件
        InputStream in = Resources.getResourceAsStream(config);

        //3.创建SelSessionFactoryBuilder对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //4.创建SqlSessionFactory对象
        SqlSessionFactory factory = builder.build(in);
        //5.获取SqlSession对象,从SqlSessionFactory中获取SqlSession
        SqlSession sqlSession = factory.openSession();
        //6.指定要执行的sql语句的标识。sql映射文件中的namespace+"."+标签的id值
        String sqlId = "com.test.dao.StudentDao" + "." + "selectStudents";
        //7.执行sql语句,通过sqlId找到语句
        List<Student> studentList = sqlSession.selectList(sqlId);

        studentList.forEach(stu -> System.out.println(stu));

        sqlSession.close();
    }
}

  8)运行效果图

 

posted @ 2021-07-20 17:11  Mr·Xu  阅读(213)  评论(0编辑  收藏  举报