MyBatis是一个ORM Object Relational Mapping 框架 对象-关系映射 框架 ,ORM框架主要是根据类和数据库表之间的映射关系,进行对象和数据之间的转换,ORM负责将程序中的对象存到数据库,并将数据库中的数据转换为对象,Java上的ORM框架很多,除了MyBatais之外,还存在着Hibernate,TopLink等

MyBatis框架的主要作用是用于简化数据库方面的开发,MyBatis如何简化的数据库开发的呢?

Java提供了JDBC类库来封装不同类型的数据库的操作来对数据库进行操作,但是还是有点麻烦的,于是提供了JdbcTemplate,对JDBC进一步进行封装,简化了数据库编程

使用JdbcTemplate进行数据库的编程,只需要编写业务相关的代码,比如业务相关的SQL语句,其他性质的代码,比如创建,关闭连接,都封装在了JdbcTemplate上了

MyBatis类似,依赖于JDBC驱动,在项目中使用MyBatis,除了需要引入MyBatis框架本身的外,还引入了JDBC驱动,将这两个引入了项目,就可以进行编程了,使用MyBatis来访问数据库中的用户信息

// 1. 定义UserDO

public class UserDo {

private long id;

private String name;

private String telephone;

// 省略setter/getter方法

}

// 2. 定义访问接口

public interface UserMapper {

public UserDo selectById(long id);

}

// 3. 定义映射关系:UserMapper.xml

<?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=”cn.xzg.cd.a87.repo.mapper.UserMapper”>

<select id=”selectById” resultType=”cn.xzg.cd.a87.repo.UserDo”>

select * from user where id=#{id}

</select>

</mapper>

// 4. 全局配置文件: mybatis.xml

<?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>

<environments default=”dev”>

<environment id=”dev”>

<transactionManager type=”JDBC”></transactionManager>

<dataSource type=”POOLED”>

<property name=”driver” value=”com.mysql.jdbc.Driver” />

<property name=”url” value=”jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8″ />

<property name=”username” value=”root” />

<property name=”password” value=”…” />

</dataSource>

</environment>

</environments>

<mappers>

<mapper resource=”mapper/UserMapper.xml”/>

</mappers>

</configuration>

在上面的XML配置文件中,我们定义了接口和SQL语句之间的关系,没有显式的定义类UserDao和数据库表 user字段之间的关系,这就体现了我们的设计中,约定优于配置的原则,类字段和数据库表字段之间使用了默认的映射关系,类字段和数据库表中的字段要一一映射

访问的方式就可以如下面的样子了

public class MyBatisDemo {

public static void main(String[] args) throws IOException {

Reader reader = Resources.getResourceAsReader(“mybatis.xml”);

SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);

SqlSession session = sessionFactory.openSession();

UserMapper userMapper = session.getMapper(UserMapper.class);

UserDo userDo = userMapper.selectById(8);

//…

}

}

在代码中可以看出,相对于JdbcTemplate的使用,使用MyBatis的方式更加的灵活,相比于JdbcTemplate来说,使用起来,和具体的代码相分离,更加的灵活,清洗,方便维护’

那么,这就涉及到了一个问题,如何在三者之间进行取舍

这三者分别是JdbcTemplate,MyBatis,Hibernate,首先是JdbcTemplate,相比较于MyBatis,更加轻量级,只是对断开和连接数据库进行了封装,但是缺点很明显,就是和SQL代码耦合在一起,不具备ORM的功能,将业务代码和数据库强耦合

Hibernate和MyBaits相比,Hibernate更加重量级,使用了更加高级的映射功能,根据业务需求自动生成SQL语句,不需要像是MyBatis那样自己编写SQL,不过,虽然简化了开发,但是自动生成的SQL语句没有进行针对的优化,这样,丧失了程序员自己编写SQL的灵活性

实际上,不管是哪种实现方式,从数据库中取出数据并且转换成对象,涉及的代码逻辑都一样,不过,有的功能强大,大部分都交给框架实现,有的框架将功能的实现交给了程序员

总结下来,框架的易用性和性能成对立的关系,追求了易用性,那么性能会差一点,追求了性能,那么易用性就差一点,使用越简单,灵活性越差

JdbcTemplate提供的功能最简单,易用性差,编程性能上来说,最好了.MyBaits介于了两者之间,在易用性,性能,灵活性三个方面做到了均衡,支持自己编写了SQL,对于Hibernate,提供的功能最佳完善,但是性能并不好

本章重点:

上面说的JdbcTemplate,MyBatis,Hibernate都是对JDBC的二次封装,就是为了简化数据

JdbcTemplate并不算的上是ORM的框架,因为需要自己编写SQL语句,但是相比较于Hibernate这种全自动ORM框架,MyBatis算是一种半自动化的ORM框架

课后思考:

有什么框架能切实的提高开发效率,减少不必要的体力劳动

JackSon

发表评论

邮箱地址不会被公开。 必填项已用*标注