一 前言
MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎全部的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 能夠使用簡單的 XML 或註解來配置和映射原生類型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 對象)爲數據庫中的記錄。java
二 mybatis入門
小白你好啊,在這裏你要本身建立maven工程,若是不懂的配置安裝能夠看我tool系列的idea配置maven; 若是數據庫沒有學過,能夠看我sql系列的教程;在下文 properties裏面還隱藏了一個mysql的安裝教程,以避免你真是個小白啊!!!mysql

2.1 pom.xml
pom 裏面就是學習mybatis一些依賴了其中的 junit目前沒用到,可是下節課可能就用到啦,蒼天饒過誰啊!!!git

<dependencies>
<!-- mybatis support-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- log4j support -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- junit support -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- mysql support -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.5</version>
</dependency>
</dependencies>
複製代碼
2.2 log4j.properties
配置log4j.properties是爲了更好顯示日誌信息,可以打印出sql;咱們在 resource目錄下新建一個 log4j.properties,內容以下,記得替換mapper包的映射路徑喲小白;要否則日誌打印不出來有你哭的,抱着哥哥的博客和公衆號都沒軟用;github
### 設置###
log4j.rootLogger = info,stdout
### 輸出信息到控制擡 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
## 這邊要替換成你的mapper包映射路徑喲
log4j.logger.com.zszxz.mybatis.mapper = debug
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
# mysql安裝https://zhuanlan.zhihu.com/p/37152572
複製代碼
2.3 數據庫建表
小白在這裏使用的mysql5.7版本,建表的信息以下;是一個學生類,主要字段是學生表主鍵,學生姓名,學生編號,而後我在裏面插入了2條記錄喲;哥哥爲何要創建學生實體呢,由於學生愛學習,學生最單純,哥哥把本身永遠看成了學生;sql

CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`name` varchar(255) DEFAULT NULL COMMENT '學生姓名',
`number` int(11) DEFAULT NULL COMMENT '學生編號',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `mybatis`.`student`(`id`, `name`, `number`) VALUES (1, '知識追尋者', 996);
INSERT INTO `mybatis`.`student`(`id`, `name`, `number`) VALUES (2, 'youku1327', 555);
複製代碼
2.4 學生實體
學生實體是爲了查詢sql語句將返回的結果映射到實體裏面喲!數據庫
/**
1. @Author lsc
2. @Description <p> </p>
3. @Date 2019/12/1 20:07
*/
public class Student {
// id
private String id;
// 學生姓名
private String name;
// 學生編號
private String number;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
複製代碼
2.5 mapper
下面的每句話都堪稱經典,你若是是異教徒,要像學習聖經同樣虔誠對待它:apache
- StudentMapper.xml 是 一個xml 文件 裏面主要是 mybatis 的 DTD ,還有咱們寫的sql邏輯;
- 注意 這邊有個
namespace
屬性是跟咱們 StudentMapper 接口對應映射路徑; - 一個 mapper.xml 對應一個 mapper 接口 別搞混咯,一般他們的名字都一個喲,官方習慣以mapper結尾喲;
- StudentMapper.xml 建立的位置 是在 resource目錄的mapper子目錄中,若是你真是小白就別自定義喲,會出錯的;
- StudentMapper 裏面有個方法
getStudent
是跟<select>
標籤裏面的id 對應,表示 查詢方法的惟一標識; resultType
裏面就是 學生實體的映射路徑,不要填類名,萬一報錯了,你可找不到我幫你檢查了;<select>
標籤裏面的內容就是咱們的sql邏輯咯,哥哥這邊作了查詢全表的操做;

StudentMapper.xml:bash
<?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.zszxz.mybatis.mapper.StudentMapper">
<!-- 查詢學生-->
<select id="getStudent" resultType="com.zszxz.mybatis.entity.Student">
select * from student
</select>
</mapper>
複製代碼
StudentMapper :markdown
public interface StudentMapper {
// 查詢學生
List<Student> getStudent();
}
複製代碼
2.6 mybatis-config.xml - 它就是一個配置
mybatis-config.xml 是咱們 配置mybatis 的內容都在裏面,小白在這裏不用知道太多,小說裏面有句話很經典啊,知道的越多死的越快啊,你要學楊修麼,雖然才華橫溢,還不是被曹操咔嚓了!!!!你該知道的我都寫裏面;這個文件的位置 是放在 resource目錄下;session
<?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">
<!-- mybaits配置 -->
<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://192.168.0.106:3306/mybatis"/>
<!-- 帳號-->
<property name="username" value="root"/>
<!--密碼 -->
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 引入自定義mapper.xml -->
<mappers>
<mapper resource="mapper/StudentMapper.xml"/>
</mappers>
</configuration>
複製代碼
2.7 Mybatis快跑
創建一個主類,讓咱們配置的mybatis跑起來把!!!
- SqlSessionFactoryBuilder 是建造類,爲了得到 SqlSessionFactory,你能夠稱呼它爲 sql 會話(session) 工廠
- SqlSessionFactory 工廠裏面有好多SqlSession,每一個線程都應該有一個 SqlSession(sql 會話),使用
openSession()
f方法得到SqlSession; - 執行完sql操做的方法別忘記關閉sqlSession 喲,要否則之後磁盤崩了別找我!!!
public static void main(String[] args) throws IOException {
// 資源路徑
String resource = "mybatis-config.xml";
// 配置mybatis得到輸入流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 建立 SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//從 SqlSessionFactory 中獲取 SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 使用 SqlSession 查詢
List<Student> getStudent = sqlSession.selectList("getStudent");
for (Student student : getStudent){
System.out.println("學生姓名:"+student.getName()+" 學生編號:"+student.getNumber());
}
// 關閉 SqlSession
sqlSession.close();
}
複製代碼
2.8 mybatis跑出的獎盃

三 源碼源碼在哪裏
小白寫試試本身敲啊,不行了再看看哥哥的源碼!!!!!!! youku1327的github

本文同步分享在 博客「知識追尋者」(JueJin)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。