框架概述和MyBatis环境搭建

发布时间:2024年01月22日

学习视频:1001 框架概述_哔哩哔哩_bilibili

目录

框架概述?

1.1为什么要学

?1.2框架的优点

1.3 当前主流框架

? ? ? ? Spring框架

? ? ? ? Spring MVC框架

? ? ? ? MyBatis框架

?编辑

? ? ? ? Spring Boot框架

? ? ? ? Spring? ?Cloud框架

1.4 传统JDBC的劣势

MyBatis?

2.1 MyBatis概述

? ? ? ? ORM框架工作原理

? ? ? ? 解决JDBC编程劣势

2.2 MyBatis环境搭建

pom.xml?

db.properties

mybatis-config.xml

?2.3 MyBatis入门程序

创建User实体类

UserMapper.xml 实现sql语句和java对象之间的映射

测试类

2.4 MyBatis的工作原理

8个步骤


框架概述?

1.1为什么要学


?1.2框架的优点


1.3 当前主流框架

? ? ? ? Spring框架

? ? ? ? Spring MVC框架

? ? ? ? MyBatis框架

? ? ? ? Spring Boot框架

? ? ? ? Spring? ?Cloud框架


1.4 传统JDBC的劣势


MyBatis?

2.1 MyBatis概述

? ? ? ? ORM框架工作原理

? ? ? ? 解决JDBC编程劣势


2.2 MyBatis环境搭建

<!-- 只展示了其中一个依赖-- >
<dependencies>
     <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.11</version>
    </dependency>
...
</dependencies>

create database mybatis;

mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&
characterEncoding=utf8&useUnicode=true&useSSL=false
mysql.username=root
mysql.password=root

<configuration><properties resource="db.properties"/>
<environments default="development">
<environment id="development">
        <transactionManager type="JDBC"/>
         <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}" />
                <property name="url" value="${mysql.url}" />
                <property name="username" value="${mysql.username}" />
                <property name="password" value="${mysql.password}" />
         </dataSource>
    </environment></environments>
</configuration>

pom.xml?

<?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>org.example</groupId>
    <artifactId>mybatistest</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
            <scope>runtime</scope>
        </dependency>

    </dependencies>

</project

db.properties

mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
mysql.username=root
mysql.password=root

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" >
<!--配置mybatis环境-->
<configuration>
    <!--引入外部db.properties-->
    <properties resource="db.properties"></properties>

    <!--配置连接使用的相关参数
          default为默认使用的环境:development 测试环境
                                product     生产环境
      -->
    <environments default="development">
        <!--测试环境-->
        <environment id="development">
            <!--事务管理类型:指定事务管理的方式 JDBC-->
            <transactionManager type="JDBC"/>
            <!--数据库连接相关配置,动态获取config.properties文件里的内容-->
            <!--数据源类型:POOLED 表示支持JDBC数据源连接池
                            UNPOOLED 表示不支持数据源连接池
                            JNDI 表示支持外部数据源连接池
              -->
            <dataSource type="POOLED">
                <!--此处使用的是MySQL数据库,使用Oracle数据库时需要修改,仔细检查各项参数是否正确,里面配置了时区、编码方式、SSL,用以防止中文查询乱码,导致查询结果为null及SSL警告等问题-->
                <property name="driver" value="${mysql.driver}"/>
                <property name="url"
                          value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!--配置xxxMapper.xml文件的位置-->
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>

</configuration>


?2.3 MyBatis入门程序

use mybatis;
create table users(
    uid int primary key auto_increment,
    uname varchar(20) not null,
    uage int not null
);
insert into users(uid,uname,uage) values(null,'张三',20),(null,'李四',18);

package com.itheima.pojo;
public class User {
    private int uid;                  // 用户id
    private String uname;      // 用户姓名
    private int uage;              // 用户年龄
    // 省略getter/setter方法
   …
}

<mapper namespace="com.itheima.pojo.User">
    <!--id ="接口中的方法名"parameterType="传入的参数类型"
  resultType = "返回实体类对象,使用包.类名"-->
<select id="findById" parameterType="int" 
  	resultType="com.itheima.pojo.User"> 
 	select * from users where uid = #{id}
