1.什么是MyBatis?
MyBatis 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。与其他ORM框架不同,MyBatis没有将Java对象与数据表关联起来,二十作为Java方法和sql语句的桥梁,我们一般称它为“半自动化ORM”框架。
2.MyBatis能做什么?
- 定制化SQL,操纵数据库对象
- 可以使用简单的xml或注解来配置和映射原生类型、接口和Java的POJO为数据库中的记录
- 动态SQL功能,更加灵活的使用SQL
- 提供了插件增强机制,可以继承其他的插件,如分页
3.与Hibernate对比
- Hibernate:全自动化ORM框架,数据库移植性好,基础业务几乎不需要写sql,易学难精,上手简单但熟练使用需要阅读大量文档,框架结构复杂。
- MyBatis:半自动化ORM框架,数据库移植性一般,基础业务仍需写sql,但是可以通过Mapper来简化,易学易用,上手简单,结构精简清晰。
对比发现 :H适合在需求明确、业务固定的项目中使用;M适合在需求多变,快速迭代的项目中使用
4.注意事项:
- MyBatis在开发中会书写大量的SQL,对于SQL关键字我们统一大写
- 在MyBatis标签中书写sql语句是可以不用在句尾加 ;的,但在其他环境还是加上
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5.MyBatis的基础使用
- 得到MyBatis配置信息,Configuration类,Configuration负责MyBatis架构中的配置部分,例如:dataSource数据源信息都会交给Configuration去管理;Environment是Configuration 中的一部分,而PooledDataSource和JdbcTransactionFactory又是Environment中的一部分,他们是属于层层递进的关系。其中JdbcTransactionFactory表示事务工厂,当MyBatis 需要新建事务的时候,会通过它来新建;PooledDataSource表示数据源,通过其构造参数,我们传入了数据库url,数据库用户和密码等配置;Configuration可以有多个Environment,因此每个Environment都必须有唯一的id,即代码中的development,将这些配置搭配组合后就是一个可用的Configuration.
- 通过Configuration 来创建SqlSessionFactory,Mybatis是通过会话的方式来执行sql的,因此我们必须拥有一个会话创建器,即会话工厂。
- 新建SqlSession来执行sql。有了SqlSessionFactory之后,我们可以方便的新建会话,并通过会话来执行sql
package com.gongrf;import org.apache.ibatis.datasource.pooled.PooledDataSource; import org.apache.ibatis.mapping.Environment; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;@SuppressWarnings({"SqlResolve", "SqlNoDataSourceInspection", "Duplicates"}) public class StartNoXml {public static void main(String[] args) throws SQLException {// 无需xml配置的方式使用MyBatis// 准备jdbc事务类JdbcTransactionFactory jdbcTransactionFactory = new JdbcTransactionFactory();// 配置数据源PooledDataSource dataSource =new PooledDataSource("com.mysql.cj.jdbc.Driver","jdbc:mysql://localhost:3306/sys?useSSL=false","root", "root123");// 配置环境,向环境中指定环境id、事务和数据源Environment environment = new Environment.Builder("development").transactionFactory(jdbcTransactionFactory).dataSource(dataSource).build();// 新建 MyBatis 配置类Configuration configuration = new Configuration(environment);// 得到 SqlSessionFactory 核心类SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);// 开始一个 sql 会话SqlSession session = sqlSessionFactory.openSession();// 得到 sql 连接并运行 sql 语句PreparedStatement preStatement = session.getConnection().prepareStatement("SELECT * FROM user WHERE id = ?");preStatement.setInt(1, 1);ResultSet result = preStatement.executeQuery();// 验证结果while (result.next()) {System.out.println("username: " + result.getString("username"));}// 关闭会话session.close();} }