(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();
	}
}

下一篇:

SAP成本核算变式OKKN配置详解:从CK11N到CK24,手把手教你搞定标准成本发布 本文深入解析SAP成本核算变式OKKN的配置原理与实战应用,涵盖从CK11N到CK24的标准成本发布全流程。详细讲解数量结构控制、价值结构配置及间接费用计算规则,帮助成本会计精准掌握标准成本计算逻辑,解决BOM版本选择、工艺路线获取等常见问题,提升企业成本管理效率。 阅读详情

相关推荐

Notion卡顿救星:3分钟搞定DNS优化,手机电脑全平台加速指南

本文针对Notion访问慢和卡顿问题,提供了全平台DNS优化与Hosts文件修改的详细指南。通过更换优质DNS服务器或建立静态IP映射,可有效解决因网络延迟和域名解析导致的加载缓慢,实现手机与电脑端的快速加速,提升Notion使用流畅度。

v6b7n8m9q0的博客 1306

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

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

于枭森的博客 205

Unity 调用安卓内部安装apk

一、申请权限 应用内安装其他应用的权限属于特殊权限,需要在特殊申请。 Uri packageURI = Uri.parse("package:" + mContext.getPackageName()); Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI); startA...

BDDNH的博客 1238

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

PyTorch实战:5步搞定QAT量化感知训练(附避坑指南)

本文详细介绍了在PyTorch中实施量化感知训练(QAT)的五步实战流程。通过环境准备、模型融合、伪量化节点与STE原理剖析、校准微调训练、模型转换与导出等步骤,帮助开发者有效压缩模型以适配移动端与边缘设备部署,并提供了关键的超参数设置与常见问题避坑指南。

weixin_29083373的博客 417

从Wi-Fi到蓝牙:手把手教你用Cadence Virtuoso搭建一个2.4GHz锁相环频率综合器(含PFD/CP/VCO模块设计)

本文详细介绍了如何在Cadence Virtuoso中设计一个2.4GHz锁相环频率综合器(PLL),涵盖从系统架构到模块级设计的全流程。重点解析了PFD、CP和VCO等核心模块的设计技巧与仿真验证方法,帮助模拟集成电路设计师掌握高频PLL的实现要点,满足Wi-Fi和蓝牙等无线通信标准的要求。

weixin_30315723的博客 418

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

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

weixin_30667649的博客 206

12、控件使用之录入英文、阿拉伯数字删除增加功能及二维码显示

控件使用之录入英文、阿拉伯数字删除增加功能及二维码显示1、用到的控件2、添加控件2.1、添加【文本录入】控件2.1、添加【文本显示】控件2.1、添加【QR 二维码】控件3、保存工程及生成文件4、下载文件 1、用到的控件   需要用的显示控件为【文本显示】控件和【QR二维码】控件,以及触控控件【文本录入】控件。 2、添加控件 2.1、添加【文本录入】控件   【文本录入】控件也叫【ASCI 文本录入】,是用来录入ASCI 字符,打开 DGUS 软件,点击【触控控件】—【文本录入】,用鼠标框选一个区域,即可在右

嵌入式羊圈 625

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

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

MinggeQingchun的博客 990

高通MBIM拨号流程简述

高通平台MBIM流程简述

不秃头的程序猿Gabriel的博客 5070

uniapp - 鸿蒙真机运行报错hvigor ERROR: Failed :entry:default@CompileArkTS...,hvigor ERROR: default@CompileAr

uniapp鸿蒙报错> hvigor ERROR: Failed :entry:default@CompileArkTS... hvigor ERROR: default@CompileArkTS watch work[0] failed. 【HarmonyOS】工程编译后报错hvigor ERROR: Failed :entry:default@CompileArkTS,uniAPP鸿蒙开发无法编译运行启动报错,工程编译后报错,运行不起来,删除掉项目entry下的build和.preview缓存文件后重新

🏆 前端领域优质创作者 4790

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

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

qq_43702747的博客 1389

SAP Fiori Launchpad 自定义层文本翻译实战:精准修正 Tile、Catalog 与 Group 标题

SAP Fiori 项目中,入口层(tile/catalog/group)的翻译问题常被忽视,但其直接影响用户体验。与前端i18n不同,这些文本属于平台配置数据,需通过ABAP标准翻译流程(SE63)处理。关键步骤包括:使用/UI2/FLC定位Text ID和Configuration ID,根据前缀区分Main/Property WD Config Key,在SE63中锁定WDY_CONF_USERT2表对象进行翻译。操作时需注意使用系统源语言环境,翻译完成后可能需要清理缓存。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 170

传统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

VC中sqlite的使用

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

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

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

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

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

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

洞玄之境的博客 611

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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、付费专栏及课程。

余额充值