MyBatis学习笔记(一):HelloWorld

一、简介

MyBatis是一个轻量级的持久层框架,它可以帮我们省去繁杂的JDBC操作,包括获取数据库连接、设置参数、处理结果集、事务管理等等。通过XML配置或注解,即可实现简单的完成原本复杂的操作。

二、准备工作

1. 下载 jar 包,可以在 Maven Repository (在页面中间有个Artifact,旁边点击 Download JAR 即可)下载最新版本(mybatis-3.3.0)的 jar 包,然后添加到 classpath 中。

2. 如果使用的是 Maven 创建的项目,那么可以简单复制 Maven Repository 中的依赖配置即可,具体配置如下:

<!-- Maven中pom.xml的MyBatis依赖配置 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.3.0</version>
</dependency>

3. 创建数据库以及数据表并插入示例数据,这里假设创建的是mybatis库和students表,我使用的是MySql数据库

-- 创建mybatis数据库
create database mybatis
-- 切换到mybatis数据库
use mybatis
-- 创建students表
create table students(id int auto_increment primary key, name varchar(50));
-- 插入示例数据
insert into students(name) values(‘kolbe‘);

三、MyBatis的入门实例

1. 新建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>
	<environments default="development">
		<environment id="development">
			<!-- 事务管理类型,JDBC表示直接使用JDBC的提交和回滚设置,依赖于数据源得到的连接来管理事务 -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池POOLED表示使用数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>

	<mappers>
		<!-- SQL代码和映射信息配置文件 -->
		<mapper resource="cn/kolbe/mybatis/StudentMapper.xml" />
	</mappers>
</configuration>

2. 新建一个名为Student的Java Bean类

package cn.kolbe.mybatis;

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

3. 新建SQL语句映射文件StudentMapper.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">
<!-- namespace必须是唯一的,建议用该文件所在的包路径全类名 -->
<mapper namespace="cn.kolbe.mybatis.StudentMapper">
	<!-- select:表示这是一个查询操作 -->
	<!-- id:用来配合namespace来定位这个操作,也就是在调用时,将采用cn.kolbe.mybatis.StudentMapper.getStudent -->
	<!-- resultType:表示返回值类型,必须是全类名,MyBatis将自动为我们将查询结果封装成Student对象 -->
	<!-- parameterType:表示传进来的参数的类型,因为传的是id主键,所以是int型 -->
	<select id="getStudent" parameterType="int" resultType="cn.kolbe.mybatis.Student">
		<!-- #{id}:表示占位符,也就是调用时必须为其传一个id参数进来,注意是#不是$ -->
		select * from students where id = #{id}
	</select>
</mapper>

4. 新建一个测试类StudentDao,来测试配置的效果

package cn.kolbe.mybatis;

import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

public class StudentDao {

	@Test
	public void testGetStudent() throws Exception {
		// 1. 加载MyBatis的配置文件:mybatis.xml(它也加载关联的映射文件,也就是mappers结点下的映射文件)
		InputStream in = this.getClass().getClassLoader().getResourceAsStream("mybatis.xml");
		// 2. SqlSessionFactoryBuidler实例将通过输入流调用build方法来构建 SqlSession 工厂
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
		// 3. 通过工厂获取 SqlSession 实例,SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。
		SqlSession session = sqlSessionFactory.openSession();
		// 4. 准备基本信息
		// 4.1) statement: 用来定位映射文件(StudentMapper.xml)中的语句(通过namespace id + select id)
		String statement = "cn.kolbe.mybatis.StudentMapper.getStudent";
		// 4.2) paramter: 传进去的参数,也就是需要获取students表中主键值为1的记录
		int parameter = 1;
		// 5. SqlSession 实例来直接执行已映射的 SQL 语句,selectOne表示获取的是一条记录
		Student student = session.selectOne(statement, parameter);
		System.out.println(student);
		// 6. 关闭输入流和SqlSession实例
		in.close();
		session.close();
	}
}

5. 运行后可以看到控制台输出,表示配置成功了

Student [id=1, name=kolbe]

6. 该项目的包结构

7. 注:

SqlSessionFactoryBuilder:可以被创建销毁,一旦创建了SqlSessionFactory实例,该对象就不在需要了。

SqlSessionFactory:应该是一个应用共享一个工厂实例,而不是随意清除创建,建议在具体应用中采用单例模式来创建和获取该实例,保证该工厂实例的唯一性。

SqlSession:不是线程安全的,多个线程共享将有可能出错,另外用完该实例后要及时调用close()方法将其关闭。

SqlSessionFactory的建议获取方式:

package cn.kolbe.mybatis;

import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class Factory {
	private static SqlSessionFactory factory;
	static {
		factory = new SqlSessionFactoryBuilder().build(
				Factory.class.getClassLoader().getResourceAsStream("mybatis.xml"));
	}

	public static SqlSessionFactory getFactory() {
		return factory;
	}
}

