上手Mybatis,最基本基于xml配置使用示例

本文介绍了如何基于XML配置使用Mybatis,包括所需的jar包、数据库操作、实体类定义、Mybatis.xml和Mapper文件配置,以及测试类的编写。通过一个简单的小demo,展示了Mybatis的灵活性和SQL调优的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近由于项目需要ssm框架来做,对于以前只使用过hibernate的我来说是一个不好的消息,于是只好在网上学习一下mybatis的使用方法,但大多都是和spring整合起来使用的,配置也是错综复杂,几经对比,自己摸索出了mybatis的基本使用方法,并做了一个小demo来测试一下。

Mybatis也是面向接口的,此文主要介绍基本的基于xml配置的使用,并未使用接口。


最终目录如图所示(dao暂未使用)



一、测试需要的jar包

1、mysql数据库包

2、mybatis包

二、在数据库中建立对应的数据库mybatis,并创建对应的表和字段

建库:

CREATE DATABASE `Mybatis`CHARACTER SET utf8;


建表:

CREATE TABLE `mybatis`.`learner`( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(20), `status`  VARCHAR(20), PRIMARY KEY (`id`) );


插入数据:

INSERT INTO `mybatis`.`learner` (`name`, `status`) VALUES ('严飞', '9');

INSERT INTO `mybatis`.`learner` (`name`, `status`) VALUES ('林寻', '8');


二、实体类,简单的几个字段,对应表中的几个字段

com.ghill.model.Learner.java

package com.ghill.model;

public class Learner {

	private int id;
	private String name;
	private String status;
	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 String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
}

三、Mybatis.xml的配置

Mybatis.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL Map Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

	<span style="color:#FF0000;"><!-- !imprtant 注意标签的书写顺序 --></span>

	<!-- 设置类的别名,在此处配置的类的缩写,在mapper配置中可以直接应用,若不配置则需要在mapper中写类的全路径 -->
	<typeAliases>
		<typeAlias type="com.ghill.model.Learner" alias="Learner" />
	</typeAliases>


	<!-- 配置数据库连接的环境,整合到spring中后可在properties文件中配置并通过spring管理 -->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis" />
				<property name="username" value="root" />
				<property name="password" value="password" />
			</dataSource>
		</environment>
	</environments>


	<!-- 配置mapper文件,同样,整合spring后可由spring管理 -->
	<mappers>
		<mapper resource="LearnerMapper.xml" />
	</mappers>

</configuration>


四、mapper文件的配置

LearnerMapper.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的<span style="color:#FF0000;">唯一标识</span>在,随后的测试代码中session.selectOne(String <span style="color:#FF0000;">statement</span>,Object parameter)
     中的<span style="color:#FF0000;">statement</span>对应该处的namespace.下方的id-->
<mapper namespace="LearnerMapper">
	<!-- select标签标示一条基本的select语句,当然还有insert,update,delete
	id:改select标签的id标识;
	parameterType:传入该语句的参数类型;
	resultType:该条sql语句返回值类型(此处Learner是由于之前配置了缩写才可直接使用); 			
	-->
	<select id="getLearnerById" parameterType="int" resultType="Learner">
		select * from learner where id = #{id};
	</select>
</mapper>

五、测试类:

com.ghill.test.Test.java

package com.ghill.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.ghill.model.Learner;

public class Test {
	public static void main(String[] args) {
		Reader reader = null;
		try {
			//我的mybatis.xml放在了src目录下
			//reader = new BufferedReader(new FileReader(new File("src/Mybatis.xml")));
			reader = Resources.getResourceAsReader("Mybatis.xml");
		} catch (Exception e) {			
			e.printStackTrace();
		}
		//通过builder建立一个工厂并打开一个session,类似hibernate
		SqlSession session = new SqlSessionFactoryBuilder().build(reader).openSession();
		//selectOne方法第一个参数字符串是LearnerMapper.xml中的namespace和Id组合
		Learner learner = session.selectOne("LearnerMapper.getLearnerById", 3);
		System.out.println(learner.getName());		
	}

}

mybatis相比于hibernate更灵活,对于sql语句的调优更加方便,但是sql都需要自己写,需要配置的东西也比较多。但由于sql语句基本写好,当更换数据库时sql语句也需要更改,hibernate则可以解决这个问题。

所以两者到底谁更好,还是见仁见智吧。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值