码迷,mamicode.com
首页 > 其他好文 > 详细

MyBatis学习笔记(一):HelloWorld

时间:2015-09-18 13:57:41      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

一、简介

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


MyBatis学习笔记(一):HelloWorld

标签:

原文地址:http://my.oschina.net/kolbe/blog/508052

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!