MyBatis之log4j使用及结合接口方式实现crud

MyBatis学习2(log4j日志、mybatis核心文件、CRUD) 数据库环境信息的集合。在一个配置文件中,可以有多种数据库环境集合,这样可以使Mybatis将SQL同时映射至多个数据库。用来设置一些别名来代替Java的长类型声明(如java.lang.int变成int),减少配置编码的冗余。该标签可以引入外部配置的属性,也可以自己配置。该配置标签所在的同一个配置文件均可引用此配置中的属性。FATAL (致命)>ERROR (错误)>INFO (信息)>DEBUG (调试)配置SQL映射文件的位置,告知MyBatis去哪里加载SQL映射配置。从左到右打印的内容越来越详细。 阅读详情

Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
在这里插入图片描述

使用步骤

1、新建一个maven项目导入相关依赖

在这里插入图片描述

2、在src/main/resources下新建properties配置文件

这里注意的是,配置文件名必须使用log4j.properties
在这里插入图片描述

log4j.rootCategory=DEBUG, stdout , R
 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n
 
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=E:\\tools\\log\\qc.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

参数介绍:

log4j.rootCategory=DEBUG, stdout , R

意思是将等级为DEBUG(不分大小写)的日志信息输出到stdout和R这两个目的地,stdout和R的定义在下面的代码,可以任意起名。
日志等级:可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL(从右至左,日志等级增大)
如果配置OFF则不会打印任何信息,如果配置为INFO,这样只显示INFO、WARN、ERROR的log信息,而DEBUG信息不会被显示

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

定义名为stdout的输出端是哪种类型,可以是
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

定义名为stdout的输出端的layout是哪种类型,可以是
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

log4j.appender.stdout.layout.ConversionPattern= [QC] %p [%t] %C.%M(%L) | %m%n

使用pattern布局就要指定的打印信息的具体格式ConversionPattern,打印参数如下:
%m 输出代码中指定的消息;
%M 输出打印该条日志的方法名;
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;
%r 输出自应用启动到输出该log信息耗费的毫秒数;
%c 输出所属的类目,通常就是所在类的全名;
%t 输出产生该日志事件的线程名;
%n 输出一个回车换行符,Windows平台为"rn”,Unix平台为"n”;
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2002-10-18 22:10:28,921;
%l 输出日志事件的发生位置,及在代码中的行数;
[QC]是log信息的开头,可以为任意字符,一般为项目简称

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender

定义名为R的输出端的类型为每天产生一个日志文件。

log4j.appender.R.File=D:\Tomcat 5.5\logs\qc.log

定义名为R的输出端的文件名为E:\tools\log\qc.log可以自行修改。

log4j.appender.R.layout=org.apache.log4j.PatternLayout

使用pattern布局就要指定的打印信息的具体格式ConversionPattern

log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

%m 输出代码中指定的消息;
%M 输出打印该条日志的方法名;
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;
%r 输出自应用启动到输出该log信息耗费的毫秒数;
%c 输出所属的类目,通常就是所在类的全名;
%t 输出产生该日志事件的线程名;
%n 输出一个回车换行符,Windows平台为"rn”,Unix平台为"n”;
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2002-10-18 22:10:28,921;
%l 输出日志事件的发生位置,及在代码中的行数;

3、定义接口

package org.zhouym.dao;

import java.util.List;

import com.zhouym.javabean.User;

public interface IUserDao {
	public List<User> query();
	
	public int addUser(User user);
	
	public int updateUser(User user);
	
	public int deleteById(Integer id);
	
	public List<User> queryById(Integer id);
}

4、创建一个以接口命名的xml文件

这里注意的是文件中的id要与接口中的方法名要一致

