欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

初始MyBatis(二) -- MyBatis的功能及实现步骤

程序员文章站 2022-07-02 23:21:27
...

Mybatis 的功能:

支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。 – from *

  • 人话就是:我们用 JDBC 操纵数据库所完成的功能,MySql都能实现,并且使用起来相对于Mysql 更加方便。

使用Mybatis 的步骤:

  1. 导入Mybatis 的相关 jar 包(包括Mysql的驱动包):

    初始MyBatis(二) -- MyBatis的功能及实现步骤

  2. ​配置核心配置文件:

 <?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>
  <environments default="development">
	   <environment id="development">
	      <transactionManager type="JDBC"/>
	      <dataSource type="POOLED">
	        <property name="driver" value="${driver}"/>
	        <property name="url" value="${url}"/>
	        <property name="username" value="${username}"/>
	        <property name="password" value="${password}"/>
	      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>
  • 该配置文件可以在MyBatis官方文档中找到,配置文件中的标签代表的意义看下文,有详细的解释。

3、创建​sqlSessionFactory,以及获得 SqlSession:

// 加载配置文件(注意路径不要搞错,做项目时我们一般直接放在src目录下)
package rj.cool.util;

import com.mysql.cj.Session;
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;

public class MyBatisDButils {

    /**
     * 通过配置文件创建 SqlSessionFactory 是 SqlSession 的一个工厂类
     *
     * */
    public static SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        return sqlSessionFactory;
    }

    /**
     * SqlSession 通过 id 找到对应的 SQL 语句,执行 SQL 语句
     *
     * */
    public static SqlSession getSession() throws IOException {
        SqlSession session = getSqlSessionFactory().openSession();
        return session;
    }

}

对代码中关键类的解释:
SqlSessionFactoryBuilder :
这个类可以被实例化、使用和丢弃,一旦创建了SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder实例的最佳作用域是方法作用域(也就是局部方法变量)。 你可以重用 SqlSessionFactoryBuilder 来创建多个SqlSessionFactory 实例,但最好还是不要一直保留着它,以保证所有的 XML 解析资源可以被释放给更重要的事情。

SqlSessionFactory SqlSessionFactory:
一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。 使用 SqlSessionFactory
的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏习惯”。因此
SqlSessionFactory 的最佳作用域是应用作用域。 有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。

SqlSession :
每个线程都应该有它自己的 SqlSession 实例。SqlSession
的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。 绝对不能将 SqlSession
实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。 也绝不能将 SqlSession 实例的引用放在任何类型的托管作用域中,比如
Servlet 框架中的 HttpSession。 如果你现在正在使用一种 Web 框架,考虑将 SqlSession 放在一个和 HTTP
请求相似的作用域中。 换句话说,每次收到 HTTP 请求,就可以打开一个 SqlSession,返回一个响应后,就关闭它。
这个关闭操作很重要,为了确保每次都能执行关闭操作,你应该把这个关闭操作放到 finally 块中。--------from MyBatis 文档

  1. ​创建实体类(对应数据库中的一张表,基本上有几张表就有多少个实体类

User表:

package rj.cool.bean;

public class User {
    private int id;
    private String name;
    private int pwd;

    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;
    }

    public int getPwd() {
        return pwd;
    }

    public void setPwd(int pwd) {
        this.pwd = pwd;
    }
}

  1. ​编写sql语句的映射文件:
    (在查询相关信息时主要是利用相对应的映射文件进行查找)
<?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="rj.cool.dao.UserMapper">
         <!-- 根据 id 查找对应的用户-->
          <select id="selectUser" resultType="rj.cool.bean.User">
                select * from User where id = #{id}
          </select>
        
</mapper>

					--对代码中的标签代表的意义会有专门的文章进行介绍
  1. ​测试

后记:

  • 本人也是初学者,如有不清楚的地方,欢迎各位随时私信我,看到一定会及时回复,加油!

上一篇: git指令

下一篇: 基础指令