前言

  再过一个月,转行做java web就满一年了。当初吸引我进入公司的,其实并不是java web,而是领导给我描述的hadoop生态圈、公司的hadoop集群以及大数据业务。可是进入公司后才发现,公司的主要开发是java web,会涉及到一些hdfs、hive以及spark的使用,但并不是重点。无奈走上了这条路,也只能硬着头皮干了。在公司,都是基于封装好的ssh框架开发,不甚了解,着实心慌,所以闲暇时候,自己会去找找spring,mybatis,springmvc的资料看看,然都不成体系。做事总得有章法,所以决定写几篇博客,一来可以使自己的学习过程有序进行,二来便于以后温习使用。

正文

1.为什么会有Mybatis

  正常情况下,我们使用java操作数据库,最常见的方式就是:

  1)拼接jdbc连接串,如一个mysql连接串

url = "jdbc:mysql://" + ip + ":" + port + "/" + serviceName + "?useUnicode=true&characterEncoding=UTF8";

  2)获取jdbc连接,如    

Class.forName(driverClass);
conn = DriverManager.getConnection(url, user, pwd);

  3)执行操作

this.pstmt = getConnection().prepareStatement(sql);
return this.pstmt.executeQuery(sql);
...
rs.close();
...
conn.close();

观察上面的代码,可以发现,都是模板式代码,大量的重复工作有没有!!我们都知道,偷懒是人类进步的原动力,正式这种本能,产生了mybatis。我们看一下mybatis的官方介绍:

避免了几乎所有的jdbc代码,确实很诱人,做事情,有巨人的肩膀可以站,那就不要浪费资源。

2.数据库准备

  既然Mybatis是跟数据库打交道,所以我们就需要把数据库准备好,我使用的是mysql数据库,建了测试数据库和测试表,如下所示:

  

  数据库:mybatis

  测试表:users(id, name, age)

  测试数据:随便写入的数据

  与这张表对应的实体类:

package org.tonny.entity;

public class User
{
private int id; private String name; private int 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;
} @Override
public String toString()
{
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
} }

3.Mybatis程序开发过程

  这么好的类库,当然要拿过来为我们所用。使用之前,我们需要下载并引入相关的jar包。Mybatis是我所见过的最清晰、独立的jar包,只需要下载一个mybatis-3.3.1.jar就可以了,到网上都可以找到。另外,因为要连接数据库,所以还需要相关的数据库驱动包,我使用的是mysql数据库,引入了mysql-connector-java-5.1.26-bin.jar包。这两个jar包准备好了,就可以。工程目录结构如下:

  

3.1数据库信息

  我将数据库的连接信息写在了一个单独的文件中,即db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
name=root
password=1qaz2wsx

  这些信息将会在Mybatis的配置文件中用到,配置文件mybatis.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>
<!-- 指定数据库信息文件 -->
<properties resource="db.properties"></properties> <!-- 数据库环境配置如果和spring整合就不需要配置了,完全交给spring -->
<!-- environments中可以配置多个数据库,但是同一时间只能使用一个。
default标识当前默认使用的数据库,当前默认使用mysql
-->
<environments default="mysql">
<environment id="mysql">
<!-- 事务管理器,当前只使用了mybatis框架,所以使用jdbc事务管理器。
如果与spring集成的话,可以使用spring的事务管理器 -->
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息,使用数据库连接池(POOLED)方式连接 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${name}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments> <!-- 管理每张表的映射文件 -->
<mappers>
<!-- 需要将每张表的配置文件加载进来,使用resource引入 -->
<mapper resource="org/tonny/mapper/UsersMapper.xml" /> </mappers>
</configuration>

  其中注释比较详细,不再赘述。文件中<mapper resource="org/tonny/mapper/UsersMapper.xml" />是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">
<!-- 文件的命名 表名 + Mapper --> <!--
namespace:映射文件的命名空间 命名规则是映射文件所在的Package名 + 文件名
-->
<mapper namespace="org.tonny.mapper.UsersMapper">
<!-- parameterType:传入参数的类型; resultType:结果的数据类型 -->
<select id="getUserById" parameterType="int" resultType="org.tonny.entity.User">
SELECT *
FROM users WHERE id=#{id}
</select>
</mapper>

这个文件的命名规则:表名(首字母大写,驼峰格式) + Mapper ,如我的表为users,那么文件名就是UsersMapper.xml

3.2调用及测试

  有了上面的文件,就可以连接数据库进行测试了。这里我引入了单元测试JUnit4,引入方法如下:

  在工程上右击,选择property,左侧选择Java Builder Path 一项,右侧选择Libraries标签,点击Add Library...按钮,选择JUnit即可。

  然后就是建立测试类了:

  

