zoukankan      html  css  js  c++  java
  • Mybatis(二):框架构建

    Mybatis:框架构建

    一、安装、导入依赖

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>x.x.x</version>
    </dependency>
    

    二、使用XML构建SqlSessionFactory

    认识SqlSessionFactory

    • SqlSessionFactory是个单个数据库映射关系经过编译后的内存镜像

    • 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心

    • SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得

    • SqlSessionFactoryBuilder 可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例

    • SqlSessionFactory是线程安全的,一旦被创立,在整个执行过程中都存在,

    • 最好使用单例模式,不要多次创建

    • SqlSessionFactory是创建SqlSession的工厂

    实例操作

    //核心配置文件路径
    String resource = "mybatis-config.xml"; 
    //加载资源文件
    InputStream inputStream = Resources.getResourceAsStream(resource);
    //构建出SqlSessionFactory实例
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    
    • MyBatis 包含一个名叫 Resources 的工具类,可使从 classpath 或其他位置加载资源文件更加容易。
    • 也可以使用任意的输入流(InputStream)实例,包括字符串形式的文件路径或者 file:// 的 URL 形式的文件路径来配置

    Mybatis核心配置

    1. 核心配置文件中,包含数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)
    2. environment 元素体中包含了事务管理和连接池的配置。mappers 元素包含一组映射器(mapper),这些映射器的 XML 映射文件包含了 SQL 代码和映射定义信息。

    三、从 SqlSessionFactory 中获取 SqlSession

    1. 认识SqlSession
      • SqlSession是持久化操作的对象,类似于JDBC的Connection
      • 他是持久层和应用程序执行交互操作的单线程对象
      • sqlSession完全包含以数据库为背景的所有Sql操作方法
      • SqlSession的实例不能被共享
      • 非线程安全
      • 使用完要关闭SqlSession
    try (SqlSession session = sqlSessionFactory.openSession()) {
      BlogMapper mapper = session.getMapper(BlogMapper.class);
      Blog blog = mapper.selectBlog(101); //执行selectBlog方法
    }
    

    事实上,为了方便,通常我们会创建一个utils工具类进行封装操作,

    public class CustomerUtils {
    	private static SqlSessionFactory sessionFactory;
    	static {
    		String resource = "mybatis-config.xml";
    		try {
    			InputStream resourceAsStream = Resources.getResourceAsStream(resource);
    			sessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    
    	public static SqlSession getsession() {
    		return sessionFactory.openSession();
    	}
    
    }
    

    这样,我们就可以通过工具类直接调用方法,是不是很方便呢?

    四、Sql语句的映射

    <mapper namespace="org.mybatis.example.BlogMapper"> //所映射的接口
      <select id="selectBlog" resultType="Blog">
        select * from Blog where id = #{id}
      </select>
    </mapper>
    
    BlogMapper mapper = session.getMapper(BlogMapper.class); 
    Blog blog = mapper.selectBlog(101);
    

    五、Sql语句注解映射

    public interface BlogMapper {
      @Select("SELECT * FROM blog WHERE id = #{id}")
      Blog selectBlog(int id);
    }
    

    说明:

    1. 命名空间的作用:
      • 利用更长的完全限定名来将不同的语句隔离开
      • 实现了接口绑定
    2. SqlSessionFactoryBuilder:
      • 这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了(局部方法变量)
  • 相关阅读:
    GCD的常用代码块
    多用字面量语法,少用与之等价的方法
    新建项目上下出现黑色块
    按钮UIButton的使用
    集成支付宝
    app生命周期之即将关闭
    苹果开发者计划申请材料准备(公司级)
    真机调试的一些问题记录~更新中
    iOS开发架构学习记录
    用枚举值表示状态、选项、状态码
  • 原文地址:https://www.cnblogs.com/dreamzone/p/12330895.html
Copyright © 2011-2022 走看看