MyBatis

MyBatis是一个一流的长久化框架,反对自定义SQL、存储过程和高级映射。

MyBatis简直打消了所有的JDBC代码,手动设置参数和检索后果的步骤。

MyBatis能够应用简略的XML或注解进行配置,将根本类型、Map接口和Java POJO(一般的Java对象)映射到数据库记录。

mybatis

mybatis doc

tools

简略介绍

MyBatis(原名为iBatis)是一款Java长久层框架,它提供了一种简略而灵便的形式来拜访数据库。

MyBatis的指标是通过打消冗余的JDBC代码,使开发人员可能更专一于SQL语句和后果映射。

以下是一些要害的特点和概念,帮忙你更好地了解MyBatis:

  1. SQL映射:MyBatis应用XML或注解形式将SQL语句与Java办法进行映射。在XML文件中,你能够编写SQL语句,并指定参数和后果的映射关系。
  2. 参数映射:MyBatis反对多种参数映射形式,包含地位参数、命名参数和自定义类型处理器。这使得你能够灵便地将Java对象作为参数传递给SQL语句。
  3. 后果映射:MyBatis能够将SQL查问的后果映射为Java对象。你能够定义映射规定,将查问后果中的列与Java对象的属性进行对应。
  4. 动静SQL:MyBatis提供了弱小的动静SQL性能,能够依据条件来动静地生成SQL语句。你能够应用条件判断、循环和片段等性能来构建灵便的SQL语句。
  5. 事务反对:MyBatis能够治理数据库事务,你能够通过配置文件或编程形式来管制事务的提交和回滚。
  6. 插件机制:MyBatis提供了插件机制,能够通过自定义插件来扩大框架的性能。你能够在SQL语句执行前后进行拦挡和批改,实现日志记录、性能监控等性能。

应用MyBatis的流程通常包含以下步骤:

  1. 配置数据源:在配置文件中指定数据库连贯信息,包含数据库类型、URL、用户名和明码等。
  2. 定义SQL映射:应用XML文件或注解形式定义SQL语句和参数、后果的映射关系。
  3. 编写Java代码:编写Java代码,调用MyBatis提供的API来执行SQL语句。你能够应用会话(SqlSession)来执行增删改查操作。
  4. 执行SQL语句:通过调用相应的办法来执行SQL语句,并获取后果。

MyBatis是一款功能强大而灵便的长久层框架,它可能无效地简化数据库拜访的开发工作。

它曾经在许多Java我的项目中失去广泛应用,成为了Java开发人员的首选之一。

mybatis 与 hibernate 的比照表格

上面是MyBatis和Hibernate的比照表格,以便更好地了解它们之间的区别:

个性MyBatisHibernate
数据库反对反对多种关系型数据库反对多种关系型数据库
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.Driverurl=jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=utf8user=rootpassword=
  • 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 公布!