MyBatis学习笔记(一)初识MyBatis_接口式编程

MyBatis学习笔记(一)初识MyBatis_接口式编程

文章目录

  • MyBatis学习笔记(一)初识MyBatis_接口式编程
    • MyBatis与hibernate的区别
      • Hibernate
        • 优点
        • 缺点
      • MyBatis
        • 优点
    • MyBatis的下载及使用
    • 接口式编程
      • 示例
      • 小结

MyBatis与hibernate的区别

Hibernate

优点

  1. 全自动全映射(ORM)框架
  2. 旨在消除sql,不懂sql也可以使用

缺点

  1. 全自动生成sql,不能自行优化sql
    • 如果想要优化,还需要学习HQL语句
  2. 全映射,造成资源浪费
  3. 硬编码,高耦合

MyBatis

优点

  1. 半自动,轻量级
  2. SQL与java代码分离,SQL是开放人员控制的

MyBatis的下载及使用

  • Mybatis下载地址
    • 下载2个文件,一个是Mybatis的核心文件,一个是Mybatis的源代码
    • 下载完成之后,将Mybatis的核心文件解压,用的时候只需要把 核心jar包导入到项目即可
    • 需要查看Mybatis的源代码时,导入下载的压缩包即可,无需解压
  • MAVEN 方式导入

<dependency>
    <groupId>org.mybatisgroupId>
    <artifactId>mybatisartifactId>
    <version>3.4.6version>
dependency>

接口式编程

  • 接口式编程和之前的方法一样,区别在于把接口与配置文件进行动态绑定
  • 接口与配置文件进行动态绑定
    • namespace: 空间名称: 指定为接口的全类名
    • id:唯一标识: 指定为接口的方法名

示例

  • EmployeeMapper.java

    public interface EmployeeMapper {
    	// 根据id查询对象
    	Employee getEmpById(Integer id);
    }	
    
    • 创建了一个接口
  • EmployeeMapper.xml

    
    <mapper namespace="com.fu.dao.EmployeeMapper">
        <select id="getEmpById" resultType="com.fu.bean.Employee">
    		select id,last_name lastName,gender,email from tbl_employee where id = #{id}
    	select>
    mapper>
    
  • 测试类

    • 关于 mybatis-config.xml 的创建与配置,请参见MyBatis学习笔记(二)全局配置文件 mybatis-config.xml详解
    public SqlSessionFactory getSqlSessionFactory(){
      	String resource = "mybatis-config.xml";
      	InputStream inputStream = Resources.getResourceAsStream(resource);
      	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      }
    //. 我们需要手动提交数据
    //	 getSqlSessionFactory().openSession(); ==》手动提交
    //	 getSqlSessionFactory().openSession(true); ==》自动提交
    @Test
    public void demo2() throws IOException {
        SqlSession session = getSqlSessionFactory().openSession();
        try {
            // 获取接口的实现类对象
            // 只要是动态编程,MyBatis会自动为接口创建一个代理对象,由代理对象执行增删改查
            EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
            Employee employee = mapper.getEmpById(1);
            System.out.println(mapper.getClass());
            System.out.println(employee);
            session.commit();
        } finally {
            session.close();
        }
    }
    

小结

  1. 接口式编程

    原生:         DAO    ===》 DaoImpl
    MyBatis:     Mapper ===》 xxMapper.xml
    
  2. SqlSession 代表和数据库的一次会话:用完必须关闭

  3. SqlSession 和 Connection 一样,都是非线程安全的,所以每次使用的时候,都应该去获取一个新的对象,不能把SqlSession放到成员变量里

  4. mapper接口没有实现类,但是MyBatis会为接口生成一个代理对象。

    • 前提是 将接口和xml进行绑定
  5. 两个重要的配置文件:

    1. mybatis 的全局配置文件:包含数据库连接池信息,事务管理器等。。。系统运行环境信息
    2. sql映射文件:保存了每一条sql语句的映射信息

你可能感兴趣的:(MyBatis)