小言_互联网的博客

MyBatis研习录(01)——MyBatis概述与入门

302人阅读  评论(0)

C语言自学完备手册(33篇)

Android多分辨率适配框架

JavaWeb核心技术系列教程

HTML5前端开发实战系列教程

MySQL数据库实操教程(35篇图文版)

推翻自己和过往——自定义View系列教程(10篇)

走出思维困境,踏上精进之路——Android开发进阶精华录

讲给Android程序员看的前端系列教程(40集免费视频教程+源码)


版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl

ORM模型

简单地说,ORM模型就是数据库的表与简单Java对象(Plain Ordinary Java Object,简称 POJO)的对象关系映射模型(Object Relational Mapping 简称ORM),它主要解决数据库数据和POJO对象的相互映射。在本系列教程中,我们将详细介绍轻量级的ORM框架MyBatis。

MyBatis概述

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis原本是apache的一个开源项目iBatis, 2010年该项目由apache software foundation 迁移到了google code并改名为MyBatis 。2013年11月MyBatis又迁移到Github

The MyBatis SQL mapper framework makes it easier to use a relational database with object-oriented applications. MyBatis couples objects with stored procedures or SQL statements using a XML descriptor or annotations. Simplicity is the biggest advantage of the MyBatis data mapper over object relational mapping tools.

MyBatis对JDBC操作数据库的过程进行了封装,使开发者只需要关注SQL本身,而不需要开发人员花费大量的精力去处理例如注册驱动、创建connection、创建statement、手动设置参数等JDBC操作。之前,当我们使用JDBC持久化的时候,sql语句被硬编码到java代码中,耦合度太高代码不易于维护;一旦我们修改了Java代码就需要对项目进行重新的编译、打包、发布。MyBatis将sql语句和java代码分开,功能边界清晰;前者专注于数据,后者侧重于业务。


MyBatis入门示例

在此,我们以示例的形式介绍MyBatis的入门示例,详细步骤如下:

第一步:数据准备

创建数据库mybatisDatabase和表user

DROP DATABASE IF EXISTS mybatisDatabase;
CREATE DATABASE mybatisDatabase;
use mybatisDatabase;
CREATE TABLE user(
  id INT primary key auto_increment,
  username VARCHAR(50),
  password VARCHAR(50),
  gender VARCHAR(10)
);

INSERT INTO user(username,password,gender) VALUES("lucy","123456","female");
INSERT INTO user(username,password,gender) VALUES("momo","234567","female");
INSERT INTO user(username,password,gender) VALUES("xixi","345678","female");
INSERT INTO user(username,password,gender) VALUES("pepe","456123","female");

SELECT * FROM user;

第二步:创建Java项目

创建普通Java项目并在该项目下新建config和lib文件夹

创建文件完毕后请对config执行Build Path,图示如下:

第三步:User

请在cn.com.pojo创建User类

package cn.com.pojo;

public class User {
	private int id;
	private String username;
	private String password;
	private String gender;
	public User() {
		
	}
	
	public User(int id, String username, String password, String gender) {
		this.id = id;
		this.username = username;
		this.password = password;
		this.gender = gender;
	}

	public int getId() {
		return id;
	}

	public void setId(int 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;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

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

该User类中各属性值与user表尽量保持一致。

第四步:添加jar包

请添加以下jar包并Build Path

  • log4j-1.2.17.jar
  • mybatis-3.4.1.jar
  • mysql-connector-java-5.1.7-bin.jar

第五步:log4j.properties

请在config文件夹中创建log4j.properties并编写其配置,内容如下:

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

第六步:mybatis-config.xml

在config文件夹中创建mybatis的核心配置文件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://localhost:3306/mybatisDatabase"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>
   
</configuration>

该配置文件environments标签主要用于配置数据库相关信息。至于,mybatis-config.xml文件中的其它常用配置,我们在后续的教程中会提到。

第七步:UserMapper.xml

在User的同级目录中创建映射文件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="cn.com.pojo.User">	
  <select id="selectUserById" parameterType="int" resultType="cn.com.pojo.User">
    select id,username,password,gender from user where id = #{id}
  </select>
</mapper>

该mapper的核心功能为:从数据库中查询数据并将查询结果封装成JavaBean对象。

在该配置文件中:

  • namespace表示该mapper的命名空间,其取值为JavaBean的全类名或Mapper接口的全类名
  • select标签表示select语句。其中,id属性用于为sql语句配置唯一标识;parameterType属性用于表示输入参数的类型,一般来说可以省略该属性,但是,如果参数是pojo建议不省略;resultType属性用于指定执行select查询语句之后每行记录对应的JavaBean对象的全类名。
  • 在mapper.xml中使用#{ }表示占位符,类似于JDBC中的占位符?

在完成UserMapper.xml的编写后,再在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://localhost:3306/mybatisDatabase"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>
  
  <!-- 配置mapper -->
  <mappers>
    <mapper resource="cn/com/pojo/UserMapper.xml"/>
  </mappers>
  
</configuration>

通过mappers标签配置各mapper。在mapper标签中使用resource属性指定mapper的路径,其形式为斜杠形式的全路径。

第八步:测试

代码如下:

package cn.com.test;

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 cn.com.pojo.User;
/**
 * 本文作者:谷哥的小弟 
 * 博客地址:http://blog.csdn.net/lfdfhl
 */
public class MybatisTest {

	@Test
	public void testMybatis() {
		SqlSession sqlSession = null;
		try {
			// 读取mybatis的核心配置文件mybatis-config.xml
			InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
			// 创建SqlSessionFactoryBuilder对象
			SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
			// 通过SqlSessionFactoryBuilder解析配置文件获取sqlSessionFactory对象
			SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
			// 通过SqlSessionFactory对象创建SqlSession对象
			sqlSession = sqlSessionFactory.openSession();
			// 利用selectOne()执行查询
			User user = sqlSession.selectOne("cn.com.pojo.User.selectUserById", 1);
			System.out.println(user);
		} catch (Exception e) {

		} finally {
			// 关闭SqlSession
			if (sqlSession != null) {
				sqlSession.close();
			}
		}
	}

}

要点概述:

  • 1、通过org.apache.ibatis.io.Resources读取mybatis的核心配置文件mybatis-config.xml
  • 2、通过SqlSessionFactoryBuilder对象生成sqlSessionFactory对象
  • 3、通过SqlSessionFactory对象创建SqlSession对象。该对象的作用类似于JDBC中的Connection对象,所以在执行完数据库操作后需对其进行关闭操作。
  • 4、通过SqlSession的selectOne( )方法执行返回结果只有一条记录的sql查询语句。该方法第一个参数将要执行的sql语句,其格式为:命名空间.sql语句的id值;该方法第二参数为替换sql语句中占位符的参数值。
  • 5、执行完查询操作后关闭SqlSession。

结果如下:

MyBatis入门示例总结

  • 1、mybatis-config.xml是mybatis的核心配置文件
  • 2、mapper.xml用于定义与数据库相关的sql语句
  • 3、SqlSession用于执行数据库操作

Eclipse中关联MyBatis源码

为在开发过程中便捷查看MyBatis源码,我们需要在Eclipse对其进行关联。

第一步

下载源码并存放至本地,图示如下:

第二步

在Eclipse的项目中找到mybatis-3.4.1.jar,图示如下:

第三步

选中mybatis-3.4.1.jar右键选择Properties后再添加刚才下载好的源码文件mybatis-3.4.1-src.zip,图示如下:

最后,单击 Apply and Close即可。


转载:https://blog.csdn.net/lfdfhl/article/details/103230553
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场