<?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="org.zhouym.dao.IUserDao">
	<!-- 将数据库查询的结果保存到对象中 -->
  <select id="query" resultType="com.zhouym.javabean.User">
  		<!-- 书写sql语句,没有分号 -->
		select * from tb_user
  </select>
  <!-- 增加数据 -->
  <insert id="addUser" parameterType="com.zhouym.javabean.User">
  	insert into tb_user(name,age,address,hobby) values(#{name},#{age},#{address},#{hobby})
  </insert>
  <!-- 修改数据 -->
  <update id="update" parameterType="com.zhouym.javabean.User">
  	update tb_user set name=#{name},age=#{age},address=#{address} where id=#{id}
  </update>
  <!-- 删除数据 -->
  <delete id="delete" parameterType="int">
  	delete from tb_user where id=#{id}
  </delete>
</mapper>

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>
	<!-- 引入数据库信息的配置文件 -->
	<properties resource="db.properties"></properties>
	<!-- 引入类型处理器 -->
	<typeHandlers>
		<typeHandler handler="org.zhouym.typehandlers.MyTypeHandler"></typeHandler>
	</typeHandlers>
	<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>
	<!-- 与映射文件建立联系 -->
	<mappers>
		<!-- 这里注意的是,资源路径是映射文件的地址,不能以点分隔 -->
		<mapper resource="org/zhouym/dao/IUserDao.xml" />
	</mappers>
</configuration>

工具类

package org.zhouym.dbutils;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class DButils {
	
	private static InputStream in;
	private static SqlSessionFactory factory = null;
	
	public static SqlSessionFactory getSqlSessionFactory() {
		try {
			in = Resources.getResourceAsStream("mybaties-config.xml");
			factory = new SqlSessionFactoryBuilder().build(in);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return factory;
	}
	
	
}

使用动态代理进行数据操作

package com.zhouym.junit;

import static org.junit.Assert.*;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import org.zhouym.dao.IUserDao;
import org.zhouym.dbutils.DButils;

import com.zhouym.javabean.User;

public class InterfaceJunitTest {

	@Test
	public void test() {
		IUserDao proxy = (IUserDao)Proxy.newProxyInstance(IUserDao.class.getClassLoader(), new Class[] {IUserDao.class}, new InvocationHandler() {
			
			@Override
			public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
				SqlSession sqlSession = DButils.getSqlSessionFactory().openSession();
				String methodName = method.getName();
				String classPath = IUserDao.class.getName();
				String statement = classPath+"."+methodName;
				if (methodName.contains("query")) {
					return sqlSession.selectList(statement, args);
				}else if (methodName.contains("addUser")) {
					return sqlSession.insert(statement, args);
				}else if (methodName.contains("updateUser")) {
					return sqlSession.update(statement, args);
				}else if (methodName.contains("deleteById")) {
					return sqlSession.delete(statement, args);
				}else if (methodName.contains("queryById")) {
					return sqlSession.selectList(statement, args);
				}
				return null;
			}
		});
		//查询数据
		List<User> list = proxy.query();
		for (User user : list) {
			System.out.println(user);
		}
	}

}

测试类

package com.zhouym.junit;

import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.zhouym.dao.IUserDao;
import org.zhouym.dbutils.DButils;

import com.zhouym.javabean.User;

public class JunitTestInterface {
	
	private static Logger logger = Logger.getLogger(JunitTestInterface.class);
	
	@Test
	public void test() {
		SqlSessionFactory factory = DButils.getSqlSessionFactory();
		SqlSession sqlSession = factory.openSession();
		//获取的IUserDao的实现 其实就是一个代理类
		IUserDao iUserDao = sqlSession.getMapper(IUserDao.class);
		//调用接口中的方法
		List<User> list = iUserDao.query();
		for (User user : list) {
			logger.info(user);
		}
	}
	
	@Test
	public void test1() {
		SqlSessionFactory factory = DButils.getSqlSessionFactory();
		SqlSession sqlSession = factory.openSession();
		//获取的IUserDao的实现 其实就是一个代理类
		IUserDao iUserDao = sqlSession.getMapper(IUserDao.class);
		
		User user = new User();
		user.setName("老胡");
		user.setAge(28);
		user.setAddress("河南");
		
		List<String> list = new ArrayList<>();
		list.add("篮球");
		list.add("跑步");
		list.add("游泳");
		user.setHobby(list);
		int result = iUserDao.addUser(user);
		if (result > 0) {
			logger.info("增加成功!!!");
		}
		sqlSession.commit();
		
	}

}

测试结果
在这里插入图片描述
注意点:
1、映射文件中的namespace的值必须是接口的全路径,例如:org.zhouym.dao.IUserDao
2、接口中的方法名在映射文件中必须要有一个id与之对应,意思就是id值与方法名相同
3、映射文件的名称与接口的名称一致

[QMT和ptrade量化交易小白入门]-121、如何用K-means聚类,每月自动筛选高流动性ETF 本专栏主要是介绍QMT和ptrade的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写200篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。 阅读详情

相关推荐

小米万兆路由器里的Docker安装可道云(Kodexplorer)私有网盘

小米2022年12月份发布了万兆路由器,里面可以使用Docker。 今天尝试在小米的万兆路由器里安装[可道云](http://kodcloud.com/)(Kodexplorer)私有网盘。

engchina的专栏 1万+

程序中使用log4J打印信息的两种方式

(1)通过org.apache.commons.logging.Log 接口实例化: public static Log log = LogFactory.getLog(String name); public static Log log = LogFactory.getLog(Class clazz); 注意:   方法传递的参数通过log4j配置格式符号%c...

weixin_30600197的博客 420

IC/FPGA笔试/面试题分析(七)建立时间和保持时间类型考题汇总分析

自从召集2020届校招同行加入新建立的“IC/FPGA校招笔试面试交流群“,见识到了很多关于建立时间和保持时间分析的题目,在为别人解答疑惑,以及别人为自己解答疑惑的同时,自己对于知识的理解更加深刻了。 对于建立时间而言,从单独的对触发器的建立时间和保持时间的分析到了对电路(系统)的建立时间到保持时间的分析,前者是核心,后者是扩展,后者建立在前者的基础之上进行推到得到,同时也是芯片内部实际遵循的时...

Reborn Lee 1万+

使用 Log4j 搭建一个日志服务器

最近项目要用到日志服务器,需要把所有服务器的日志统一存入一个日志文件服务器中,于是就想到了Log4j的SocketAppender。    网上一通搜索,终于找到了相关的只言片语,内容几乎雷同,和examples/lf5/UsingSocketAppenders中提供的例子没有什么区别!    只好自己研究了!    1.基本使用    1.1服务器    这个日志服务器的服务器端需要运行:   

JAVA|J2EE|J2ME|JDK|JSP 840

CATIA高效设计:自定义快捷键全攻略

本文详细介绍了如何在CATIA中自定义快捷键以提升设计效率。通过减少鼠标依赖、优化工作流程和减轻手腕疲劳,合理设置快捷键可显著提高建模速度。文章提供了从基础设置到高级配置的全流程指南,包括解决冲突、推荐方案及外设扩展建议,帮助用户快速掌握CATIA高效设计技巧。

weixin_42648844的博客 576

边云协同智能进化:大模型与小模型的动态训练与高效部署策略

本文深入探讨了边云协同架构下大模型与小模型的动态训练与高效部署策略。通过物流分拣、医疗影像等实战案例,展示了如何利用边云协作框架实现AI模型的智能进化,显著提升处理效率与准确性。重点解析了动态任务分配、增量学习和知识蒸馏等关键技术,为分布式训练场景提供优化方案。

work3的博客 181

java基础-log4j关键接口和类

我们以1.X版本为例 // 使用非显式配置文件  TTCCLayout layout = new TTCCLayout(); FileAppender appender = new FileAppender(layout,"e://testxxx.log"); BasicConfigurator.configure(appender); Logger logger = Log...

一个普通程序员的碎碎念 437

ESP32 Arduino 学习篇(五)TFT_eSPI库

该库有User_Setup.h和 User_Setup_Select.h两个配置文件,支持 ①自定义参数或 ②使用已有配置 驱动TFT屏幕。优点是: 1. 占用空间非常小 2. 动画清晰,充分利用每个像素点 3. 可以非常灵动. 4. 方便进行微调。首先在Libraries里面搜索安装TFT_eSPI库到你的工程文件里面。初始化屏幕, 如果是ST7735,可以往里面传一个参数, 具体用到时再看。缺点是: 1. 容易闪屏 2. 一般不会太复杂 3.需要大量的计算。特别注意: 字库7是仿7段数码屏的样式。

DOF526570的博客 2万+

Log4j原理&源码解析

一文搞懂Log4j原理

王文萱的博客 6023

Agentic-Desktop-Pet:构建本地智能桌面助手的架构与实践

智能体(Agent)作为人工智能领域的重要概念,是指能够感知环境、自主决策并执行任务以实现目标的软件实体。其核心原理在于结合感知、决策与执行模块,通过大语言模型(LLM)等推理引擎处理信息并驱动行动。这种架构的技术价值在于将AI的认知能力与具体的操作系统环境深度融合,从而创造出能主动理解用户上下文、提供个性化服务的智能伙伴。在应用场景上,智能体技术正从云端对话机器人向本地化、场景化的桌面助手演进,旨在解决传统自动化工具缺乏智能、而纯聊天机器人脱离操作环境的问题。本文探讨的Agentic-Desktop-Pe

weixin_27210125的博客 615

引入高分辨率特征层保持的YOLOv10小目标增强:从思路到完整实现

大概两个月前,我在做一个无人机航拍图像检测的项目,目标是识别图片里的小型车辆和行人。用的数据集是VisDrone,相信做小目标检测的朋友对这个数据集都不陌生。一开始我直接跑了官方YOLOv10的代码,结果在tiny vehicle这一类上mAP50只有可怜的0.312。那些小目标基本就是几个像素点,YOLOv10在三次下采样之后,这些小目标的特征几乎就消失不见了。 后来我折腾了大概三周,尝试了各种方法:改anchor、调loss权重、做数据增强、甚至考虑过换检测头。最后发现最有效的还是引入一个高分辨率特征

YOLO 43

深入Log4J源码之Appender

Appender负责定义日志输出的目的地,它可以是控制台(ConsoleAppender)、文件(FileAppender)、JMS服务器(JmsLogAppender)、以Email的形式发送出去(SMTPAppender)等。Appender是一个命名的实体,另外它还包含了对Layout、ErrorHandler、Filter等引用:  1 public interface Appe

zhouyong0的专栏 2393

高频注入是否需要对齐和强拖操作?

高频注入技术显著优化了传统FOC启动流程,但仍需部分对齐操作。传统启动必须包含位置检测、对齐和强拖等步骤,而高频注入可实现零速闭环,简化或跳过部分环节。高频注入下的对齐主要用于验证有效性、初始化观测器和建立初始磁链,形式可大幅简化。虽然高频注入基本消除了传统强拖需求,但在重载、弱凸极等特殊情况下仍需辅助。实际应用中可采用自适应混合策略,根据负载和电机类型选择最优启动方案。高频注入使对齐和强拖从"必须"变为"可选优化项",是无传感器控制的重要进步。

汽车软件开发 201

Mybatis数据库操作CRUD的使用、Mybatis使用注解开发的示例 及 java常用日志管理工具Log4j

使用Mybatis确实会简化很多的开发工作,有了Mybatis,以后DAO层只需要做有意义的事情了(写SQL),如下是Mybatis数据库操作CRUD的使用示例。在完成中各项配置后,我们用一个测试类全部实现一次对数据库全部CRUD操作示例。如下实体类Area代码,之所以再放一遍,是因为刚才在使用new的时候出现报错,Error:(44, 31) java: 无法将类 cn.kermit.pojo.Area中的构造器 Area应用到给定类型;需要: 没有参数;

本博客记录了从2014年以来在工作学习中遇到的技术问题、解决方法以及部分个人人生经历、经验等内容。 969

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Mybatis实现CRUD操作

项目实现的功能 查询所有用户信息 通过Id查询用户信息 添加用户(回显主键) 修改用户信息 删除用户信息 通过用户名字模糊查询 一、引入依赖和工程结构 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http...

L-李俊漩的博客 361

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【MyBatis】CRUD、配置解析、ResultMap、分页实现

MyBatis 是一款优秀的持久层框架MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。MyBatis 本是apache的一个开源项目ibatis, 2010年这个项目由apache 迁移到了google code,并且改名为MyBatis。

qq_53433382的博客 834

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MyBatis入门配置及CRUD实现

MyBatis的主要作用是简化Java应用程序与关系型数据库之间的交互。通过使用MyBatis,开发人员可以通过简单的配置和编写SQL语句,实现对数据库的增删改查操作。同时,MyBatis还提供了一些高级特性,如分页查询、批量操作等,使得数据库访问更加灵活和高效。总之,MyBatis是一个功能强大、易于使用的持久层框架,被广泛应用于Java开发中。

让优秀成为一种习惯! 2103

Mybatis的CRUD实现

首先导入依赖: pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoc...

... 288

Mybatis中使用注解实现CRUD

pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="h...

... 256

mybatis的应用_CRUD操作+LOG4J日志

mybatisUserMapper接口UserMapper.xmlTestresultMap的使用+分页查找LOG4J日志 UserMapper接口 public interface UserMapper { //查询所有的user public List<user> getList(); //通过id来获取user public user getById(int id); //通过name模糊查询user public List<user&

LongKai_G 581

【Mybatis学习总结二】Mybatis操作数据表的CRUD实现

本节内容学习了如何通过Mybatis实现对数据库的增删改查操作。一共有两种实现方式,一是基于XML的实现;第二种是基于注解的实现。 下面来具体介绍两种方法的具体实现: 一、基于XML的实现  1    还是基于第一节中建立的User.java实体类;  2    新建一个工具类MybatisUtils.java(因为在后面的测试类中要得到sqlsessionFactory,代码都是一样的,

noaman_wgs的博客 888

八、MyBatis通过注解的形式来实现CRUD

pom依赖: <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency>

学习笔记 294

mybatis利用代理DAO实现CRUD操作

mybatis实现CRUD操作 注:数据库字段名和实体类属性名最好是一致的。如果两端不一致,造成mybatis无法填充对应的字段信息。解决方法(见后文) 数据库设计 SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `

qq_39682037的博客 1116

mybatis利用实现类完成CRUD操作

mybatis利用实现类完成CRUD操作 数据库设计 SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varcha

qq_39682037的博客 911

Mybatis(二)--实现CRUD

上篇文章介绍了mybatis入门,在入门案例中使用了查询所有操作,这篇文章介绍mybatis中对数据库里的CRUD操作,在这之前,先导入日志分析工具log4j 目录一、日志分析工具log4j二、CRUD操作1. 查询操作2.保存操作3.删除操作4.更新操作5.模糊查询6.聚合函数三、#{}与${}四、mybatis的sql配置文件1.parameterType2.resultType3.resul...

Gopuwe的博客 1251

【MyBatis通俗易懂20190928狂神说】03 日志,log4j,分页,pagehelper,注解,注解crud,lombok

日志,log4j,分页,pagehelper,注解,注解crud,lombok

qq120631157的博客 199
上一篇: MyBatis之CRUD操作
下一篇: MyBatis之类型处理器typeHandlers
zhouym_
博客等级 码龄8年 280粉丝 208原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值