SSM框架(Spring+SpringMVC+MyBatis)之 MyBatis入門基本配置

SSM框架(Spring+SpringMVC+MyBatis)之 MyBatis入門基本配置

1. MyBatis框架簡介

1.1 什麼是MyBatis

  • MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java對象)映射成數據庫中的記錄。

  • MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優秀持久層框架。MyBatis 消除了幾乎所有的JDBC代碼和參數的手工設置以及結果集的檢索。MyBatis 使用簡單的 XML或註解用於配置和原始映射,將接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java對象)映射成數據庫中的記錄。

1.2 MyBatisHibernate 的比較,優點與缺點

(SSH框架中的H,SSH框架不能說淘汰了吧,只能說有些過時了,現在[2019年9月29日]主流框架是SSM)

  • Mybatis框架是ORM框架中,最受歡迎的框架。相對於Hibernate而言,Mybatis是一個 輕量級 的ORM框架,也是一個 半自動 的ORM框架。所以,在使用Mybatis時,關於數據庫的操作,開發人員必須書寫SQL代碼,而Hibernate中,開發人員無需書寫SQL代碼,關於數據的庫增刪查改等操作能夠 自動完成

  • 但是,Hibernate這種模式,其SQL語句,是程序自身生成。要進行SQL優化時,無法更好的進行優化,不夠靈活。開發效率高,性能差。而Mybatis,基於開發者自己配置SQL語句的形式,將SQL語句傳給Mybatis封裝的方法,從而實現數據庫的增刪查改。這種模式,最核心的SQL由開發人員自己定義,能夠做到更好的維護和擴展,且能進行優化。

  • 在Hibernate中,存在一個HQL語句,基於對象的查詢語句,HQL語句,不查數據庫,查類。因爲在ORM框架中,每個類都對應一個表,查詢類的屬性,即每個類的屬性對應了該對應表的字段.這種方式,可以實現"跨平臺".SSH框架。

1.3 什麼是ORM?

  • 對象關係映射(Object Relational Mapping,簡稱ORM)是通過使用描述對象和數據庫之間映射的元數據,將面嚮對象語言程序中的對象自動持久化到關係數據庫中。

  • ORM本質上,就是數據庫中的數據和Java中類以及類對象的關係的映射。

2. MyBatis入門基本配置(正題)

2.1 步驟一:下載mybatis的 jar包

可以在mybatis官網下jar包:https://github.com/mybatis/mybatis-3/releases

在這裏插入圖片描述
一鍵下載

2.2 步驟二:導入jar包到工程lib文件夾下


還有一些常用的jar包。一鍵下載

  • MyBatis的 jar包:mybatis-3.5.2.jar

  • 和mysql數據庫(這裏爲8.0版本的數據庫)連接的jar包:mysql-connector-java-8.0.15.jar

  • Java SQL語句解析:jsqlparser-1.3.jar

  • MyBatis分頁插件:pagehelper-5.1.8.jar

  • log4j和log相關的是 日誌 相關


項目目錄如截圖

2.3 步驟三:編寫映射文件UserMapper.xml,還要建一個User實體類,都是在bean包下

【User.java】----- 建一個user實體類

public class User {
	
	private Integer id;
	
	private String name;
	
	private Integer age;

	public Integer getId() {
		return id;
	}

	public void setId(Integer 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;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
}

【UserMapper.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">
<mapper namespace="com.sxt.bean.User">
  <select id="selectOne" resultType="com.sxt.bean.User">
    select * from 表名 where id = 1  
  </select>
</mapper>

<select>select標籤中寫的sql語句</select>

namespace : 命名空間 命名空間,即mapper映射文件的唯一值,注意,namespace + id值 一定要是唯一的
注意: 在使用mybatis接口開發時,namespace的值,要是接口的全路徑
select : 表示查詢

insert : 表示添加
delete : 表示刪除
update : 表示修改
id : 表示sql 的唯一標識,在同一個mapper.xml文件中,id的只能唯一

resultType : 表示查詢結果的返回類型
resultMap : 表示映射結果
parameterType : 表示查詢參數的類型 可以缺省 (不建議)
parameterMap : 已經被廢棄了

	//除了select,其它三個都爲更新操作
	
	//在mybatis 做更新操作時 必須手動提交事務

	  sqlSession.commit();  //如下UserDao中示例

2.4 步驟四:編寫mybatis的核心配置文件 mybatis.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>
	<!-- mybatis核心配置文件 ,default用來指定當前默認的數據庫環境 -->
  <environments default="development">
 	 <!-- 具體的數據庫執行環境 -->
    <environment id="development">
    <!-- 使用jdbc控制操作數據的事務 -->
      <transactionManager type="JDBC"/>
      <!-- 配置數據庫連接池,要有jdbc.properties配置文件 -->
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/項目名稱"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
  <!-- 加載mybait數據庫操作的 映射文件  bean包下的xml文件全路徑,即映射到上一步的文件-->
  <mappers>
    <mapper resource="com/sxt/bean/UserMapper.xml"/>
  </mappers>
</configuration>

2.5 步驟五:創建SqlSession ----- UserDao ,測試

2.6 步驟六:通過SqlSession對象調用相關方法

import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.sxt.bean.User;

public class UserDao {
	
	
	public static User selectOne() {
		String resource = "myabtis.xml";
		InputStream inputStream = UserDao.class.getClassLoader().getResourceAsStream(resource);
		SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
		SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
		//SQL會話
		SqlSession sqlSession = sqlSessionFactory.openSession();
		//調用相關方法
		User user = sqlSession.selectOne("com.sxt.bean.User.selectOne");// namespace + sql 語句ID 
																		//UserMapper.xml中的

		// 如果是更新操作,在這裏手動提交事務
		// sqlSession.commit();
		
		return user;
	}
	
