myBatisNote - juedaiyuer/researchNote GitHub Wiki

#myBatis笔记#

环境工具Eclipse

MyBatis图标

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

##准备开发环境##

创建测试项目,普通java项目或者是JavaWeb项目均可

##添加相应的jar包##

测试版本

  • mybatis-3.1.1.jar
  • mysql-connector-java-5.1.6-bin.jar (mysql驱动包)

##创建数据库和表##

// 创建mybatis数据库,字符集utf-8,防止乱码
create database if not exists mybatis default character set utf8 collate utf8_general_ci; 
use mybatis;
CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20),age INT) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO user(name,age) VALUES("闻人牧月",21);
INSERT INTO user(name,age) VALUES("林浣溪",23);

##使用Mybatis查询表中的数据##

###添加Mybatis的配置文件###

// src/conf.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/mybatis" />
	            <property name="username" value="root" />
	            <property name="password" value="XDP" />
	        </dataSource>
	    </environment>
	</environments>
	
</configuration>

###定义表所对应的实体类###

package juedaiyuer.entity;

public class User {

	//实体类的属性和表的字段名称一一对应

	private int id;
	private String name;
	private int age;

	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 int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
	}

}

###定义操作user表的sql映射文件userMapper.xml###

//创建一个mapping包,专门用于存放sql映射文件

<?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,namespace的值习惯上设置成包名+sql映射文件名(去掉后缀),这样就能够保证namespace的值是唯一的

 -->
<mapper namespace="juedaiyuer.mapping.userMapper">
	<!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
	使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
	resultType="juedaiyuer.entity.User"就表示将查询结果封装成一个User类的对象返回
	User类就是users表所对应的实体类
	-->
	<!-- 
	    根据id查询得到一个user对象
	 -->
	<select id="getUser" parameterType="int" 
	    resultType="juedaiyuer.entity.User">
	    select * from user where id=#{id}
	</select>
</mapper>

###在conf.xml文件中注册userMapper.xml文件###

<mappers>
    <!-- 注册userMapper.xml文件 -->
    <mapper resource="juedaiyuer/mapping/userMapper.xml"/>
</mappers>

###测试代码###

package juedaiyuer.test;

import java.io.InputStream;
import java.sql.Connection;

import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.session.TransactionIsolationLevel;

import juedaiyuer.entity.User;

public class Test {
	public static void main(String[] args) {
		//mybatis的配置文件
	
		String resource = "conf.xml";
	
		//使用类加载器加载mybatis的配置文件及其相关联的映射
	
		InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
	
		//构建sqlSession的工厂
	
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
	
		SqlSession session = sessionFactory.openSession();
		String statement = "juedaiyuer.mapping.userMapper.getUser";
		User user = (User) session.selectOne(statement, 1);
		System.out.println(user);

		session.close();
	}

}

##BUG追思##

initializationError

单元测试时,忘记写@Test

Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: org.xml.sax.SAXParseException: The processing instruction target matching "[xX][mM][lL]" is not allowed.

在xml中文件首部不能有任何东西(包括空格,换行)


#source#

  1. 孤傲苍狼Mybatis笔记
⚠️ **GitHub.com Fallback** ⚠️