MyBatis
MyBatis 是一个一流的长久化框架,反对自定义 SQL、存储过程和高级映射。
MyBatis 简直打消了所有的 JDBC 代码,手动设置参数和检索后果的步骤。
MyBatis 能够应用简略的 XML 或注解进行配置,将根本类型、Map 接口和 Java POJO(一般的 Java 对象)映射到数据库记录。
mybatis
mybatis doc
tools
简略介绍
MyBatis(原名为 iBatis)是一款 Java 长久层框架,它提供了一种简略而灵便的形式来拜访数据库。
MyBatis 的指标是通过打消冗余的 JDBC 代码,使开发人员可能更专一于 SQL 语句和后果映射。
以下是一些要害的特点和概念,帮忙你更好地了解 MyBatis:
- SQL 映射:MyBatis 应用 XML 或注解形式将 SQL 语句与 Java 办法进行映射。在 XML 文件中,你能够编写 SQL 语句,并指定参数和后果的映射关系。
- 参数映射:MyBatis 反对多种参数映射形式,包含地位参数、命名参数和自定义类型处理器。这使得你能够灵便地将 Java 对象作为参数传递给 SQL 语句。
- 后果映射:MyBatis 能够将 SQL 查问的后果映射为 Java 对象。你能够定义映射规定,将查问后果中的列与 Java 对象的属性进行对应。
- 动静 SQL:MyBatis 提供了弱小的动静 SQL 性能,能够依据条件来动静地生成 SQL 语句。你能够应用条件判断、循环和片段等性能来构建灵便的 SQL 语句。
- 事务反对:MyBatis 能够治理数据库事务,你能够通过配置文件或编程形式来管制事务的提交和回滚。
- 插件机制:MyBatis 提供了插件机制,能够通过自定义插件来扩大框架的性能。你能够在 SQL 语句执行前后进行拦挡和批改,实现日志记录、性能监控等性能。
应用 MyBatis 的流程通常包含以下步骤:
- 配置数据源:在配置文件中指定数据库连贯信息,包含数据库类型、URL、用户名和明码等。
- 定义 SQL 映射:应用 XML 文件或注解形式定义 SQL 语句和参数、后果的映射关系。
- 编写 Java 代码:编写 Java 代码,调用 MyBatis 提供的 API 来执行 SQL 语句。你能够应用会话(SqlSession)来执行增删改查操作。
- 执行 SQL 语句:通过调用相应的办法来执行 SQL 语句,并获取后果。
MyBatis 是一款功能强大而灵便的长久层框架,它可能无效地简化数据库拜访的开发工作。
它曾经在许多 Java 我的项目中失去广泛应用,成为了 Java 开发人员的首选之一。
mybatis 与 hibernate 的比照表格
上面是 MyBatis 和 Hibernate 的比照表格,以便更好地了解它们之间的区别:
个性 | MyBatis | Hibernate |
---|---|---|
数据库反对 | 反对多种关系型数据库 | 反对多种关系型数据库 |
SQL 管制 | 提供灵便的 SQL 管制,开发者手动编写和治理 SQL 语句 | 主动创立和治理 SQL 语句,更面向对象的形式 |
对象关系映射(ORM) | 较弱的 ORM 反对,须要手动解决对象和数据库表之间的映射关系 | 弱小的 ORM 反对,主动解决对象和数据库表之间的映射关系 |
存储过程和函数反对 | 提供良好的存储过程和函数反对 | 提供无限的存储过程和函数反对 |
缓存机制 | 提供一级缓存和二级缓存 | 提供一级缓存和二级缓存 |
查问性能 | 查问性能较高,能够优化 SQL 语句 | 查问性能较低,Hibernate 会主动生成简单的查问语句 |
灵活性 | 更灵便,能够间接编写 SQL 语句 | 较少灵便,须要依照 Hibernate 的标准进行操作 |
学习曲线 | 绝对较低,容易上手 | 绝对较高,须要把握更多的概念和 API |
须要留神的是,MyBatis 和 Hibernate 都是优良的长久层框架,每个框架在不同的场景和需要下有其适用性。
MyBatis 更适宜对 SQL 语句的管制要求较高的我的项目,而 Hibernate 则更适宜那些心愿通过 ORM 来简化数据拜访的我的项目。
Hello World
- mybatis.jar & mysql-connector-java.jar
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
- MyBatisUtil.java
public class MyBatisUtil {private MyBatisUtil(){}
private static SqlSessionFactory sqlSessionFactory = null;
static {
try {sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
} catch (IOException e) {e.printStackTrace();
}
}
public static SqlSessionFactory getSqlSessionFactory() {return sqlSessionFactory;}
}
- mybatis-config.xml & jdbc.properties
<?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>
<!-- 引入配置信息文件 -->
<properties resource="jdbc.properties" />
<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="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/ryo/mapper/UserMapper.xml"/>
</mappers>
</configuration>
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=utf8
user=root
password=
- UserMapper.java & UserMapper.xml
public interface UserMapper {User selectUser(Long id);
}
<?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="com.ryo.mapper.UserMapper">
<!-- 定义所有列, 方便使用, 个别应该防止应用 *-->
<sql id="columns"> id,username,password,createdOn</sql>
<!--id 对应办法名称 -->
<select id="selectUser" parameterType="java.lang.Long" resultType="com.ryo.domain.User">
SELECT
<include refid="columns"/>
FROM User WHERE id = #{id}
</select>
</mapper>
- sql & domain
CREATE TABLE user (id BIGINT(20) PRIMARY KEY AUTO_INCREMENT NOT NULL
COMMENT '主键, 自增',
username VARCHAR(64) NOT NULL
COMMENT '用户名',
password VARCHAR(128) NOT NULL
COMMENT '明码',
createdOn DATETIME NOT NULL
COMMENT '创立工夫',
UNIQUE INDEX `username_UNIQUE` (`username`)
)
COMMENT '用户表';
INSERT INTO `user` (username, password, createdOn) VALUES ('ryo', '123456', '2016-07-28 14:32:30');
public class User implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
private Date createdOn;
//getter & setter
//toString()}
- UserMapperTest.java & result
public class UserMapperTest {private SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
@Test
public void testSelectUser() throws IOException {UserMapper userMapper = sqlSessionFactory.openSession().getMapper(UserMapper.class);
System.out.println(userMapper.selectUser(1L));
}
}
User{id=1, username='ryo', password='123456', createdOn=Thu Jul 28 14:32:30 CST 2016}
Process finished with exit code 0
本文由博客一文多发平台 OpenWrite 公布!