疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

MyBatis专题-入门


 

 
MyBatis是Java平台上一个持久层框架,它提供了个性化SQL、存储过程支持和映射配置等功能。开发者几乎无需编写传统复杂的JDBC语句即可完成数据库操作流程。它体积轻巧,使用灵活,入门简单,可以把SQL语句独立在XML文件中方便管理和扩展。
 
本系列文章将从MyBatis基础到应用依次介绍,虽然网上已经有很多关于MyBatis的优秀文章,但此系列作为本人对MyBatis使用心得的总结之作,不在乎内容是否新颖。
 
使用Maven安装
 
虽然您可以将MyBaits相关的jar依赖放置在classpath,但是我极力推荐您使用依赖管理工具来安装MyBatis,它不仅可以帮您管理项目的复杂依赖,还提供了项目构建的能力。本次我以Maven作为依赖管理工具,以IntelliJ IDEA为编辑器,当然您也可以使用Eclipse,这两个IDE对Maven的支持都非常好。
 
要在Maven项目中引入MBatis,只需要在pom.xml文件中添加以下依赖:
 
<!-- MyBatis依赖 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.1</version>
</dependency>
<!-- MySQL驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.24</version>
</dependency>
MyBatis只有一个依赖声明,非常地简单。既然MyBatis是一个持久化框架,它必定与数据库打交道,本次的示例使用了MySQL数据库,需要引入MySQL的JDBC驱动依赖。
 
数据准备
 
为了接下来操作数据库流程做准备,简单建立一个名为mybatis的数据库和一张user数据表:
 
CREATE DATABASE `mybatis_topic_chapter1`;
USE mybatis_topic_chapter1;
CREATE TABLE `user` (
  `username` varchar(50) NOT NULL,
  `password` char(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SQL映射配置文件
 
MyBatis是一个SQL Mapping框架,其将SQL独立于XML文件中(还有一种方式是写在注解中),我们需要定义一个SQL映射描述UserMapper.xml文件,并把它存放到classpath下的mapper文件夹中(不是必须的位置,只是为了方便管理):
 
<?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="UserMapper">
    <insert id="insertUser">
        INSERT INTO user(username, password) VALUES(#{username}, #{password})
    </insert>
    <select id="selectUser" resultType="java.util.Map">
        SELECT * FROM user WHERE username=#{username}
    </select>
</mapper>
上述配置文件中的mapper标签中是定义相关的SQL语句和映射关系等信息。namespace指定了mapper的命名空间,类似于Java的包,起到了划分模块和防止文件命名冲突的作用。#{...}是MyBatis的SQL占位符,传入的参数依次代入,如果传入的类型为复杂类型,MyBatis将把占位符中的字段与参数中的键名或者属性匹配取值。
框架配置文件
 
MyBatis作为一个Java框架,必然是跟经典的XML配置脱离不了关系(其实MyBatis也可以通过编码的形式来配置),MyBatis有自己的XML配置文件。在classpath下新建一个名为mybatis-config.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>
    <settings>
        <!--开启日志并使用标准输入输出日志实现-->
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>
    <environments default="development">
        <environment id="development">
            <!--事务有JDBC处理-->
            <transactionManager type="JDBC"/>
            <!--使用连接池管理数据库连接-->
            <dataSource type="POOLED">
                <!--数据库驱动-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!--JDBC连接字符串-->
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis_topic_chapter1"/>
                <!--数据库用户名-->
                <property name="username" value="root"/>
                <!--数据库密码-->
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!--需要加载的mapper映射文件-->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>
以上配置设置logImpl为STDOUT_LOGGING,开启了日志输出功能并执行具体日志实现;指定了一个development环境配置,其事务管理托管给JDBC,使用数据库连接池管理数据库连接,并且设置了数据源信息,以下简单介绍数据源参数:
 
dirver 数据库驱动
url JBDC连接字符串
username 数据库用户名
password 数据库密码
此外配置需要加载的相关mapper文件具体位置。
 
以后会对这些概念做更详细的说明,更多信息先暂时略过。
 
代码
 
最后一步就是运行代码,这是一个令人非常兴奋的过程。您需要新建一个Main.java文件来使用MyBatis执行SQL语句:
 
package com.oopsguy.mybatistopic;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
public class Main {
    public static void main(String[] args) throws IOException {
        //获取配置文件信息
        InputStream resStream = Resources.getResourceAsStream("mybatis-config.xml");
        //通过配置参数构建sqlSessionFactory工厂类
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resStream);
        //开启数据库会话
        SqlSession sqlSession = sqlSessionFactory.openSession();
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("username", "hello");
        params.put("password", "world");
        //插入数据
        sqlSession.insert("UserMapper.insertUser", params);
        //提交事务
        sqlSession.commit();
        //插叙数据
        Map<String, Object> result = sqlSession.selectOne("UserMapper.selectUser", "hello");
        System.out.println(result);
        //释放资源
        sqlSession.close();
    }
}
简单说一下流程,MyBatis中与数据库会话由SqlSession负责,而SqlSession需要通过SqlSessionFactory这个工厂类来创建,创建SqlSessionFactory需要依赖定义的配置文件来初始化环境参数,这个工作由SqlSessionFactoryBuilder构建器负责,它可以接收一个文件stream资源,或者是一个Configuraion对象。需要注意的是,在与数据库交互完成之后,务必执行SqlSession的close()方法以释放资源。
 
SqlSession提供了insert和selectOne方法配合mapper文件中定义的SQL来执行insert操作和select操作,它们需要引用mapper中的SQL片段,通过namespace和具体的“操作”id来定位,比如UserMapper.inserUser代表命名空间为UserMapper中id为insertUser的片段。具体的标签说明和API详细信息将在后边介绍。
 
到这里为止,基本的MyBatis用法已经介绍玩了,当然这只是简单的使用方式,实际上并不会那么用,而是通过整合其它框架(例如Spring Framework)更加高效地工作,后期也将会更加详细地介绍。
 
好了,如果到这里您已经成功运行MyBatis,那么恭喜您。您现在不需要了解更多的内容,只需要把MyBatis运行起来即可,因为路还很长,我还有很多话要说!
 
 
后记
 
以上简单地介绍了MyBatis的基础使用步骤,虽然内容很简单,但只有从最基础的知识开始才能掌握好深层的内容。很多关于NyBatis的笔记大多数是直接讲解整合Spring框架,而忽略了最基础的内容。实际上,我本人平时查阅资料大多数也是寻找能复制即用的内容,造成个人基础知识偏弱,对于MyBatis,也只是在修改配置文件和编写mapper这些层次能做到略显“身手”。希望通过此系列笔记,能让自己对MyBatis有更加深入的认识!