mybatis入门·示例

一、Mybatis的官网及手册

Mybatis的官网地址如下:http://mybatis.github.io/。可直接通过度娘搜索到,很简单。

官网里有mybatis发布的各种版本以及所明书种种,应该说这里是mybatis的最初的家。

目前,mybatis最新版本是2014年10月11日发布的3.2.8版。为了方便大家,直接将3.2.8版本的jar包下载,以及说明文档地址贴上:See the docsDownload Latest

 

二、功能

Mybatis是支持普通SQL查询,存储过程和高级映射的优秀持久层(ORM)框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索。MyBatis可以使用简单的 XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects)映射成数据库中的记录。

它的前身就是iBatis,iBatis本是apache的一个开源项目,2010年这个项目由apahce sofeware foundation 迁移到了google code,并且改名为MyBatis。

三、mybatis与hibenate的区别

在学习或使用mybatis的过程了,很多人估计都有想到mybatis与同为ORM框架的hibernate区别如何,都有什么优缺点,以下就来个小小的总结:


Mybatis


Hibernate


难易程度


简单易学


较难


封装性


半封装


封装较完整


移植性


较差(由于需己写依赖于数据库的sql)



Sql书写


需要手动编写


不需要


优化


较容易


较难(由于sql是封装,不便优化)


灵活性



较差


流行程度


非常流行


(最)非常流行


应用场景


适合什么样的应用场景,需要在具体项目中去分析得到,希望感兴趣根据经验,提提例子

更多参考:

http://blog.csdn.net/julinfeng/article/details/19821923

http://blog.csdn.net/wangpeng047/article/details/17038659

http://blog.csdn.net/kobejayandy/article/details/9429007

http://blog.csdn.net/weeweee/article/details/10406815

四、一个简单的例子

每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder从一个xml配置文件或者一个预定义的配置类的实例获得配置信息。

下面摘了一个简单得例子:

1、准备

1.1数据库中建立相应的表

CREATE DATABASE mybatis;

USE mybatis;

CREATE TABLE tb_user(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(16),

age INT

);

INSERT INTO tb_user(name, age) VALUES(‘张三‘, 12);

INSERT INTO tb_user(name, age) VALUES(‘李四‘, 20);

INSERT INTO tb_user(name, age) VALUES(‘王二麻子‘, 30);

1.2 下载jar包,建议下载最新版 mybatis-3.2.8 地址:https://github.com/mybatis/mybatis-3/releases

2.在eclipse中测试使用

2.1导入jar包(会使用maven的人建议使用maven)

2.2建一个mybatis-config.xml配置文件(文件放假src下)

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

<!--  XML 配置文件包含对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源和决定事务范围和控制的事务管理器. -->

<configuration>

<!-- 给对象取别名  -->

<typeAliases>

<typeAlias alias="User" type="org.phf.pojo.User"/>

</typeAliases>

<!-- 配置JDBC连接参数 -->

<environments default="development">

<environment id="development">

<transactionManager type="JDBC"/>

<dataSource type="POOLED">

<!--value值需要根据自己的情况配置-->

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

<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis"/>

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

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

</dataSource>

</environment>

</environments>

<!-- 指明每个关系表的配置文件 -->

<mappers>

<mapper resource="org/phf/mapping/UserMapper.xml"/>

</mappers>

</configuration>

2.3 为封装SqlSessionFactory建个单例

package org.phf.factory;

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;

public class MybatisFactory {

/**

* SqlSessionFactory对象可以看成DataSource(数据库连接池)

* 在应用执行期间,应该只创建一次,建议使用单例模式

* 通过SqlSessionFactoryBuilder来获得数据库配置参数并创建

*/

private static SqlSessionFactory sqlSessionFactory;

/**

* SqlSession对象可以理解成对Connection的封装,即一个数据连接会话

* 它同时也封装了连接和断开过程,提供sql语句的映射

* SqlSession实例不能被共享,它不是线程安全的。

* 所以应该一次性用完后要确保使用finally块来关闭它,关闭时会被收回SqlSessionFactory所管理的连接池中

*/

//private static SqlSession session;

static

{

try {

String resource = "mybatis-config.xml";

InputStream is = Resources.getResourceAsStream(resource);

sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

System.out.println(sqlSessionFactory);

} catch (Exception e) {

e.printStackTrace();

}

}

//

public static SqlSession getSqlSession()

{

return sqlSessionFactory.openSession();

}

//

public static void close(SqlSession session)

{

if(session != null)

session.close();

}

}

2.4为表建一个映射类User

package org.phf.pojo;

/**

* 数据库表的映射类,每个实例对象映射到表中的一行数据

* 属性的名称和类型对应表中字段名和类型,并提供getter和setter方法

* @author Administrator

*/

public class User {

private Integer id;

private String name;

private Integer age;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

/**方便打印输出*/

@Override

public String toString() {

return "User [id=" + id + ", name=" + name + ", age=" + age + "]\n";

}

}

2.5 创建UserMapper.java接口

//UserMapper.java

package org.phf.mapping;

import java.util.List;

import java.util.Map;

import org.phf.pojo.User;

/**

* 只要定义接口方法,所需sql语句在相应UserMapper.xml中映射

* 为了便于快速理解,只有一个find方法

*/

