摘要:確定依賴確定目前的目錄結構編寫配置文件編寫配置文件在目錄下新建文件日志級別以及優先級排序后面的這個用于設置自身內部的信息輸出可以不設置當設置成時你會看到內部各種詳細輸出能夠自動檢測修改配置文件和重新配置本身設置間隔
確定依賴
確定目前的目錄結構 編寫log4j配置文件mysql mysql-connector-java 8.0.15 org.apache.logging.log4j log4j 2.11.2 pom org.mybatis mybatis 3.5.1 junit junit 4.11 test
編寫log4j配置文件
在resource目錄下新建log4j.xml文件
新建mybatis配置文件log4j/log4j2Logs %d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %l - %m%n %d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %C.%M - %m%n 20MB DEBUG ${basePath}/all.log ${basePath}/%d{yyyy-MM}/all-%d{yyyy-MM-dd}-%i.log.gz 50 ${basePath}/info.log ${basePath}/%d{yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz 10 ${basePath}/warn.log ${basePath}/%d{yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz 10 ${basePath}/error.log ${basePath}/%d{yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz 10 DEBUG
在resource目錄下新建mybatis-config.xml配置文件
構建SqlSessionFactory
根據配置文件構建出sql 會話的產生工廠
package com.ming; 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 org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.io.IOException; import java.io.InputStream; /** * @author ming * 構建SqlSessionFactory * 由于數據庫連接是寶貴的,需要對數據庫連接統一管理,所以使用單例進行管理 * 這里的單利使用的雙重鎖 * SqlSessionFactory為線程不安全類型需要加鎖,確保同一時刻,只有一個線程可以使用該對象 */ public class SqlSessionFactoryUtil { /** * SqlSessionFactory對象 */ private static SqlSessionFactory sqlSessionFactory = null; /** * 類線程鎖 */ private static final Class CLASS_LOCK = SqlSessionFactoryUtil.class; /** * 日志管理類 */ private static final Logger logger = LogManager.getLogger(); /** * 單例 */ private SqlSessionFactoryUtil(){ } /** * @return SqlSessionFactory * 初始化SqlSessionFactory對象 */ public static SqlSessionFactory initSqlSessionFactory(){ // 配置文件 String resource = "mybatis-config.xml"; // 輸出流 InputStream inputStream = null; try{ // 獲得配置文件輸入流 inputStream = Resources.getResourceAsStream(resource); }catch (IOException e){ // 錯誤寫入配置文件中 logger.error(e); } // 即類鎖 采用最小同步快的方式 if(sqlSessionFactory == null) { // 此處排隊 synchronized (CLASS_LOCK) { // 多線程情況下唯一的獲取工廠對象 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } } return sqlSessionFactory; } /** * 打開SqlSession * @return SqlSession */ public static SqlSession openSqlSesion(){ // 判空處理 if(sqlSessionFactory == null){ initSqlSessionFactory(); } return sqlSessionFactory.openSession(); } }構建POJO
package com.ming; public class role { private int id; private String role_name; private String note; public role(){ } public void setId(int id) { this.id = id; } public void setRole_name(String role_name) { this.role_name = role_name; } public void setNote(String note) { this.note = note; } public int getId() { return id; } public String getRole_name() { return role_name; } public String getNote() { return note; } }編寫配置文件
package com.ming; public class role { private int id; private String role_name; private String note; public role(){ } public void setId(int id) { this.id = id; } public void setRole_name(String role_name) { this.role_name = role_name; } public void setNote(String note) { this.note = note; } public int getId() { return id; } public String getRole_name() { return role_name; } public String getNote() { return note; } }更改mybatis配置文件
根據映射定義接口
package com.ming; import org.apache.ibatis.annotations.Param; import javax.management.relation.Role; public interface RoleMapper { /** * @param id * @return */ public Role getRole(int id); /** * @param id * @return */ public int deleteRole(int id); /** * @param role * @return */ public int insertRole(Role role); }最后編寫應用類
<%@ page import="org.apache.ibatis.session.SqlSession" %> <%@ page import="com.ming.SqlSessionFactoryUtil" %> <%@ page import="com.ming.RoleMapper" %> <%@ page import="com.ming.Role" %>Hello World!
<% SqlSession sqlSession = null; try{ sqlSession = SqlSessionFactoryUtil.openSqlSesion(); RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class); Role role = new Role(); role.setRole_name("name"); role.setNote("note"); roleMapper.insertRole(role); roleMapper.deleteRole(1); sqlSession.commit(); }catch (Exception e){ e.printStackTrace(); sqlSession.rollback(); }finally { if(sqlSession != null){ sqlSession.close(); } } %>
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/77584.html
摘要:的實例不是線程安全的,因此是不能被共享的,所以它的最佳的作用域是請求或方法作用域。下面的示例就是一個確保關閉的標準模式依賴注入框架可以創建線程安全的基于事務的和映射器并將它們直接注入到你的中,因此可以直接忽略它們的生命周期。 MyBatis理解與掌握(入門例子) @(MyBatis)[Java, 框架, MyBatis] 配置文件 mybatis-config.xml ...
摘要:要想使用需要在的中導入包和的驅動包每個基于的應用都是以一個的實例為中心的的實例可以通過獲得則可以從配置文件或一個預先定制的的實例構建出的實例配置文件中包含了對系統的核心設置,包含獲取數據庫連接實例的數據源和決定事務作用域和控制方式的事 1 要想使用mybatis 需要在maven的pom.xml中導入jar包和mysql的驅動包 org.mybatis ...
摘要:對于第二個問題,本文將嘗試通過分析源代碼和實驗找到它的,主要涉及到以下內容問題描述與分析在環境下的載入過程在環境下事務的管理實驗驗證項目環境整個系統是微服務架構,這里討論的項目是指一個單獨的服務。 MyBatis的設計思想很簡單,可以看做是對JDBC的一次封裝,并提供強大的動態SQL映射功能。但是由于它本身也有一些緩存、事務管理等功能,所以實際使用中還是會碰到一些問題——另外,最近接觸...
摘要:不是線程安全的,所以在使用的時候一定要保證他是局部變量。他對應的類圖如下有幾種常見的實現是默認的非線程安全的實現是中對的線程安全實現,在內部是使用的的形式來保證線程安全的是的核心。是線程安全的,可以被多個或映射器所共享使用。 MyBatis核心類 SqlSessionFactory 每一個MyBatis應用都是以一個SqlSessionFactory的實例為核心構建的。SqlSessi...
摘要:緩存介紹正如大多數持久層框架一樣,同樣提供了一級緩存和二級緩存的支持一級緩存基于的本地緩存,其存儲作用域為,當或之后,該中的所有就將清空。一級緩存實現對的操作內部都是通過來執行的。 MyBatis緩存介紹 正如大多數持久層框架一樣,MyBatis 同樣提供了一級緩存和二級緩存的支持 一級緩存: 基于PerpetualCache 的 HashMap本地緩存,其存儲作用域為 Se...
摘要:聲明解決方案是基于源碼,進行二次開發實現。其是基于層面,不存在任何的接口實現類。因而在實現的過程中,首先要解決的是如何動態實現接口的實例化。其次是如何將使接口根據注解實現相應的功能。 聲明解決方案是基于Mybatis源碼,進行二次開發實現。 問題領導最近跟我提了一個需求,是有關于實現類Mybatis的@Select、@Insert注解的功能。其是基于interface層面,不存在任何的...
閱讀 2991·2023-04-26 00:23
閱讀 3406·2021-09-13 10:28
閱讀 2185·2021-08-31 14:18
閱讀 2891·2019-08-30 15:54
閱讀 1945·2019-08-30 15:43
閱讀 1284·2019-08-29 16:56
閱讀 2807·2019-08-29 14:16
閱讀 2060·2019-08-28 17:51