MyBatis-01-01-MyBatis框架概述 & 简单实现Demo


MyBatis介绍

  • MyBatis原本是apache的一个开源项目iBatis
  • 2010年该项目由apache software foundation迁移到了Google code,并且改名为MyBatis
  • 2013年11月迁移到GitHub
  • MyBatis是一款持久化框架,它支持自定义SQL查询、存储过程以及高级映射
  • 与传统的 JDBC 开发相比, MyBatis 消除了几乎所有的代码和参数的手工设置
  • MyBatis是一个ORM框架
  • MyBatis可以使用 XML 或注解方式进行配置和映射,它是把 实体类和SQL语句 之间建立了映射关系,而Hibernate是在实体类和数据库表之间建立了映射关系。

Hibernate与MyBatis都是持久化框架,都是ORM框架。都是在简化持久化操作。

MyBatis最终生成的所有程序都是程序员手动生成的。


MyBatis核心XML配置文件

XML 配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)

<?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> 
    <settings>
    	全局参数的设置
        打印SQL语句
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>
	多个数据源环境配置
    <environments default="development"> 
        <environment id="development"> 
         	事务和数据源 
        </environment>
    </environments> 
</configuration>

在这里插入图片描述

在这里插入图片描述

        <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/mybatis?characterEncoding=utf-8"/>
		        <property name="username" value="root"/>
		        <property name="password" value=""/>
		    </dataSource> 
        </environment>

在这里插入图片描述

选择Managed的话表示通过容器来管理了
以后用Spring了就可以用下面的类型了

在这里插入图片描述
unpooled:不用数据库连接池,每次新建链接
pooled:数据库连接池,用数据库链接池的链接
jndi:

  • UNPOOLED: 这个数据源的实现是每次被请求时简单打开和关闭连接。它有一点慢, 这是对简单应用程序的一个很好的选择, 因为它不需要及时的可用连接。

  • POOLED:这是JDBC连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的初始连接和认证时间。这是一种当前 Web 应用程序用来快速响应请求很流行的方法

  • JNDI:这个数据源的实现是为了使用如 Spring 或应用服务器这类的容器, 容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用

在这里插入图片描述

<?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">
    
    <!-- SQL映射文件的配置 -->
    <!-- nameSpace=映射空间。唯一标识的字符串-->
    <mapper namespace="com.mybatis.mapper.UserMapper">
	    <select id="selectAllUsers"    
	            resultType="com.mybatis.entity.User">
	        select * from user
	    </select>
	</mapper>

在这里插入图片描述


MyBatis主要的类层次结构

在这里插入图片描述
SqlSessionFactory:可以创建Seiion的工厂类
Executor:动态语句生成与缓存的维护

java数据类型和jdbc数据类型对照表 https://blog.csdn.net/qq_43517117/article/details/86551215

在这里插入图片描述

在这里插入图片描述

public class MyBatisUtil {
    
    
    private static SqlSessionFactory factory;
    
    //第一次加载时自动执行
    static {
    
    
        try {
    
    
        //参数:主配置文件的文件名。默认路径resources文件目录
            InputStream is = Resources.getResourceAsStream("mybatis.xml");
            factory = new SqlSessionFactoryBuilder().build(is);
            is.close();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }
    
    public static SqlSession openSqlSession() {
    
    
        return factory.openSession();
    }
}

第一个MyBatis程序

使用流程

项目结构

在这里插入图片描述

  1. 创建一个Java Project

  2. 导入MyBatis需要的jar包
    在这里插入图片描述

    一个是MyBatis必须包。一个是MySql驱动包。

  3. 创建实体类和映射器接口(DAO)
    在这里插入图片描述

在这里插入图片描述

user.java

package com.mybatis.entity;

public class User {
    
    

