What's the Mybatis?

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO).

自己使用mybatis有大半年了,相比较厚重的hibernate和其他orm框架,mybatis更加的灵活轻巧,可以更好的配合数据库和sql语句来开发项目。

这篇开始,我希望可以写一个关于mybatis的快速教程,除了mybatis,中间还会贯穿一些mysql的资料和mybatis与其他框架的配置,这个系列也算是自己这段时间对使用mybatis框架的一个总结。

环境搭建

我使用的环境有

  mysql:mysql5.5.37

  jdk:openjdk1.7

  eclipse:java ee-Kepler Service Release 2

我们还需要在mysql数据库中建立一个名字叫做blog的schema,并建立一个user表

 CREATE TABLE `blog`.`user` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NULL,
`age` INT NULL,
PRIMARY KEY (`id`));

还要记得给这个表加几条数据哟

 INSERT INTO `blog`.`user` (`name`, `age`) VALUES ('Mybatis', '');
INSERT INTO `blog`.`user` (`name`, `age`) VALUES ('struts2', '');
INSERT INTO `blog`.`user` (`name`, `age`) VALUES ('hibernate', '');

接着我们在eclipse中新建一个web项目。

将jdbc的驱动包mysql-connector-java-5.1.30-bin.jar放置到web-inf下的lib文件夹中去。

再到mybatis在github的主页上下载mybatis的jar包.

https://github.com/mybatis/mybatis-3/releases

我使用的版本是3.2.3(最新的版本是3.2.7)

当然,你也可以使用maven来管理mybatis的包,只需要在项目的pom.xml中添加.

 <dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.3</version>
</dependency>

第一个CRUD

