MyBatis学习笔记(一)初识MyBatis_接口式编程
文章目录
MyBatis与hibernate的区别
Hibernate
优点
- 全自动全映射(ORM)框架
- 旨在消除sql,不懂sql也可以使用
缺点
- 全自动生成sql,不能自行优化sql
- 如果想要优化,还需要学习HQL语句
- 全映射,造成资源浪费
- 硬编码,高耦合
MyBatis
优点
- 半自动,轻量级
- SQL与java代码分离,SQL是开放人员控制的
MyBatis的下载及使用
- Mybatis下载地址
- 下载2个文件,一个是Mybatis的核心文件,一个是Mybatis的源代码
- 下载完成之后,将Mybatis的核心文件解压,用的时候只需要把 核心jar包导入到项目即可
- 需要查看Mybatis的源代码时,导入下载的压缩包即可,无需解压
- MAVEN 方式导入
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
接口式编程
- 接口式编程和之前的方法一样,区别在于把接口与配置文件进行动态绑定
- 接口与配置文件进行动态绑定
- namespace: 空间名称: 指定为接口的全类名
- id:唯一标识: 指定为接口的方法名
示例
-
EmployeeMapper.java
public interface EmployeeMapper { // 根据id查询对象 Employee getEmpById(Integer id); }
- 创建了一个接口
-
EmployeeMapper.xml
<!-- id: 方法名 resultType:输出结果的类型,不可省略 parameterType:输入参数的类型,可省略 --> <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(); } }
小结
-
接口式编程
原生: DAO ===》 DaoImpl MyBatis: Mapper ===》 xxMapper.xml
-
SqlSession 代表和数据库的一次会话:用完必须关闭
-
SqlSession 和 Connection 一样,都是非线程安全的,所以每次使用的时候,都应该去获取一个新的对象,不能把SqlSession放到成员变量里
-
mapper接口没有实现类,但是MyBatis会为接口生成一个代理对象。
- 前提是 将接口和xml进行绑定
-
两个重要的配置文件:
- mybatis 的全局配置文件:包含数据库连接池信息,事务管理器等。。。系统运行环境信息
- sql映射文件:保存了每一条sql语句的映射信息