	public static void main(String[] args) {
		User user = selectOne();
		System.out.println(user);
	}
}

2.7 其它一些相關配置

2.7.1 log4j.properties 日誌配置文件(可直接複製配置)

# Global logging configuration
log4j.rootLogger=DEBUG, 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
  • 配置日誌的輸出方式
<settings>

    <setting name="logImpl" value="LOG4J" />

</settings>

2.7.2 如果要jdbc.properties配置文件

# 
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/項目名稱?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=false
username=root
password=123456

MySql8.0數據庫與之前不同的是:

  • driver=com.mysql.cj.jdbc.Driver 中多了 cj
  • 還有url中 必須設置時區參數:serverTimezone=GMT%2B8

那麼
【mybatis.xml】---- 可做一些修改

        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>

補充:詳解

Mybatis的核心配置文件 ----- mybatis.xml

映射配置文件 ----- UserMapper.xml

【mybatis.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">
  <!-- 以上 是mybatis核心配置文件  XML文件中dtd約束,規定了xml中可以寫那些標籤  以及標籤的屬性和標籤的子標籤及屬性等 -->
  <!-- configuration : 表示mybatis 配置   根標籤 -->
<configuration>
	<!-- 外部properties 配置文件 -->
	<properties resource="jdbc.properties"></properties>
	<!-- settings  設置配置 -->
	<settings>
		<!-- 緩存配置  在mybatis中 緩存分爲一級緩存和二級緩存  默認開啓一級緩存 -->
		<setting name="cacheEnabled" value="true"/>
		<!-- 
			日誌的設置 : 指定mybatis 日誌使用 實現類
		 -->
		<setting  value="LOG4J" name="logImpl"/>
	</settings>
	<!-- 類型別名(typeAliases) -->
	<typeAliases>
		<!-- 在mybatis中  type就是類
				type : 表示 類的全路徑 
				alias : 該類的別名
				
		 -->
		<!-- <typeAlias type="com.sxt.bean.User" alias="USER_NAME"/> -->
		<!--  表示該包下面的類都有了別名,其別名就是類名 -->
		<package name="com.sxt.bean"/>
	</typeAliases>
	<!-- 
		插件 :
			配置mybatis 在執行sql時 進行具體的程序攔截操作
		分頁插件	
		<plugins>
			<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
		</plugins>
	 -->
	
   <!-- 表示  持久化化框架 數據庫JDBC操作的環境  -->	
   <!-- 
   		environments : 表示運行環境
   				default : 表示使用的環境
   			environment	: 表示具體的環境
   					id : 表示當前環境環境的唯一表示
   				transactionManager : 事務管理器
   						type : JDBC|MANAGED   一般都是使用JDBC
   								JDBC:  這個配置就是直接使用了 JDBC 的提交和回滾設置,它依賴於從數據源得到的連接來管理事務作用域
   								MANAGED : 這個配置幾乎沒做什麼。它從來不提交或回滾一個連接,而是讓容器來管理事務的整個生命週期
   				dataSource: 數據源
   						type :UNPOOLED | POOLED(一般使用這種數據源) | JNDI
   							UNPOOLED : 這個數據源的實現只是每次被請求時打開和關閉連接。不使用連接池  每次都是新建
   							POOLED : 這種數據源的實現利用“池”的概念將 JDBC 連接對象組織起來,避免了創建新的連接實例時所必需的初始化和認證時間
   							JNDI :  本地數據源 將數據源配置在服務器中
   					property : 屬性   ,數據源的屬性
   						name :	屬性名   
   						value:	屬性值
    -->
   
  <environments default="MY_MYSQL">
    <environment id="MY_MYSQL">
      <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 : 具體的配置文件路徑
  		package :  
  			name="" 包名  一般在mapper.xml文件和其對應實體類的操作類在一起時使用,在實際開發中,一般會將xml配置文件和java分開
   -->
  <mappers>
    <mapper   resource="com/sxt/bean/UserMapper.xml"/>
  </mappers>
</configuration>

【UserMapper.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映射文件的唯一值,注意,namespace + id值  一定要是唯一的
  		注意: 在使用mybatis接口代理開發時,namespace的值,要是接口的全路徑
  		select : 表示查詢
  		insert : 表示添加
  		delete : 表示刪除
  		update : 表示修改
  			id : 表示sql 的唯一標識,在同一個mapper.xml文件中,id的只能唯一
  			
  		resultType : 表示查詢結果的返回類型
  		resultMap : 表示映射結果
  		parameterType : 表示查詢參數的類型  可以缺省 (不建議)	
  		parameterMap : 已經被廢棄了		  		
   -->
<mapper namespace="com.sxt.bean.User">
	<!-- 
		查詢結果映射關係
			可以通過映射關係解決  列名和屬性名不一致的問題
	 -->
	<resultMap type="User" id="RESULT_MAP">
		<!-- 一般表示主鍵 -->
		<id column="id"  property="id"/>
		<result column="name" property="name"/>
		<result column="age" property="age"/>
	</resultMap>

  <select id="selectOne"  resultMap="RESULT_MAP"  >
    select * from tb_user where id = 1
  </select>
  
</mapper>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章