我们在pro.app下新建一个model包,新建一个user类与数据库相对应的vo类。

 package pro.app.model;

 public class User {
private int id;
private String name;
private int age;
public User(){}
public User(String name, int age) {
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

在pro.app.inter下建立UserDAO接口,在这个接口中定义一个根据id找到User的方法selectOne()。

 package pro.app.inter;
import org.apache.ibatis.annotations.Param; import pro.app.model.User; public interface UserDAO {
public User selectOne(@Param("id")Integer id);
}

在pro.app.mapper下建立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="pro.app.inter.UserDAO">
<select id="selectOne" parameterType="int" resultType="User">
select * from user where id = #{id,jdbcType=INTEGER}
</select>
</mapper>

<select></select>标签对来定义对应UserDAO中的selectOne()方法需要执行的sql语句。这也是mybatis的核心功能。

现在我们还需要在src源目录下放置一个Configuration.xml文件用于mybatis的配置。

<?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>
<typeAliases>
<typeAlias alias="User" type="pro.app.model.User"/>
</typeAliases>
<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/blog?useUnicode=true&amp;characterEncoding=utf-8"/>
<property name="username" value="mybatis"/>
<property name="password" value="mybatis"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="pro/app/mapper/UserMapper.xml"/>
</mappers>
</configuration>

在配置文件中通过定义现在的environment , 来指定目前的开发状态,用jdbc作为事务和连接池的配置与mysql数据库相链接。

在mappers下写入需要用到的mybatis 需要用到的mapper文件。

现在我们可以建立一个类测试mybatis是不是工作了,在pro.test下建立一个userTest类。

 package pro.app.test;

 import java.io.Reader;

 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 pro.app.inter.UserDAO;
import pro.app.model.User; public class UserTest {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static{
try{
reader= Resources.getResourceAsReader("Configuration.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
}catch(Exception e){
e.printStackTrace();
}
}
public static SqlSessionFactory getSession(){
return sqlSessionFactory;
}
public static void main(String[] args) {
SqlSession session = sqlSessionFactory.openSession();
try {
UserDAO userDao = session.getMapper(UserDAO.class);
User user = userDao.selectOne(1);
System.out.println("name : "+user.getName());
System.out.println("age : "+user.getAge());
} finally {
session.close();
}
}
}

在这个程序中,我们通过io类库中的Reader类来读取mybatis的相关配置文件,并且使用mybatis里的 SqlSessionFactoryBuilder类构建一个SqlSessionFactory。

这个SqlSessionFactory就相当与mybatis配置文件的化生了,对应各种被操作的类而言,它就是整个项目中的上帝了,上帝不能老是出现吧,所以一般在一个项目中指挥有一个SqlSessionFactory出现。接着我们的程序又通过SqlSessionFactory来获得一个SqlSession,SqlSession 对象完全包含以数据库为背景的所有执行 SQL 操作的方法。通过这个SqlSession的实例化对象,可以获得UserDAO接口的一个实例,接下来就可以执行相应的方法了。

来运行这个程序啦,控制台输出了以下内容

 name : mybatis
age :

bingo!我们如愿通过mybatis获得了数据库的数据。

接下来我们可以在UserDAO和UserMapper中添加其他的配置完成CRUD的任务。

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="pro.app.inter.UserDAO">
<select id="selectOne" parameterType="int" resultType="User">
select * from user where id = #{id,jdbcType=INTEGER}
</select>
<insert id="insertOne" parameterType="User">
insert into user (name,age)
values(
#{name,jdbcType=VARCHAR},
#{age,jdbcType=INTEGER}
)
</insert>
<delete id="deleteOne" parameterType="java.lang.Integer" >
delete from user
where id = #{id,jdbcType=INTEGER}
</delete>
<update id="updateOne" parameterType="User">
    update user
    set name=#{name,jdbcType=VARCHAR},
    age=#{age,jdbcType=INTEGER}
    where id= #{id,jdbcType=INTEGER}
   </update>
</mapper>

UserDAO.java

 package pro.app.inter;
import org.apache.ibatis.annotations.Param; import pro.app.model.User; public interface UserDAO {
public User selectOne(@Param("id")Integer id); public void insertOne(User user); public void deleteOne(@Param("id")Integer id); public void updateOne(User user);
}

和select方法一样,通过update,delete,insert标签分别对updateOne()、deleteOne(),insertOne()方法,并编写相应的接口方法来实现对应的CRUD任务。

总结

通过一个简单的CRUD例子熟悉mybatis的基本实现。

Hello Mybatis 01 第一个CRUD的更多相关文章

  1. SSM框架之Mybatis(2)CRUD操作

    Mybatis(2)CRUD 1.基于代理Dao实现CRUD操作 使用要求: 1.持久层接口(src\main\java\dao\IUserDao.java)和持久层接口的映射配置(src\main\ ...

  2. mybatis升级案例之CRUD操作

    mybatis升级案例之CRUD操作 一.准备工作 1.新建maven工程,和入门案例一样 主要步骤如下,可参考mybatis入门实例 a.配置pom.xml文件 b.新建实例类User.DAO接口类 ...

  3. Mybatis入门及第一个Mybatis程序

    Mybatis笔记整理 所需要的基础知识 JDBC Mysql Java基础 Maven Junit 框架:是有配置文件的.最好的方式:看官网文档 1.简介 1.1.什么是MyBatis 简介 什么是 ...

  4. Mybatis实现简单的CRUD(增删改查)原理及实例分析

    Mybatis实现简单的CRUD(增删改查) 用到的数据库: CREATE DATABASE `mybatis`; USE `mybatis`; DROP TABLE IF EXISTS `user` ...

  5. 瞧一瞧,看一看呐,用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!!

    瞧一瞧,看一看呐用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!! 现在要写的呢就是,用MVC和EF弄出一个CRUD四个页面和一个列表页面的一个快速DEMO,当然是在不 ...

  6. 用MVC+EF快速弄出一个CRUD

    瞧一瞧,看一看呐,用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!! 现在要写的呢就是,用MVC和EF弄出一个CRUD四个页面和一个列表页面的一个快速DEMO,当然是在 ...

  7. 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序

    使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻 ...

  8. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(三)(错误整理篇)

    使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二) 以上两篇已经把流 ...

  9. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二)(代码篇)

    这篇是上一篇的延续: 用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 源代码在github上可以下载,地址:https://github.com/guoxia ...

随机推荐

  1. 多线程Server client

    项目结构 项目设计 客户端同时大量请求服务端,服务端多线程处理连接,并发序列化获得客户端发送的数据,并做出处理. IClients package simple.socket; import java ...

  2. 什么是F#

    作者:Alexey Bykov@EastBancTech原文:http://bit.ly/1nGroOz翻译:kk1982.com转载请注明 简介 F#是由微软研究团队为.NET平台研发的一种现代函数 ...

  3. angular中ng-include失效的原因

    使得angular的ng-include指令失效的原因有两个: 例如:在demo.html中的代码<div ng-include = "'demo1.html'">&l ...

  4. 禁止Visual Studio中的编译警告

    VC编译器有个很蛋痛的自家警告系统,默认下各种开源库比如CGAL,各种4996,而一般自己写的 如sscanf,fopen这种单个文件,在文件头加个 #pragma warning (disable ...

  5. 【线段树】bzoj1756 Vijos1083 小白逛公园

    我们知道,求一段序列的最大子段和是O(n)的,但是这样是显然会超时的. 我们需要一个数据结构来支持修改和计算的操作,对于这种修改一个而查询区间的问题,考虑使用线段树. 在线段树中,除了左端点,右端点, ...

  6. 阿里云安装Tomcat

    1.Apache官方网站下载Tomcat http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.0.35/bin/apache-tomcat-8.0 ...

  7. C# 获取本机指定类型指定网卡的Ip地址

    1.简单方式 ,适用于单网卡 string hostName = Dns.GetHostName(); IPAddress[] addresses = Dns.GetHostAddresses(hos ...

  8. protobuf坑1

    或者说特性吧,没仔细看protobuf代码,也许我还理解不够. 按照陈硕大牛的这篇帖子的介绍,“它包含了程序编译的时候所链接的全部 protobuf Message types” 实际开发过程中发现必 ...

  9. Windows Phone 8.1 新特性 - 控件之FlipView

    本篇为大家介绍 Windows Phone 8.1 中新增的 FlipView 控件,它的中文名字叫做:翻转视图. 虽然听起来有点拗口,但是它的用途大家一定不会陌生.在 Windows Phone 8 ...

  10. css中关于position属性的探究(原创)

    关于position属性的设置,头脑中一直觉得不是很清楚,所以借助这次机会单独自己测试了一下,记作学习笔记.   首先,css的position属性包含下面四种设置情况: static:默认属性.指定 ...