package org.tonny.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List; 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.Before;
import org.junit.Test;
import org.tonny.entity.User; public class MyTest
{
private SqlSessionFactory sqlSessionFactory = null; @Before
public void setUp()
throws IOException
{
// 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
// InputStream inputStream = MyTest.class.getClassLoader().getResourceAsStream("mybatis.xml");
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
// 构建sqlSession的工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} @Test
public void getUserById()
{
SqlSession sqlSession = sqlSessionFactory.openSession(); // 映射sql的标识字符串
String sql = "org.tonny.mapper.UsersMapper.getUserById";
int param = 1;
User user = sqlSession.selectOne(sql, param);
sqlSession.close();
System.out.println(user);
}
}

  注意,测试类的名字千万不要写成Test,不然会无法测试。setUp函数每次都会在测试方法之前执行,所以可以把一些固定的内容写在这个方法里面。在右面方法右击,一次点击按钮,如下图所示:

  如果输出了结果,则测试成功。

后记

  这些才仅仅是学习Mybatis的开始,还有很多问题待研究,比如,如果传入多个参数,如果进行增删改操作等,后面继续努力!

MyBatis学习(一)的更多相关文章

  1. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...

  2. MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合(转载)

      孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(八)--Mybatis3.x与Spring4.x整合 一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: m ...

  3. MyBatis学习总结(七)——Mybatis缓存(转载)

      孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(七)--Mybatis缓存 一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的 ...

  4. (原创)mybatis学习二,spring和mybatis的融合

    mybatis学习一夯实基础 上文介绍了mybatis的相关知识,这一节主要来介绍mybaits和spring的融合 一,环境搭建 1,jar包下载,下载路径为jar包 2,将包导入到java工程中 ...

  5. (原创)mybatis学习一,夯实基础

    一,what?(是什么) MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可 ...

  6. MyBatis学习--简单的增删改查

    jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: Public static void main(String[] args) ...

  7. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...

  8. 【Todo】Mybatis学习-偏理论

    之前写过好几篇Mybatis相关的文章: http://www.cnblogs.com/charlesblc/p/5906431.html  <SSM(SpringMVC+Spring+Myba ...

  9. MyBatis学习系列三——结合Spring

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring MyBatis在项目中应用一般都要结合Spring,这一章主要把MyBat ...

  10. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

随机推荐

  1. linux(centos)下挂载nefs文件系统

    有时候,在将硬盘插到Linux系统上,挂载硬盘时一直提示:unknown filesystem type 'ntfs'.在尝试网上的方法也遇到了一些问题. 这是有的 linux 发行版并不默认支持挂载 ...

  2. 使用Java代码实现对宽带的连接

    对于多个类似的用户名相同的密码,运行java代码实现对宽带的自动连接 这是源代码: import java.io.BufferedReader; import java.io.IOException; ...

  3. REVERSE-极客大挑战-geek2.apk

    嗯 一道apk的题目,题目本身并不是很难,但是我用的python却坑了我小半天...不过在纠错的过程中我也学到了不少东西 链接:http://pan.baidu.com/s/1i5LkJDr  密码: ...

  4. BZOJ 1040 树形DP+环套树

    就是有n个点n条边,那么有且只有一个环那么用Dfs把在环上的两个点找到.然后拆开,从这条个点分别作树形Dp即可. #include <cstdio> #include <cstrin ...

  5. C#中可直接调用WIN32的API函数--USER32.DLL

    Win32的API函数可以直接在C#中直接调用,在做WinForm时还是很有帮助的.有时候直接调用Win32的API,可以很高效的实现想要的效果. using System; using System ...

  6. css声明应用优先级

    1.特殊性 选择器的特殊值由四部分组成:0,0,0,0 第一位预留给内联样式   <h1 style="color:red;"></h1> 第二位属于ID选 ...

  7. C# xpath

    XPath最通俗的教程(ZZ)   以下是本人找到的最完整最易懂的XPath教程,不敢私藏,拿出来与大家分享.帮我点旁边的google广告呀. 实例 1基本的XPath语法类似于在一个文件系统中定位文 ...

  8. 【转】浅思OC的语言特性

    算了算,学习IOS已经有一段时间了.今天花了点时间思考一下OC的语言特性,让自己的心不要那么浮躁,注重基础,回归本源. OC做为一门面向对象语言,自然具有面向对象的语言特性,如封装.继承.多态.他具有 ...

  9. 【转】为现代JavaScript开发做好准备

    原文转自:http://blog.jobbole.com/66135/ 今天无论是在浏览器中还是在浏览器外,JavaScript世界正在经历翻天覆地地变化.如果我们谈论脚本加载.客户端的MVC框架.压 ...

  10. Mongodb在Linux下安装及配置

    1.下载mongodb的linux版本(注意32位和64位的区别),下载地址:http://www.mongodb.org/downloads 2.将下载的mongodb安装文件mongodb-lin ...