摘要:確定依賴確定目前的目錄結(jié)構(gòu)編寫配置文件編寫配置文件在目錄下新建文件日志級別以及優(yōu)先級排序后面的這個(gè)用于設(shè)置自身內(nèi)部的信息輸出可以不設(shè)置當(dāng)設(shè)置成時(shí)你會看到內(nèi)部各種詳細(xì)輸出能夠自動檢測修改配置文件和重新配置本身設(shè)置間隔
確定依賴
確定目前的目錄結(jié)構(gòu) 編寫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配置文件
構(gòu)建SqlSessionFactory
根據(jù)配置文件構(gòu)建出sql 會話的產(chǎn)生工廠
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 * 構(gòu)建SqlSessionFactory * 由于數(shù)據(jù)庫連接是寶貴的,需要對數(shù)據(jù)庫連接統(tǒng)一管理,所以使用單例進(jìn)行管理 * 這里的單利使用的雙重鎖 * SqlSessionFactory為線程不安全類型需要加鎖,確保同一時(shí)刻,只有一個(gè)線程可以使用該對象 */ 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){ // 錯(cuò)誤寫入配置文件中 logger.error(e); } // 即類鎖 采用最小同步快的方式 if(sqlSessionFactory == null) { // 此處排隊(duì) synchronized (CLASS_LOCK) { // 多線程情況下唯一的獲取工廠對象 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } } return sqlSessionFactory; } /** * 打開SqlSession * @return SqlSession */ public static SqlSession openSqlSesion(){ // 判空處理 if(sqlSessionFactory == null){ initSqlSessionFactory(); } return sqlSessionFactory.openSession(); } }構(gòu)建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配置文件
根據(jù)映射定義接口
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); }最后編寫應(yīng)用類
<%@ 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(); } } %>
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/77584.html
摘要:的實(shí)例不是線程安全的,因此是不能被共享的,所以它的最佳的作用域是請求或方法作用域。下面的示例就是一個(gè)確保關(guān)閉的標(biāo)準(zhǔn)模式依賴注入框架可以創(chuàng)建線程安全的基于事務(wù)的和映射器并將它們直接注入到你的中,因此可以直接忽略它們的生命周期。 MyBatis理解與掌握(入門例子) @(MyBatis)[Java, 框架, MyBatis] 配置文件 mybatis-config.xml ...
摘要:要想使用需要在的中導(dǎo)入包和的驅(qū)動包每個(gè)基于的應(yīng)用都是以一個(gè)的實(shí)例為中心的的實(shí)例可以通過獲得則可以從配置文件或一個(gè)預(yù)先定制的的實(shí)例構(gòu)建出的實(shí)例配置文件中包含了對系統(tǒng)的核心設(shè)置,包含獲取數(shù)據(jù)庫連接實(shí)例的數(shù)據(jù)源和決定事務(wù)作用域和控制方式的事 1 要想使用mybatis 需要在maven的pom.xml中導(dǎo)入jar包和mysql的驅(qū)動包 org.mybatis ...
摘要:對于第二個(gè)問題,本文將嘗試通過分析源代碼和實(shí)驗(yàn)找到它的,主要涉及到以下內(nèi)容問題描述與分析在環(huán)境下的載入過程在環(huán)境下事務(wù)的管理實(shí)驗(yàn)驗(yàn)證項(xiàng)目環(huán)境整個(gè)系統(tǒng)是微服務(wù)架構(gòu),這里討論的項(xiàng)目是指一個(gè)單獨(dú)的服務(wù)。 MyBatis的設(shè)計(jì)思想很簡單,可以看做是對JDBC的一次封裝,并提供強(qiáng)大的動態(tài)SQL映射功能。但是由于它本身也有一些緩存、事務(wù)管理等功能,所以實(shí)際使用中還是會碰到一些問題——另外,最近接觸...
摘要:不是線程安全的,所以在使用的時(shí)候一定要保證他是局部變量。他對應(yīng)的類圖如下有幾種常見的實(shí)現(xiàn)是默認(rèn)的非線程安全的實(shí)現(xiàn)是中對的線程安全實(shí)現(xiàn),在內(nèi)部是使用的的形式來保證線程安全的是的核心。是線程安全的,可以被多個(gè)或映射器所共享使用。 MyBatis核心類 SqlSessionFactory 每一個(gè)MyBatis應(yīng)用都是以一個(gè)SqlSessionFactory的實(shí)例為核心構(gòu)建的。SqlSessi...
摘要:緩存介紹正如大多數(shù)持久層框架一樣,同樣提供了一級緩存和二級緩存的支持一級緩存基于的本地緩存,其存儲作用域?yàn)椋?dāng)或之后,該中的所有就將清空。一級緩存實(shí)現(xiàn)對的操作內(nèi)部都是通過來執(zhí)行的。 MyBatis緩存介紹 正如大多數(shù)持久層框架一樣,MyBatis 同樣提供了一級緩存和二級緩存的支持 一級緩存: 基于PerpetualCache 的 HashMap本地緩存,其存儲作用域?yàn)?Se...
摘要:聲明解決方案是基于源碼,進(jìn)行二次開發(fā)實(shí)現(xiàn)。其是基于層面,不存在任何的接口實(shí)現(xiàn)類。因而在實(shí)現(xiàn)的過程中,首先要解決的是如何動態(tài)實(shí)現(xiàn)接口的實(shí)例化。其次是如何將使接口根據(jù)注解實(shí)現(xiàn)相應(yīng)的功能。 聲明解決方案是基于Mybatis源碼,進(jìn)行二次開發(fā)實(shí)現(xiàn)。 問題領(lǐng)導(dǎo)最近跟我提了一個(gè)需求,是有關(guān)于實(shí)現(xiàn)類Mybatis的@Select、@Insert注解的功能。其是基于interface層面,不存在任何的...
閱讀 2984·2023-04-26 00:23
閱讀 3399·2021-09-13 10:28
閱讀 2178·2021-08-31 14:18
閱讀 2885·2019-08-30 15:54
閱讀 1939·2019-08-30 15:43
閱讀 1276·2019-08-29 16:56
閱讀 2800·2019-08-29 14:16
閱讀 2054·2019-08-28 17:51