文章

mybatis_hello初识mybatis

本文详细介绍MyBatis框架的基本概念、工作原理及实战应用,包括环境搭建、配置文件解析、映射文件创建、Java类设计及日志配置等关键步骤。

mybatis_hello初识mybatis

文章信息

  • 原文链接:https://jiayq.blog.csdn.net/article/details/87946151
  • 发布时间:2019-02-26 20:04:03
  • 阅读量:392
  • 分类:java同时被 3 个专栏收录, 订阅专栏, mybatis, MyBatis
  • 标签:#MyBatis, #如何创建MyBatis项目, #MyBatis工作原理, #MyBatis的执行步骤, #MyBatis与oracle数据库集成

摘要

文章浏览阅读392次。本文详细介绍MyBatis框架的基本概念、工作原理及实战应用,包括环境搭建、配置文件解析、映射文件创建、Java类设计及日志配置等关键步骤。


MyBatis初体验

  • 1.简介
  • 2.入门
  • 3.MyBatis工作原理
  • 4.例子
    • 4.1准备
      • 4.2创建一个Java工程
      • 4.3创建Java类
      • 4.4 xml文件
      • 4.5 配置文件
      • 4.6运行
  • 5.总结

1.简介

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

2.入门

https://codeload.github.com/mybatis/mybatis-3/zip/mybatis-3.5.0
下载jar包
在这里插入图片描述
解压
在这里插入图片描述

3.MyBatis工作原理

1.读取MyBatis配置文件;
2.加载映射文件;
3.构建会话工厂;
4.创建SQLSession对象;
5.MyBatis底层定义了一个Executor接口操作数据库,根据SqlSession传递的参数动态生成需要执行的SQL语句,同时负责查询缓存的维护;
6.在Executor接口的执行方法中,包含一个MappedStatement类型的参数,此参数是对映射信息的封装;
7.输入参数映射;
8.输出结果映射。

4.例子

4.1准备

MyBatis的jar包:
在这里插入图片描述
ojdbc驱动的jar包
在这里插入图片描述
注意ojdbc和jdk的对应关系。

4.2创建一个Java工程

在这里插入图片描述
jdk1.8
导入jar包
在这里插入图片描述
其中除去ojdbc与mybatis的jar包,其余都是下载的mybatis的jar包中的lib中的文件。

4.3创建Java类

在这里插入图片描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package domain;

import java.io.Serializable;

public class People implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -3270893239281340723L;

	private Long id;
	
	private String name;
	
	private Integer age;
	
	private Integer sex;

	public Long getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public Integer getSex() {
		return sex;
	}

	public void setSex(Integer sex) {
		this.sex = sex;
	}

	@Override
	public String toString() {
		return "people [id=" + this.id + ",name=" + this.name + ",age="
				+ this.age + ",sex=" + this.sex;
	}
	
	
}




package client;

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 domain.People;

public class Main {

	public static void main(String[] args) throws IOException {
		String resource = "resource/mybatis.xml";
		// 1.读取配置文件
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// 2.根据配置文件构建SqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
				.build(inputStream);
		// 3.通过SqlSessionFactory创建SqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		// 4.执行mapper中的sql,返回结果
		People people = sqlSession.selectOne(
				"mapper.PeopleMapper.selectPeopleById", Long.valueOf(101));
		System.out.println(people);
		sqlSession.close();
	}

}

4.4 xml文件

在这里插入图片描述
PeopleMapper.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?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="mapper.PeopleMapper">
  <select id="selectPeopleById" resultType="domain.People"
  	parameterType="Long">
    select * from people where id = #{id}
  </select>
</mapper>



<?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="oracle">
    <environment id="oracle">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:oracle"/>
        <property name="username" value="study"/>
        <property name="password" value="study"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="mapper/PeopleMapper.xml"/>
  </mappers>
</configuration>

4.5 配置文件

在这里插入图片描述
log4j.properties

1
2
3
4
5
6
7
8
9
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# 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
log4j.logger.domain=DEBUG

4.6运行

1
2
3
4
log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
people [id=101,name=aPeople,age=53,sex=0]

5.总结

主要有几个点:
1.jdk与ojdbc对应
2.jdk与mybatis对应
3.log4j配置
4.jdbc的url
5.出现bug如何调试
log4j配置
在这里插入图片描述
红框中是自己需要打印日志的包的路径。
优化的点:
jdbc的配置应该使用propertis配置,而不是写死:

新增ojdbc.properties文件:
在这里插入图片描述
ojdbc.properties

1
2
3
4
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:oracle
username=study
password=study

原mybatis.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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>
  <properties resource="property/ojdbc.properties"></properties>
  <environments default="oracle">
    <environment id="oracle">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="mapper/PeopleMapper.xml"/>
  </mappers>
</configuration>

在这里插入图片描述
第一个框内是读取配置文件;
第二个框是引用读取的值,以字符串的方式拼接。

运行结果与原来相同。

本文由作者按照 CC BY 4.0 进行授权