摘要:确定依赖确定目前的目录结构编写配置文件编写配置文件在目录下新建文件日志级别以及优先级排序后面的这个用于设置自身内部的信息输出可以不设置当设置成时你会看到内部各种详细输出能够自动检测修改配置文件和重新配置本身设置间隔
确定依赖
</>复制代码
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配置文件
编写log4j配置文件
在resource目录下新建log4j.xml文件
</>复制代码
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
新建mybatis配置文件
在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();
}
}
%>
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/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层面,不存在任何的...
阅读 3041·2023-04-26 00:23
阅读 3455·2021-09-13 10:28
阅读 2238·2021-08-31 14:18
阅读 2946·2019-08-30 15:54
阅读 1984·2019-08-30 15:43
阅读 1345·2019-08-29 16:56
阅读 2848·2019-08-29 14:16
阅读 2099·2019-08-28 17:51