(MyBatis)动态代理Dao开发方法

dao层动态代理实现demo spring+mybatis dao层使用动态代理实现org.mybatis.spring.mapper.MapperScannerConfigurer类设置属性指定dao接口以及sqlSessionFactory 或SqlSessionTemplate 立即下载

相关文件:



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接口代理实现编写规则:
 	1. 映射文件中namespace要等于接口的全路径
 	2. 映射文件中sql语句id要等于接口的方法名
 	3. 映射文件中传入参数类型要等于接口方法的传入参数类型
 	4. 映射文件中返回结果集类型要等于接口方法的返回值类型
 -->
<mapper namespace="com.jadan.mapper.UserMapper">

	<!-- 根据id查询用户 -->
	<select id="findUserById" parameterType="java.lang.Integer" resultType="com.jadan.po.User">
		select * from user where id = #{id}
	</select>
	
	<!-- 根据用户名模糊查询用户 -->
	<select id="findUserByUsername" parameterType="java.lang.String" resultType="com.jadan.po.User">
		select * from user where username like '%${value}%'
	</select>
	
	<!-- 插入用户 -->
	<insert id="insertUser" parameterType="com.jadan.po.User">
		<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
			select LAST_INSERT_ID()
		</selectKey>
		insert into user(username, sex, birthday, address)
		 value(#{username},#{sex},#{birthday},#{address})
	</insert>
	
	<!-- 更新用户信息 -->
	<update id="updateUserById" parameterType="com.jadan.po.User">
		update user set sex = #{sex} where id = #{id}
	</update>
	
	<!-- 删除用户信息 -->
	<delete id="delUserById" parameterType="java.lang.Integer">
		delete from user where id = #{id}
	</delete>
</mapper>


UserMapper.java 接口文件:

package com.jadan.mapper;

import java.util.List;
import com.jadan.po.User;

public interface UserMapper {

	// 根据id查询用户
	public User findUserById(Integer id);
	
	// 根据用户名模糊查询用户
	public List<User> findUserByUsername(String username);
	
	// 插入用户
	public void insertUser(User user);
	
	// 更新用户
	public void updateUserById(User user);
	
	// 删除用户
	public void delUserById(Integer id);
}

SqlMapConfig.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>
	<!-- 和Spring整合后 environments配置将废除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理 -->
			<transactionManager type="JDBC" />
			
			<!-- 数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis01?characterEncoding=utf-8"/>
				<property name="username" value="root"/>
				<property name="password" value="1234"/>
			</dataSource>
		</environment>
	</environments>
	
	<!-- 配置映射文件 -->
	<mappers>
		<!-- 
		  使用class属性引入接口的全路径名称:
		  使用规则:
		     1. 接口的名称和映射文件名称除扩展名外要完全相同
		     2. 接口和映射文件要放在同一个目录下
		 -->
		<mapper class="com.jadan.mapper.UserMapper"/>		
	</mappers>
</configuration>


UserMapperTest 测试文件:

package mybatis_day01;

import java.io.InputStream;
import java.util.Date;
import java.util.List;
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.junit.Before;
import org.junit.Test;
import com.jadan.mapper.UserMapper;
import com.jadan.po.User;

public class UserMapperTest {
	
	private SqlSessionFactory factory;
	// 作用: 在测试方法前执行这个初始化方法
	@Before
	public void setUp() throws Exception {
		// 核心配置文件名
		String resource = "SqlMapConfig.xml";
		// 通过流将核心配置文件读取进来
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// 通过核心配置文件输入流来创建会话工厂
		factory = new SqlSessionFactoryBuilder().build(inputStream);
	}
	
	// 测试: 通过id查用户
	@Test
	public void testFindUserById() {
		SqlSession openSession = factory.openSession();
		// 通过getMapper方法来实例化接口
		UserMapper mapper = openSession.getMapper(UserMapper.class);
		
		User user = mapper.findUserById(1);
		System.out.println(user);
	}
	
	// 测试: 通过用户名模糊查询用户
	@Test
	public void testFindUserByUsername() {
		SqlSession openSession = factory.openSession();
		// 通过getMapper方法来实例化接口
		UserMapper mapper = openSession.getMapper(UserMapper.class);
		
		List<User> list = mapper.findUserByUsername("王");
		System.out.println(list);
	}

	// 测试: 插入用户
	@Test
	public void testInsertUser() {
		SqlSession openSession = factory.openSession();
		// 通过getMapper方法来实例化接口
		UserMapper mapper = openSession.getMapper(UserMapper.class);
		
		User user = new User();
		user.setUsername("Jadan");
		user.setBirthday(new Date());
		user.setSex("男");
		user.setAddress("China");
		
		mapper.insertUser(user);
		
		// 提交事务
		openSession.commit();
	}
	
	// 测试: 更新
	@Test
	public void testUpdate() {
		SqlSession openSession = factory.openSession();
		// 通过getMapper方法来实例化接口
		UserMapper mapper = openSession.getMapper(UserMapper.class);
		
		User user = new User();
		user.setId(42);
		user.setSex("男");
		mapper.updateUserById(user);
		
		openSession.commit();
	}
	
	// 测试: 删除
	@Test
	public void testDelUserById() {
		SqlSession openSession = factory.openSession();
		// 通过getMapper方法来实例化接口
		UserMapper mapper = openSession.getMapper(UserMapper.class);
		
		mapper.delUserById(42);
		openSession.commit();
	}
}

下一篇:

PCL 区域生长分割【2026最新版】 区域生长算法原理介绍、代码实现以及一个具体实验场景的应用案例进一步实现将分割结果的分类保存至本地文件夹。最近一次更新时间为:2026年5月4日。 阅读详情

相关推荐

Prokka实战:10分钟搞定细菌基因组注释(附详细参数解析)

本文深入解析Prokka细菌基因组注释工具的核心参数与实战策略。通过拆解其集成化工作流程,详细解读物种分类、功能注释、输出控制等关键参数,并提供快速初筛、高质量发表、质粒注释及批量处理四种典型场景的高效参数组合方案,帮助用户精准掌控注释过程,将原始序列转化为有价值的生物学见解。

weixin_29271053的博客 442

MyBatis传统Dao模式开发与代理模式开发

本文详细介绍了MyBatis的主要操作方法

于枭森的博客 205

STM32F103跑LVGL,用DMA加速刷屏,800*480大屏也能丝滑

本文详细介绍了如何在STM32F103芯片上通过DMA加速和内存优化,实现800*480大屏的LVGL流畅运行。通过FSMC+DMA硬件架构优化、双缓冲机制和LVGL参数调优,显著提升了界面刷新率和响应速度,适用于嵌入式GUI开发中的高性能需求场景。

weixin_30357231的博客 376

mybatis动态代理与传统的dao访问数据库对比,来理解mybatis动态代理的原理。(部分注释内容属于个人理解内容)

mybatis动态代理与传统的dao访问数据库对比,来理解mybatis动态代理的原理。(部分注释内容属于个人理解内容) 一、使用传统的dao方式来访问数据库的步骤如下。 第一,创建student类 public class Student{ private Integer id; private String name; private Integer age; private Integer grade; } 第二,创建StudentDao接口 //操作student表

Self_discipline8的博客 417

手把手教你用gmid方法设计二级运放:从理论到仿真全流程(附避坑指南)

本文详细介绍了使用gmid方法设计二级运放的全流程,从理论到仿真实践,特别针对初学者常见问题提供避坑指南。通过系统化的晶体管尺寸确定技术,帮助工程师在性能、功耗和面积之间找到最佳平衡点,适用于模拟集成电路设计中的关键模块开发。

weixin_29213525的博客 271

从零实现地震波场模拟:交错网格有限差分法核心代码精讲

本文详细介绍了从零实现地震波场模拟的核心技术,重点讲解了交错网格有限差分法的实现过程。通过速度-应力弹性波方程的离散化处理,结合代码实例演示了应力与速度更新的关键步骤,并分享了震源加载、稳定性条件等实用技巧,为计算地球物理学研究提供实践指导。

weixin_42556197的博客 410

一张图带你看懂原始dao与SQL动态代理开发的区别-Mybatis

//转载请注明出处:https://www.cnblogs.com/nreg/p/11156167.html 1.项目结构区别: 2.开发区别: 注:其中原始dao开发的实现类UserDaoImpl 与动态代理开发的工具类UserService的第16行-第27行代码可以提炼出来, 每个逻辑方法里都要注入这6行代码,会有些繁琐,因此需要提炼出来作为一个工厂类,对外提供...

weixin_30667649的博客 206

在ZYNQMP上点亮800x480 LCD屏:从framebuffer到DRM框架的完整驱动移植实战

本文详细介绍了在ZYNQMP平台上点亮800x480 LCD屏的完整驱动移植实战,从framebuffer到DRM框架的技术实现。内容涵盖硬件配置、设备树设置、显示时序参数调试以及DRM驱动核心实现,帮助开发者快速掌握PetaLinux系统中的LCD驱动开发技巧。

weixin_33701294的博客 427

Java--MyBatis的Dao方式以及Dao动态代理

一、MyBatis传统Dao方式以及Dao动态代理 二、MyBatis传参parameterType 三、MyBatis输出参数 resultType 和 resultMap 四、MyBatis动态SQL

MinggeQingchun的博客 990

matsim教程及其案例

MATSim 是一个强大的交通仿真工具,适合研究交通政策、出行行为优化和城市规划。建议从官方示例入手,逐步尝试修改参数和扩展功能。遇到问题时,优先查阅官方文档和社区讨论。(Multi-Agent Transport Simulation Toolkit)的教程和案例资源整理,涵盖基础入门、核心概念、实际应用案例及学习路径。MATSim 是一个开源的、基于多智能体的交通仿真框架,用于模拟城市交通系统中的出行行为、交通流量和交通政策影响。

weixin_70682362的博客 1093

2026年数学建模国赛B题无线电干扰源的快速自动定位与清除 论文详细解析

数学建模竞赛论文无线电干扰源的快速自动定位与清除2026 年高教社杯全国大学生数学建模竞赛 B 题完整求解论文交会定位、极大极小测点优化、自适应多频道搜索与定向源恢复的统一建模模型、算法、代码、图表与验证一体化交付本文研究圆形目标区域中多个未知无线电干扰源的快速检测、定位与清除问题,建立了由误差楔交会模型、角度观测信息模型、分层勘测模型、鲁棒射线交会模型和定向覆盖反馈模型组成的统一求解框架。模型同时覆盖题目中的四个子问题:多测向射线形成的多边形定位区域及直径、第二个测点的极大极小优选、全向源自动搜索清除策略

YOLO 357

mybatis的两种开发方式(传统dao和动态代理模式)

文章目录一、(一)就前一章的jdbc来进行连接数据库出现的问题二、什么是mybatis传统daoxml配置daodaoimpl动态代理SqlMapConfig配置的顺序 一、 (一)就前一章的jdbc来进行连接数据库出现的问题 频繁创建和打开、关闭数据连接,太消耗资源 Sql语句存在硬编码,不利于维护 Sql参数设置硬编码,不利于维护 结果集获取与遍历复杂,存在硬编码,不利于维护,期望能够查询后返回一个java对象 二、什么是mybatis MyBatis 本是apache的一个开源项目iBatis

qq_43702747的博客 1389

Codex入门01-环境安装(小白入门:手把手教你安装配置,国内网络也能搞定)

本文手把手教你从零搭建 Codex CLI 开发环境。内容涵盖 Node.js 安装(macOS/Windows/Linux)、Codex CLI 全局安装、ChatGPT 账号登录认证,以及国内网络代理配置。还包括常见问题排查和一键启动脚本编写。跟着截图一步步操作,10分钟搞定全部环境,开始用AI写代码!

yueyeguzhuo的专栏 344

传统Dao封装与动态代理Dao封装

使用到的工具类 package com.java.utils; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.i...

Woo_home的博客 529

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

假人有限元模型

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

Dao层的开发方法(原始dao开发和Mapper接口开发)

原始Dao开发方法 1.编写dao接口 2.编写dao接口的实现类 3.Mapper映射文件 4.SqlMapConfig配置文件 5.测试类 6.结果 8.总结 1、dao接口实现类方法中存在大量重复方法,就是通过SqlSessionFactory创建SqlSession,调用SqlSession的数据库操作方法 2、调用sqlsession方法时将statement的id硬编码了...

廖子默 3493

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

学习Mybatis框架(二)—开发Dao层

mybatis开发dao两种方法 原始dao开发方法(程序需要编写dao接口和dao实现类) mybaits的mapper接口(相当于dao接口)代理开发方法 从 XML 中构建 SqlSessionFactory 不使用 XML 构建 SqlSessionFactory这里不讨论了 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。S...

洞玄之境的博客 611

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Mybatis Dao开发方式详解

@TOC

做自己喜欢的事情就好啦 412

mybatis(1)简单配置文件,Dao架构体系以及Dao开发方法

导入依赖jar包 配置SqlMapConfig.xml 配置log4j.properties,用来输出sql 4.pojo工程目录下,创建对象 配置sql查询的映射文件user.xml 加载映射文件 2.配置SqlMapConfig.xml的细节 <!-- environments环境 default=代表使用哪个环境--> <environments default="d...

Zi_Xuan的博客 303

Mybatis DAO开发

使用Mybatis开发Dao,通常有两个方法,即。

m0_61925586的博客 910

MyBatis 学习 (二) dao层开发的两种方式

使用MyBatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper动态代理开发方法。 1. 原始Dao开发方式 原始Dao开发方法需要程序员编写Dao接口和Dao实现类(实现类中又包含了大量重复代码 编写映射文件如下 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.or

Mr_黑_ 的博客 426

Mybatis学习笔记(三) —— DAO开发方法

一、SqlSession的使用范围   SqlSession中封装了对数据库的操作,如:查询、插入、更新、删除等。   SqlSession通过SqlSessionFactory创建。   SqlSessionFactory是通过SqlSessionFactoryBuilder进行创建。 1.1SqlSessionFactoryBuilder   SqlSessionFact...

VNOpU2015的专栏 129

Mybatis(三)Mapper动态代理方式

1.开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。 Mapper接口开发需要遵循以下规范: 1、Mapper.xml文件中的namespace与mapper接口的类路径相同。 2、Mapper接口方法名和Mapper.xml中定义的每个stateme...

jcsyl_mshot的博客 267

JAVAEE——Mybatis第一天:入门、jdbc存在的问题、架构介绍、入门程序、Dao的开发方法、接口的动态代理方式、SqlMapConfig.xml文件说明...

1. 学习计划 第一天: 1、Mybatis的介绍 2、Mybatis的入门 a)使用jdbc操作数据库存在的问题 b)Mybatis的架构 c)Mybatis的入门程序 3、Dao的开发方法 a)原始dao的开发方法 b)接口的动态代理方式 4、SqlMapConfig.xml文件说明 2.Mybatis介绍 MyBatis 本是apache的...