</select>
</mapper>

<!– mapping文件路径配置-->
<mappers>
    <mapper resource="mapper/UserMapper.xml"/>
</mappers>

? ? ? ? 如果一个项目有多个映射文件,则mybatis-config.xml核心配置文件中需要在<mappers>元素下配置多个<mapper>元素指定映射文件的路径。

public class UserTest { 
     public void userFindByIdTest() {
          String resources = "mybatis-config.xml"; Reader reader=null;
          try { reader= Resources.getResourceAsReader(resources);
          } catch (IOException e) { e.printStackTrace();}
     SqlSessionFactory sqlMapper=new 	SqlSessionFactoryBuilder().build(reader);
     SqlSession session=sqlMapper.openSession();
     User user=session.selectOne("findById",1);
     System.out.println(user.getUname());
     session.close();}} 

创建User实体类

package com.it.pojo;

public class User {
    private int uid;
    private String uname;
    private int uage;

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public int getUage() {
        return uage;
    }

    public void setUage(int uage) {
        this.uage = uage;
    }

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", uname='" + uname + '\'' +
                ", uage=" + uage +
                '}';
    }




}

UserMapper.xml 实现sql语句和java对象之间的映射

<?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为映射的根节点,用来管理DAO接口
      namespace指定DAO接口的完整类名,表示mapper配置文件管理哪个DAO接口(包.接口名)
      mybatis会依据这个接口动态创建一个实现类去实现这个接口,而这个实现类是一个Mapper对象
   -->
<mapper namespace="com.it.pojo.User">
    <!--
          id = "接口中的方法名"
          parameterType = "接口中传入方法的参数类型"
          resultType = "返回实体类对象:包.类名"  处理结果集 自动封装
          注意:sql语句后不要出现";"号
              查询:select标签
              增加:insert标签
              修改:update标签
              删除:delete标签
      -->
    <select id="findById"
        parameterType="int"
        resultType="com.it.pojo.User">
    select * from users where uid=#{id}

    </select>

    
</mapper>

测试类

package com.it.test;

import com.it.pojo.User;
import jdk.management.resource.ResourceRequest;
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 org.junit.Test;


import java.io.InputStream;

public class UserTest01 {
        @Test
    public void findById() throws Exception
        {
            //1.获取核心配置文件
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            //2.创建sqlSessionFactory工厂对象
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);


            //3.创建sqlSession对象
            SqlSession  sqlSession=sqlSessionFactory.openSession();

            //4.执行sql语句 sql语句唯一标识:namespace.statementId
            User user=sqlSession.selectOne("com.it.pojo.User.findById",1);
            System.out.println(user);
            //5.释放资源
            sqlSession.close();

        }

}


2.4 MyBatis的工作原理

8个步骤

(1)MyBatis读取核心配置文件mybatis-config.xml:mybatis-config.xml核心配置文件主要配置了MyBatis的运行环境等信息。 ? ? ?

(2)加载映射文件Mapper.xml:Mapper.xml文件即SQL映射文件,该文件配置了操作数据库的SQL语句,需要在mybatis-config.xml中加载才能执行。 ? ? ? ?

(3)构造会话工厂:通过MyBatis的环境等配置信息构建会话工厂SqlSessionFactory,用于创建SqlSession。

(4)创建会话对象:由会话工厂SqlSessionFactory创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。 ? ? ? ?

(5)创建执行器:会话对象本身不能直接操作数据库,MyBatis底层定义了一个Executor接口用于操作数据库,执行器会根据SqlSession传递的参数动态的生成需要执行的SQL语句,同时负责查询缓存地维护。 ? ? ?

(6)封装SQL信息:SqlSession内部通过执行器Executor操作数据库,执行器将待处理的SQL信息封装到MappedStatement对象中。

(7)操作数据库:根据动态生成的SQL操作数据库。 ? ? ? ?

(8)输出结果映射:执行SQL语句之后,通过MappedStatement对象将输出结果映射至Java对象中。


文章来源:https://blog.csdn.net/Wuweihendidiao/article/details/135739383
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。