public interface UserMapper {

//一条数据可以返回表对象,属性对应列名

User find(Integer id);

}

2.6  建立UserMapper.xml文件

创建表映射类创建的XXXmapper.xml配置文件,此处为UserMapper.xml(配置在mybatis-config.xml的<mappers>…</mappers>中)

<?xml version="1.0" encoding="gbk"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"mybatis-3-mapper.dtd">

<!-- MyBatis 真正的力量是在映射语句中。这里是奇迹发生的地方。

对于所有的力量,SQL 映射的 XML 文件是相当的简单。

当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 95%的代码量。

MyBatis 的构建就是聚焦于 SQL 的,使其远离于普通的方式。Mybatis封装处理了连接和查询结果获取 -->

<mapper namespace="org.phf.mapping.UserMapper">

<!--

select 查询语句是使用 MyBatis 时最常用的元素之一。

id(方法)是 get, parameterType(参数类型)是Integer, resultType(返回类型)是 User对象,其属性就是列名,值是列对应的值。

-->

<select id="find" parameterType="Integer" resultType="User">

SELECT * FROM TB_USER WHERE ID = #{id}

</select>

</mapper>

2.7 测试代码(大功告成,只待测试)

package org.phf.test;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.junit.Test;

import org.phf.factory.MybatisFactory;

import org.phf.mapping.UserMapper;

import org.phf.pojo.User;

public class TestUserMapper {

@Test

public void test()

{

SqlSession session = null;

try {

//获取SqlSession的对象(需要手动关闭该资源)

session = MybatisFactory.getSqlSession();

//获取业务接口,通过接口类型获取由mybatis生成的匿名实例

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

//调用接口方法,执行操作且获得数据

System.out.println("<---------find by id----------->");

User user = userMapper.find(1);

System.out.println(user);

} catch (Exception e) {

e.printStackTrace();

}

finally{

MybatisFactory.close(session);

}

}

}

若示例摘的不清楚,推荐一个示例如下:

http://yancc.iteye.com/blog/983815

http://blog.csdn.net/wanda39kela/article/details/6103282

http://legend2011.blog.51cto.com/3018495/908956

http://yun342173024.iteye.com/blog/1675680

时间: 2024-10-08 23:18:44

mybatis入门·示例的相关文章

MyBatis1:MyBatis入门

MyBatis是什么 MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的: MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of para

Spring(二)之入门示例

任何编程技术,特别是入门示例,通常都是Hello World,在这里我也遵循这个业界公认的原则. 这里我使用的maven项目,大家如果想要演示,建议使用Eclipse(含maven插件)或Idea(含maven插件)或Eclipse+本地安装maven3以上等. 一.导入Maven依赖 这里我将基本所需的依赖都导入进去了. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w

mybatis入门(二)

mybatis入门(二) 探究sql语句的映射过程 要探究sql执行过程,先看一个简单的小例子 <?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"> <map

Spring MVC 入门示例讲解

MVC框架是什么 Dispatcher Servlet(Spring控制器) Spring入门示例 运行时依赖库 web.xml和spring-servlet.xml文件配置 请求控制器EmployeeController.java 视图模型EmployeeVO.java Dao类 业务层类 视图employeeListDisplay.jsp MVC框架是什么 模型-视图-控制器(MVC)是一个众所周知的以设计界面应用程序为基础的设计模式.它主要通过分离模型.视图及控制器在应用程序中的角色将业务

SpringMVC 入门示例讲解

首先要了解什么是MVC,MVC全称是Model View Controller,是模型(Model)-视图(View)和控制器(Controller)的缩写,一种软件设计典范,用一种业务逻辑·.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. 伯乐在线-ImportNew:       http://www.importnew

MyBatis入门基础(一)

一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记录于此,方便大家参考,也方便自己查阅. 话不多说,先看看原始的JDBC程序代码,看看这样的代码存在什么问题. package com.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.P

ehcache2.8.3入门示例:hello world

一.pom.xml 依赖项 1 <dependency> 2 <groupId>net.sf.ehcache</groupId> 3 <artifactId>ehcache</artifactId> 4 <version>2.8.3</version> 5 </dependency> 6 7 <dependency> 8 <groupId>org.slf4j</groupId>

OpenCV 入门示例之五:一个复杂点的变换

前言 前文介绍了一个简单的变换.需要注意的是,很多时候,输出和输入图像的格式是不同的( 大小,深度,通道 ).在本文将展示的程序中,对图像进行了缩放( 使用cvPyrDown 函数 ),这种情况下需要先定制好输出图像的格式,然后再将其与输入图像一起传递进缩放函数. 代码示例 1 // 此头文件包含图像IO函数的声明 2 #include "highgui.h" 3 // 此头文件包含基本的图像处理函数和高级计算机视觉算法 4 #include "cv.h" 5 6

Android OpenGL入门示例:绘制三角形和正方形 (附完整源码)

Android上对OpenGl的支持是无缝的,所以才有众多3D效果如此逼真的游戏,在Camera的一些流程中也有用到GLSurfaceView的情况.本文记录OpenGL在Android上的入门级示例,绘制一个三角形和正方形.尽管功能简单,可是我捣腾了好几个晚上,大量网上文章上的代码都有点问题,不是绘制不出来就是挂了. 第一个文件:MainActivity.java package com.example.learnopengl1; import android.opengl.GLSurface