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. 一 java线程的等待/通知模型

    java 中线程之间的通信问题,有这么一个模型:一个线程修改了一个对象的值,而另一个线程感知到了变化,然后进行相应的操作,整个过程开始于一个线程,而最终执行又是另一个线程.前者是生产者,后者就是消费者 ...

  2. php memcache扩展 出现错误dyld: Symbol not found: _mmc_queue_free

    mac 10.10 系统安装php memcache扩展 在使用memcache的时候出现错误dyld: Symbol not found: _mmc_queue_free需要重新编译memcache ...

  3. mac 日式键盘反斜线\

    日式键盘 没有反斜线\, 但是有快捷键可以输入:alt+¥  (英文模式下)

  4. 去重 ROW_NUMBER() OVER(PARTITION BY 分组字段 ORDER BY 排序字段) RN

    关键字  ROW_NUMBER() OVER(PARTITION BY 分组字段 ORDER BY 排序字段) RN 按照分组字段进行排序并标编号 ROW_NUMBER() OVER(PARTITIO ...

  5. IAR FOR ARM的安装及破解

    本博文主要是介绍如何安装以及破解IAR FOR ARM . 1.下载IAR FOR ARM以及注册机 IAR FOR ARM下载:http://pan.baidu.com/s/1i5t1qF7 注册机 ...

  6. catalina.properties

    追踪 startup.bat set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat" call "%EXECUTABLE%&q ...

  7. AngularJs 时间控件

    <div class="form-group col-sm-4 clearfix"> <label class="col-sm-5 control-la ...

  8. Java SE、Java EE、Java ME

    Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程序.J ...

  9. Strong name signature not valid for this assembly Microsoft.mshtml.dll

    Strong name signature not valid for this assembly Microsoft.mshtml.dll  http://social.msdn.microsoft ...

  10. 关于普通定时器与高级定时器的 PWM输出的初始化的区别

    不管是普通定时器还是高级定时器,你用哪个通道,就在程序里用OC多少.比如CH3对应OC3 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;  TIM_ ...