	private Integer id;
	private String userName;
	private String password;
	
	
	public Integer getId() {
    
    
		return id;
	}
	public void setId(Integer id) {
    
    
		this.id = id;
	}
	public String getUserName() {
    
    
		return userName;
	}
	public void setUserName(String userName) {
    
    
		this.userName = userName;
	}
	public String getPassword() {
    
    
		return password;
	}
	public void setPassword(String password) {
    
    
		this.password = password;
	}
	
	
	@Override
	public String toString() {
    
    
		return "User [id=" + id + ", userName=" + userName + ", password=" + password + "]";
	}
	
	
	
}

UserMapper.java

package com.mybatis.mapper;

import java.util.List;

import com.mybatis.entity.User;


//类型是interface ,
//这是映射器接口,定义对持久化对象的增删改查方法
//一个映射器接口对应一个映射文件
public interface UserMapper {
    
    

	List<User> findAllUsers();
}

  1. 创建MyBatis的主配置文件mybatis.xml

    在工程中新建Source Folder命名为resources来专门存放MyBatis的主配置文件,在resources中新建XML File命名为mybatis.xml

MaBatis.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> 


    <!--全局参数的设置,例如日志的实现类 -->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>
    
    
    
	<!--多个数据源环境配置,default:下面定义的标签的id-->
    <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/database_mybatis?characterEncoding=utf-8"/>
		        <property name="username" value="root"/>
		        <property name="password" value=""/>
		    </dataSource> 
        </environment>
    </environments> 
    
	<!-- SQL映射文件 -->
	<mappers>
		<mapper resource="com/mybatis/mapper/UserMapper.xml"/>
	</mappers>
    
    
</configuration>
  1. 创建MyBatis的SQL映射XML文件

    创建MyBatis的SQL映射XML文件,并且映射文件要同刚才创建的映射器接口在同一包中,与映射器接口命名也相同,所以映射文件名为UserMapper.xml

    注意:要将映射文件关联到主配置文件

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">
    
    
<!-- 映射文件 -->    
<!-- nameSpace为唯一标识,映射器接口的全限定名 -->
<mapper namespace="com.mybatis.mapper.UserMapper">
	
	<!-- select用来映射查询语句
		id=对应的映射器接口的方法名
		resultType同映射接口中该方法的返回值类型一致,或跟返回值中元素类型一致 
		因为没有声明文件位置,所以参数需要输入全部包名-->
	<select id="findAllUsers" resultType="com.mybatis.entity.User">
		select * from mybatis_01_01_user
	</select>
	
	<select id=""></select>
</mapper>
  1. 将SQL映射文件与主配置文件进行关联

在这里插入图片描述
在MyBatis.xml文件中添加代码
在这里插入图片描述

	<!-- SQL映射文件 -->
	<mappers>
		<mapper resource="com/mybatis/mapper/UserMapper.xml"/>
	</mappers>
  1. 编写代码进行测试

在这里插入图片描述

Test.java

package com.mybatis.ui;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.mybatis.entity.User;
import com.mybatis.mapper.UserMapper;
import com.mybatis.util.MyBatisUtil;

public class Test {
    
    

	public static void main(String[] args) {
    
    
		System.out.println("=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
		//创建SqlSession对象
		SqlSession session = MyBatisUtil.openSqlSession();
		//映射器接口权限定名+方法名(映射文件的nameSpace的数值+某一条SQL语句映射的id属性的值)
		//方式1,调用SqlSession的方法
		System.out.println("-=---------------------");
		List<User> users = session.selectList("com.mybatis.mapper.UserMapper.findAllUsers");
		System.out.println(users);
		session.close();
	}
}

在这里插入图片描述

Test.java

package com.mybatis.ui;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.mybatis.entity.User;
import com.mybatis.mapper.UserMapper;
import com.mybatis.util.MyBatisUtil;

public class Test {
    
    

	public static void main(String[] args) {
    
    
		//方式2:更推荐
		//参数=映射器接口的类型,
		//返回值=该接口实现类型对象
		SqlSession session = MyBatisUtil.openSqlSession();
		UserMapper userMapper = session.getMapper(UserMapper.class);
		List<User> users = userMapper.findAllUsers();
		System.out.println(users);
		
		System.out.println("----------------------------");
		session.close();
	}
}

SqlSession工作流程

在这里插入图片描述
事务的操作都放到这里面了

在这里插入图片描述

通过唯一的那条id可以定位到那条SQL语句
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44627608/article/details/115341805