MyBatis研习录(01)——MyBatis概述与入门

ORM模型

简单地说,ORM模型就是数据库的表与简单Java对象(Plain Ordinary Java Object,简称 POJO)的对象关系映射模型(Object Relational Mapping 简称ORM),它主要解决数据库数据和POJO对象的相互映射。在本系列教程中,我们将详细介绍轻量级的ORM框架MyBatis。

MyBatis概述

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis原本是apache的一个开源项目iBatis, 2010年该项目由apache software foundation 迁移到了google code并改名为MyBatis 。2013年11月MyBatis又迁移到Github。

The MyBatis SQL mapper framework makes it easier to use a relational database with object-oriented applications. MyBatis couples objects with stored procedures or SQL statements using a XML descriptor or annotations. Simplicity is the biggest advantage of the MyBatis data mapper over object relational mapping tools.

MyBatis对JDBC操作数据库的过程进行了封装,使开发者只需要关注SQL本身,而不需要开发人员花费大量的精力去处理例如注册驱动、创建connection、创建statement、手动设置参数等JDBC操作。之前,当我们使用JDBC持久化的时候,sql语句被硬编码到java代码中,耦合度太高代码不易于维护;一旦我们修改了Java代码就需要对项目进行重新的编译、打包、发布。MyBatis将sql语句和java代码分开,功能边界清晰;前者专注于数据,后者侧重于业务。

MyBatis入门示例

在此,我们以示例的形式介绍MyBatis的入门示例,详细步骤如下:

第一步:数据准备

创建数据库mybatisDatabase和表user

DROP DATABASE IF EXISTS mybatisDatabase;

CREATE DATABASE mybatisDatabase;

use mybatisDatabase;

CREATE TABLE user(

  id INT primary key auto_increment,

  username VARCHAR(50),

  password VARCHAR(50),

  gender VARCHAR(10)

);

INSERT INTO user(username,password,gender) VALUES("lucy","123456","female");

INSERT INTO user(username,password,gender) VALUES("momo","234567","female");

INSERT INTO user(username,password,gender) VALUES("xixi","345678","female");

INSERT INTO user(username,password,gender) VALUES("pepe","456123","female");

SELECT * FROM user;


第二步:创建Java项目

创建普通Java项目并在该项目下新建config和lib文件夹

创建文件完毕后请对config执行Build Path,图示如下:

第三步:User

请在cn.com.pojo创建User类

package cn.com.pojo;

public class User {

private int id;

private String username;

private String password;

private String gender;

public User() {

}

public User(int id, String username, String password, String gender) {

this.id = id;

this.username = username;

this.password = password;

this.gender = gender;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getGender() {

return gender;

}

public void setGender(String gender) {

this.gender = gender;

}

@Override

public String toString() {

return "User [id=" + id + ", username=" + username + ", password=" + password + ", gender=" + gender + "]";

}

}


该User类中各属性值与user表尽量保持一致。

第四步:添加jar包

请添加以下jar包并Build Path

log4j-1.2.17.jar

mybatis-3.4.1.jar

mysql-connector-java-5.1.7-bin.jar

第五步:log4j.properties

请在config文件夹中创建log4j.properties并编写其配置,内容如下:

# Global logging configuration

log4j.rootLogger=DEBUG, stdout

# Console output...

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n


第六步:mybatis-config.xml

在config文件夹中创建mybatis的核心配置文件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>

  <!-- 配置数据源 -->

  <environments default="development">

    <environment id="development">

      <transactionManager type="JDBC"/>

      <dataSource type="POOLED">

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

        <property name="url" value="jdbc:mysql://localhost:3306/mybatisDatabase"/>

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

        <property name="password" value="root"/>

      </dataSource>

    </environment>

  </environments>


</configuration>


该配置文件environments标签主要用于配置数据库相关信息。至于,mybatis-config.xml文件中的其它常用配置,我们在后续的教程中会提到。

第七步:UserMapper.xml

在User的同级目录中创建映射文件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.com.pojo.User">

  <select id="selectUserById" parameterType="int" resultType="cn.com.pojo.User">

    select id,username,password,gender from user where id = #{id}

  </select>

</mapper>


该mapper的核心功能为:从数据库中查询数据并将查询结果封装成JavaBean对象。

在该配置文件中:

namespace表示该mapper的命名空间,其取值为JavaBean的全类名或Mapper接口的全类名

select标签表示select语句。其中,id属性用于为sql语句配置唯一标识;parameterType属性用于表示输入参数的类型,一般来说可以省略该属性,但是,如果参数是pojo建议不省略;resultType属性用于指定执行select查询语句之后每行记录对应的JavaBean对象的全类名。

在mapper.xml中使用#{ }表示占位符,类似于JDBC中的占位符?

在完成UserMapper.xml的编写后,再在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>

  <!-- 配置数据源 -->

  <environments default="development">

    <environment id="development">

      <transactionManager type="JDBC"/>

      <dataSource type="POOLED">

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

        <property name="url" value="jdbc:mysql://localhost:3306/mybatisDatabase"/>

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

        <property name="password" value="root"/>

      </dataSource>

    </environment>

  </environments>


  <!-- 配置mapper -->

  <mappers>

    <mapper resource="cn/com/pojo/UserMapper.xml"/>

  </mappers>


</configuration>


通过mappers标签配置各mapper。在mapper标签中使用resource属性指定mapper的路径,其形式为斜杠形式的全路径。

第八步:测试

代码如下:

package cn.com.test;

import java.io.InputStream;

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 org.junit.Test;

import cn.com.pojo.User;

/**


*/

public class MybatisTest {

@Test

public void testMybatis() {

SqlSession sqlSession = null;

try {

// 读取mybatis的核心配置文件mybatis-config.xml

InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

// 创建SqlSessionFactoryBuilder对象

SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

// 通过SqlSessionFactoryBuilder解析配置文件获取sqlSessionFactory对象

SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);

// 通过SqlSessionFactory对象创建SqlSession对象

sqlSession = sqlSessionFactory.openSession();

// 利用selectOne()执行查询

User user = sqlSession.selectOne("cn.com.pojo.User.selectUserById", 1);

System.out.println(user);

} catch (Exception e) {

} finally {

// 关闭SqlSession

if (sqlSession != null) {

sqlSession.close();

}

}

}

}


要点概述:

1、通过org.apache.ibatis.io.Resources读取mybatis的核心配置文件mybatis-config.xml

2、通过SqlSessionFactoryBuilder对象生成sqlSessionFactory对象

3、通过SqlSessionFactory对象创建SqlSession对象。该对象的作用类似于JDBC中的Connection对象,所以在执行完数据库操作后需对其进行关闭操作。

4、通过SqlSession的selectOne( )方法执行返回结果只有一条记录的sql查询语句。该方法第一个参数将要执行的sql语句,其格式为:命名空间.sql语句的id值;该方法第二参数为替换sql语句中占位符的参数值。

5、执行完查询操作后关闭SqlSession。

结果如下:

MyBatis入门示例总结

1、mybatis-config.xml是mybatis的核心配置文件

2、mapper.xml用于定义与数据库相关的sql语句

3、SqlSession用于执行数据库操作

Eclipse中关联MyBatis源码

为在开发过程中便捷查看MyBatis源码,我们需要在Eclipse对其进行关联。

第一步

下载源码并存放至本地,图示如下:

第二步

在Eclipse的项目中找到mybatis-3.4.1.jar,图示如下:

第三步

选中mybatis-3.4.1.jar右键选择Properties后再添加刚才下载好的源码文件mybatis-3.4.1-src.zip,图示如下:

最后,单击 Apply and Close即可。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容