编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

MyBatis介绍及入门实例(mybatis详细教程)

wxchong 2024-07-19 05:46:47 开源技术 14 ℃ 0 评论

简介

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

其中mybatis的下载,可以通过github获取,地址:https://github.com/mybatis/mybatis-3

实例准备工作

为了便于理解,实例采用eclipse的普通工程加mysql作为讲解。

其中数据库用用户作为演示的实例,在mysql数据库中创建用户表,其用户结构及数据内容如下:

/*用户表 */
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户编号',
  `username` varchar(20) DEFAULT NULL COMMENT '用户名',
  `password` varchar(20) DEFAULT NULL COMMENT '密码',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
insert  into `user`(`id`,`username`,`password`) values (1,'demo','123456');

在eclipse中创建一个java工程。目录结构如下:

com.example.mybatis.config:用于存放mybatis的配置文件

com.example.mybatis.entries:用于存放对应的用户表对应的实体类

com.example.mybatis.mappers:用于存放mytabtis对应映射文件

test:用于存放对应的测试用例

通过github下载mybatis,把里面的mybatis-x.x.x.jar、log4j以及对应数据库类型的驱动放到lib目录下作为项目环境的依赖jar。

创建及配置MyBatis的资源配置文件

在com.example.mybatis.config创建一个名为mybatis-config.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">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://127.0.0.1/mybatis"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
  <!-- 映射文件集合列表 -->
  </mappers>
</configuration>

文件中的driver,url,username,password根据实际情况进行配置。

编写配置文件的测试用例,测试配置信息是否正确。测试用例代码如下:

package com.example.mybatis.config;

import static org.junit.Assert.*;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

public class MybatisConfigTest {

	@Test
	public void test() throws IOException {
		String resource = "com/example/mybatis/config/mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		assertNotNull(sqlSessionFactory);
	}

}

创建用户的实体类

在com.example.mybatis.entries目录下创建用户实体类文件:User.java。

package com.example.mybatis.entries;

/**
 * 用户实体类
 * @author root
 *
 */
public class User {

	private Long id;
	
	private String username;
	
	private String password;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
	}
}

创建针对用户表实现的映射文件

在com.example.mybatis.mappers目录下创建一个user.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="com.example.mybatis.mappers.user">
  <select id="selectById" resultType="com.example.mybatis.entries.User">
    select * from user where id = #{id}
  </select>
</mapper>

把创建的user.xml添加到mybatis配置文件的映射器中,即加入<mappers></mappers>中。

  <mappers>
  <!-- 映射文件集合列表 -->
  <mapper resource="com/example/mybatis/mappers/user.xml"/>
  </mappers>

实现根据用户id获取用户信息用例

在test目录下com.example.mybatis 编写一个测试用例,根据用户id获取用户信息。

测试用例代码:

package com.example.mybatis.config;

import static org.junit.Assert.*;

import java.io.IOException;
import java.io.InputStream;

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.Test;

import com.example.mybatis.entries.User;

public class GetUserInfoByIdTest {

	@Test
	public void test() {
		String resource = "com/example/mybatis/config/mybatis-config.xml";
		SqlSession sqlSession=null;
		try {
			InputStream inputStream = Resources.getResourceAsStream(resource);
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			sqlSession=sqlSessionFactory.openSession();
			User user=  sqlSession.selectOne("com.example.mybatis.mappers.user.selectById", 1);
			System.out.println(user.toString());
			assertNotNull(user);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			sqlSession.close();
		}
	}

}

测试结果:


总结

通过示例我们可以发现最终查询数据是通过SqlSession来实现的。而SqlSession是通过一个会话工厂SqlSessionFactory获取的。所以每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表