02. Mybatis 框架簡介和安裝配置
1、什么是框架处硬?
它是我們軟件開發(fā)的一套解決方案专执,不同的框架解決不同的問題。
使用框架的好處:
框架封裝了很多細(xì)節(jié)郁油,使開發(fā)者可以使用幾件極簡的方式實(shí)現(xiàn)功能,大大提高了開發(fā)效率攀痊。
框架階段:
ssm框架:
- mybatis 對(duì)jdbc進(jìn)行封裝(DAO 輸出訪問層 數(shù)據(jù)持久層)
- spring 全局項(xiàng)目管理
- springMVC 對(duì)servlet進(jìn)行封裝(業(yè)務(wù)層)
前端框架:
- layUI
- Bootstrap
快速搭建項(xiàng)目
- springBoot
- 前后端分離開發(fā)模式
相關(guān)工具
- maven項(xiàng)目管理工具
- svn/git 項(xiàng)目版本控制器 團(tuán)隊(duì)開發(fā)項(xiàng)目使用
2桐腌、三層架構(gòu)
- 表現(xiàn)層:是用來展示數(shù)據(jù)的
- 業(yè)務(wù)層:是用來處理業(yè)務(wù)需求
- 持久層:是和數(shù)據(jù)庫交互的
3、持久層技術(shù)解決方案
- JDBC技術(shù):
- Connection
- PreparedStatement
- ResultSet
- Spring的JdbcTemplate:
- Spring中對(duì)jdbc的簡單封裝
- Apache的DBUtils:
- 它和Spring 的JdbcTemplate很像苟径,也是對(duì)Jdbc的簡單封裝
以上都不是框架案站,
- JDBC是規(guī)范
- Spring的JdbcTemplate和Apache的DBUtils都只是工具類
4、MyBatis 框架概述
MyBatis 是支持定制化SQL棘街、存儲(chǔ)過程以及高級(jí)映射的優(yōu)秀的持久層框架蟆盐。MyBatis 避免了幾乎所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以對(duì)配置和原生Map使用簡單的 XML 或注解遭殉,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對(duì)象)映射成數(shù)據(jù)庫中的記錄石挂。
- MyBatis 是一個(gè)持久性框架,用java編寫的
- 它封裝了jdbc的細(xì)節(jié)险污,是開發(fā)者只用關(guān)注sql語句本身痹愚,而無需關(guān)注驅(qū)動(dòng)富岳,創(chuàng)建鏈接等繁雜的過程
- 它使用了ORM思想實(shí)現(xiàn)了結(jié)果集的封裝
ORM思想:
Object Relational Mapping 對(duì)象關(guān)系映射
就是把數(shù)據(jù)庫和實(shí)體類及實(shí)體類的屬性對(duì)應(yīng)起來
-
讓我們可以操作實(shí)體類就實(shí)現(xiàn)操作數(shù)據(jù)庫表
user -----> User
id -----> userId
name -----> userName
5、Mybatis 下載和安裝
下載地址:https://github.com/mybatis/mybatis-3/releases
中文官方網(wǎng)址:https://mybatis.org/mybatis-3/zh/index.html
將下載的mybatis-3.5.5.zip進(jìn)行解壓拯腮,
其中里面的
- mybatis-3.5.5.jar就是mybatis的核心包窖式,
- mybatis-3.5.5.pdf 是官方文檔
- LICENSE是執(zhí)照
- NOTICE是注意事項(xiàng),公告
- lib文件夾里面是一些附加包动壤,用來附加一些功能
將mybatis-3.5.5.jar萝喘,lib 路徑下的所有jar包,還有jdbc所需要的 導(dǎo)入項(xiàng)目琼懊,其中 log4j-1.2.17.jar 是用來輸出日志的包阁簸,并且需要把數(shù)據(jù)庫對(duì)應(yīng)jdbc驅(qū)動(dòng)包導(dǎo)入到項(xiàng)目。
導(dǎo)入包完成后肩碟,我們需要對(duì)項(xiàng)目進(jìn)行一定的配置:
我們?cè)趈ava源碼文件夾下創(chuàng)建文件夾conf强窖,用來存放我們的配置文件。
(1)配置log4j削祈,創(chuàng)建log4j.properties
代碼:
# Rules reminder:
# DEBUG < INFO < WARN < ERROR < FATAL
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# My logging configuration...
log4j.logger.org.mybatis.jpetstore=DEBUG
## Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n
(2)配置數(shù)據(jù)庫鏈接翅溺,可以把數(shù)據(jù)鏈接用到的驅(qū)動(dòng)、url髓抑、用戶名咙崎、密碼寫到一個(gè)配置文件中,以后要改直接在配置文件中修改吨拍。
在conf文件下創(chuàng)建jdbc.properties 文件
url=jdbc:oracle:thin:@localhost:1521:XE
driver=oracle.jdbc.driver.OracleDriver
username=mybatis
password=123456
(3)配置mybatis褪猛,創(chuàng)建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>
<!-- 導(dǎo)入數(shù)據(jù)庫配置文件 -->
<properties resource="jdbc.properties"></properties>
<!-- 配置數(shù)據(jù)庫信息 -->
<environments default="development">
<environment id="development">
<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>
<!-- 將我們寫好的sql映射文件一定要注冊(cè)到全局配置文件中 -->
</configuration>
其中:
- < property name="driver" value="oracle.jdbc.driver.OracleDriver" /> 中value配置的是數(shù)據(jù)庫驅(qū)動(dòng),根據(jù)自己的數(shù)據(jù)庫配置
- < property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" />中 value配置的是數(shù)據(jù)庫鏈接的url
- < property name="username" value="mybatis" />中value配置的是需要鏈接的數(shù)據(jù)庫用戶名
- < property name="password" value="123456" />中value配置連接數(shù)據(jù)庫的密碼
- < mappers>< /mappers>中配置的是我們后面寫好的sql映射文件
6羹饰、連接數(shù)據(jù)庫
創(chuàng)建mybatis連接的工具類
MyBatisUtil.java
package com.company.project.util;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
public class MyBatisUtil {
//主配文件路徑
private static String resource = "mybatis-config.xml";
//會(huì)話工廠
private static SqlSessionFactory sqlSessionFactory;
//會(huì)話
private static SqlSession session;
/**
* 創(chuàng)建會(huì)話工廠
* @return SqlSessionFactory 會(huì)話工廠
*/
public static SqlSessionFactory createFactory(){
if(sqlSessionFactory == null) {
InputStream inputStream;
try {
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(sqlSessionFactory != null) {
System.out.println("工廠創(chuàng)建成功");
}else {
System.out.println("工廠創(chuàng)建失敗");
}
return sqlSessionFactory;
}
/**
* 利用會(huì)話工廠創(chuàng)建會(huì)話對(duì)象
* @return SqlSession 會(huì)話對(duì)象
*/
public static SqlSession getSession() {
//獲取SqlSession實(shí)例伊滋,能直接執(zhí)行已經(jīng)映射的sql語句
SqlSession session = createFactory().openSession();
if(session!=null) {
System.out.println("會(huì)話創(chuàng)建成功");
}else {
System.out.println("會(huì)話創(chuàng)建失敗");
}
return session;
}
}
7、測試數(shù)據(jù)庫的連接
package com.company.project.utiltest;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.Logger;
import org.junit.platform.commons.logging.LoggerFactory;
import com.company.project.util.MyBatisUtil;
import junit.framework.TestCase;
public class MyBatisUtilTest extends TestCase {
public void testGetSqlSessionFactory() {
SqlSessionFactory sessionFactory = MyBatisUtil.createFactory();
if (sessionFactory != null) {
System.out.println("sessionFactory:" + sessionFactory);
System.out.println("會(huì)話工廠創(chuàng)建成功6又取Pν!");
} else {
System.out.println("操作提示:sessionFactory創(chuàng)建失斺勺省筒主!");
}
}
public void testGetSqlSession() {
SqlSession session = MyBatisUtil.getSession();
if (session != null) {
System.out.println("session:" + session);
System.out.println("會(huì)話創(chuàng)建成功!D裥贰乌妙!");
} else {
System.out.println("操作提示:SqlSession創(chuàng)建失敗建钥!");
}
}
}