四、实用链接:

MyBatis官方文档http://mybatis.github.io/mybatis-3/zh/index.html 官方的入门文档,难得有中文版本

Maven仓库http://mvnrepository.com/  可以下载各种开源软件的各种版本的jar文件以及添加Maven中的包依赖

MyBatis APIhttp://mybatis.github.io/mybatis-3/apidocs/reference/packages.html

时间: 2024-10-13 11:21:34

MyBatis学习笔记(一):HelloWorld的相关文章

MyBatis:学习笔记(3)——关联查询

MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统,如果我们将用户信息和订单信息都保存在user表中,这样就不存在联结关系,因为我们仅仅操作一张表就好. 但是这是非常不明智的选择,举例来说,一个用户可以拥有多个订单,如果保存在一个表中,势必会导致用户信息的多次出现,因为每个订单绑定的用户信息都是相同的. 所以我们尽量要将不同的信息存储与不同的表中,但

mybatis学习笔记(1)

之前做项目的时候,DAO层写了一些spring jdbc,用起来的确不是很方便,今天特意去学习了新的框架:mybatis.把之前用spring-jdbc写的内容换成了mybatis框架搭建的内容. 首先你要到mybatis的官网去下mybatis的jar包:mybatis-3.2.7.jar.由于我是在spring的基础上去搭建mybatis所以还要去弄一个mybatis-spring-1.2.2.jar, 这个连接的包好像在spring官方是找不到的,需要自己去网上找. 进入正题.首先在src

Mybatis学习笔记(二) 之实现数据库的增删改查

开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载.首先建立一个名字为 MyBaits 的 dynamic web project 1. 可以创建maven项目,依赖的包mybatis-3.2.0-SNAPSHOT.jar,mysql-connector-java-5.1.22-bin.jar <!-- mybatis包 --> <depe

MyBatis MapperScannerConfigurer配置――MyBatis学习笔记之八

MyBatis MapperScannerConfigurer配置——MyBatis学习笔记之八 2012-09-02 20:01:42 标签:Spring MyBatis MapperScannerConfigurer bean默认命名 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://legend2011.blog.51cto.com/3018495/980150 在上一篇博文的示例中,我们在beans.xml中配置了stu

mybatis学习笔记(9)-订单商品数据模型分析

mybatis学习笔记(9)-订单商品数据模型分析 mybatis学习笔记9-订单商品数据模型分析 数据模型分析思路 数据模型分析 订单商品数据模型建表sql 本文对接下来几篇博客中用到的数据模型进行分析,并附上建表sql文件和测试数据文件 数据模型分析思路 每张表记录的数据内容 分模块对每张表记录的内容进行熟悉,相当于你学习系统需求(功能)的过程. 每张表重要的字段设置 非空字段.外键字段 数据库级别表与表之间的关系 外键关系 表与表之间的业务关系 在分析表与表之间的业务关系时一定要建立在某个

mybatis学习笔记(11)-多对多查询

mybatis学习笔记(11)-多对多查询 mybatis学习笔记11-多对多查询 示例 多对多查询总结 resultMap总结 本文实现多对多查询,查询用户及用户购买商品信息. 示例 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表:orders.orderdetail.items sql SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdeta

mybatis学习笔记(11)-一对多查询

mybatis学习笔记(11)-一对多查询 mybatis学习笔记11-一对多查询 示例 小结 本文实现一对多查询,查询订单及订单明细的信息 示例 sql 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.item

mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现

项目结构  基础入门可参考:mybatis学习笔记(一)-- 简单入门(附测试Demo详细过程) 开始体验 1.新建项目,新建类MybatisUtil.java,路径:src/util/MybatisUtil.java package util; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; i

springmvc+mybatis学习笔记(汇总)

springmvc+mybatis学习笔记(汇总) 标签 : springmvc mybaits springmvcmybatis学习笔记汇总 目录 联系作者 笔记分为两大部分:mybatis和springmvc mybatis springmvc 笔记内容主要是mybatis和springmvc的一些基本概念和使用方法,涉及概念介绍.环境搭建.编程细节.运行调试等方面. 这套笔记整体偏入门和应用,适合快速上手,对底层实现和机理并未做过多分析.我后续会研读spring源码,并把学习的收获写成博客

mybatis学习笔记(13)-查询缓存之二级缓存

mybatis学习笔记(13)-查询缓存之二级缓存 mybatis学习笔记13-查询缓存之二级缓存 二级缓存原理 开启二级缓存 调用pojo类实现序列化接口 测试方法 useCache配置 刷新缓存就是清空缓存 应用场景和局限性 本文主要讲mybatis的二级缓存,二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的. 二级缓存原理 首先开启mybatis的二级缓存. sqlS