depiaozhanyou66348的博客 238

MyBatis的Dao层开发

mybatis开发dao的方法SqlSession使用范围SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory 将SqlSessionFactoryBuilder当成一个工具类使用即可,不需要使用单例管理SqlSessionFactoryBuilder。 在需要创建SqlSessionFactory时候,

Marvel__Dead 胡艺宝的博客 1263

3、ssm之DAO开发方法

ssm之DAO开发方法 文章目录ssm之DAO开发方法原始 Dao 开发方式映射文件Dao 接口Dao实现类存在的问题Mapper 动态代理方式原理Mapper.xml(映射文件)Mapper.java(接口文件)加载 UserMapper.xml 文件测试程序 使用 Mybatis 开发 Dao,通常有两个方法,即原始 Dao 开发方法和 Mapper 接口开发方 法。 原始 Dao 开发方式 原始 Dao 开发方法需要程序员编写 Dao 接口和 Dao 实现类。 映射文件 <?xml versio

阿涛的敲码时光 547

【Mybatis框架入门】-01 jdbc的轻量级持久层框架 适合互联网、电商项目 架构 原生Dao实现、mapper动态代理方法 占位符 拼接符 hibernate区别

1、mybatis的介绍 2、Mybatis的入门 a)使用jdbc操作数据库存在的问题 b)Mybatis的架构 c)Mybatis的入门程序 3、Dao的开发方法 a)原始dao的开发方法 b)动态代理方式 4、SqlMapConfig.xml文件说明

alwarse 339
上一篇: (MyBatis)原生Dao开发方法
下一篇: (Mybatis)SqlMapConfig.xml 核心配置文件
Jadan-Z
博客等级 码龄10年 8粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值