MyBatis框架的入门案例
MyBatis框架的入门案例
资源地址:https://download.csdn.net/download/weixin_41957626/87531373
1.MyBatis的配置
环境:基于maven的结构
1.1目录结构

1.2依赖包

<dependencies>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<!--log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<!-- 简化属性开发-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
1.3配置文件代码
1.主要分为log4j的配置和MyBatis的配置文件的配置
SqlMapConfig.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--nybatis的配置文件
设置数据源等信息
-->
<configuration><!--配置mysql环境-->
<!-- 默认采用development环境的配置--><environments default="development">
<!-- 开发环境,id的值随便写--><environment id="development"><!--配置事务类型交给JDBC处理,还有别的--><transactionManager type="JDBC"></transactionManager><!--数据源POOLED设置使用连接池UNPOOLED表示不使用连接池--><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/xxxx?userSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!--注册映射文件,注意地址--><mappers>
<!-- 注意地址的写法-->
<!-- 采用的不是在resource目录下配置的 <mapper resource="cn/lxz/mapper/xml/UserMapper.xml"></mapper>-->
<!-- 采用的是在resource目录下配置的--><mapper resource="mappers/UserMapper.xml"></mapper></mappers></configuration>
log4j配置
log4j.rootLogger=debug, stdout, Rlog4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%nlog4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.loglog4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=5log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n 1.4实体和mapper代码
1.4.1实体代码
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
private Integer id;
private String name;}
1.4.2mapper代码
public interface UserMapper {public List<User> findAllUsers();public int addUser(User user);public int deleteUserById(User user);public int updateUser(User user);}
1.4.3mapper映射文件代码

<?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 namespace="cn.lxz.mapper.UserMapper">
<!--sql--> <!-- select insert update delete -->
<insert id="addUser">
insert into user(name) values (#{name})
</insert>
<update id="updateUser">
update user set name=#{name} where id=#{id}
</update>
<delete id="deleteUserById">
delete from user where id=#{id}
</delete>
<select id="findAllUsers" resultType="cn.lxz.domain.User">
select * from user;
</select></mapper>
1.4.4注意事项
映射文件注意事项:
映射文件中的id属性是对应的持久层接口中的方法名
映射文件要和接口名称相同。
映射文件要和接口的目录结构相同。
映射文件中namespace属性要写接口的全名。
映射文件中标签的id属性是接口方法的方法名。
映射文件中标签的resultType属性是接口方法的返回值类型。
映射文件中标签的parameterType属性是接口方法的参数类型。
映射文件中resultType、parameterType属性要写全类名,如果是集合类型,则写其泛型的全类名。 1.5测试类
1.5.1测试代码
需要学会使用Junit单元测试的方法
掌掌握builder,factory再session,再去加载mapper再去执行相关的操作
1.查询所有的用户信息
public class UserMapperTest {@Testpublic void findAll() throws IOException {//读取核心配置文件InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");//创建builder对象SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();//factory对象SqlSessionFactory factory = builder.build(inputStream);//创建sessionSqlSession session = factory.openSession();//SqlSession对象获取代理对象UserMapper mapper = session.getMapper(UserMapper.class);//代理对象执行方法List<User> all = mapper.findAllUsers();for (User u : all){System.out.println(u);}//关闭资源
session.close();
inputStream.close();}
}
2.增加用户的信息
@Test
public void addUser() throws Exception{
//读取核心配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//创建builder对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//factory对象
SqlSessionFactory factory = builder.build(inputStream);
//创建session
SqlSession session = factory.openSession();
//SqlSession对象获取代理对象
UserMapper mapper = session.getMapper(UserMapper.class);
//================================================================
mapper.addUser(new User(null,"王五"));
//================================================================
//关闭资源
session.close();
inputStream.close();
}
1.5.2测试截图
- 查询全部的信息

- 增加

相关文章:
MyBatis框架的入门案例
MyBatis框架的入门案例 资源地址:https://download.csdn.net/download/weixin_41957626/87531373 1.MyBatis的配置 环境:基于maven的结构 1.1目录结构 1.2依赖包 <dependencies><!--mybatis--><dependency><groupId>org.mybatis…...
红黑树-随记
文章目录1.为什么hashmap用红黑树不用二叉树和平衡二叉树1.1 二叉树(Binary Search Tree)1.2 红黑树(Red Black Tree)1.3 平衡二叉树(Balence Binary Tree)也称AVT2.为什么mysql用b数,不用B数或…...
Python异常处理更新,正常和不正常的都在这里
嗨害大家好鸭!我是小熊猫~ 异常处理篇嗨害大家好鸭!我是小熊猫~Python标准异常💨什么是异常?不正常异常处理💨使用except而不带任何异常类型使用except而带多种异常类型try-finally 语句异常的参数触发异常用户自定义异…...
[数据结构]:10-二叉排序树(无头结点)(C语言实现)
目录 前言 已完成内容 二叉排序树实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-BinarySearchTreeCommon.cpp 04-BinarySearchTreeFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容,除其中使用到C引用外,全为C语言…...
openstack浅析
** OpenStack是一个由多个组件组成的开源云计算平台,每个组件都有不同的功能和用途。 ** 组件构成 以下是OpenStack中一些常见的组件及其功能: Nova:用于管理虚拟机的组件,提供了虚拟机的创建、销毁、管理等功能。 Neutron&am…...
华为OD机试Golang解题 - 特异性双端队列 | 含思路
华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典文章目录 华为Od必看系列使用说明本期题目…...
代码随想录中:回溯算法的基础
回溯算法是一种暴力的搜索方式;回溯法一般与递归同时存在。 回溯法,一般可以解决如下几种问题: 组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题:一个…...
Android kotlin 系列讲解(进阶篇)Jetpack系列之LiveData
<<返回总目录 文章目录 一、LiveData是什么二、LiveData测试一、LiveData是什么 LiveData是Jetpack提供的一种响应式编程组件,它可以包括任何类型的数据,并在数据发生变化的时候通知给观察者。LiveData特别适合与ViewModel结合在一起使用,虽然它也可以单独在别的地方…...
如何判断有向无环图:构造有向无环图
拓扑序列:可以用来判断一个有向图是否有环! 拓扑排序可以判断有向图是否存在环。我们可以对任意有向图执行上述过程,在完成后检查A序列的长度。 若A序列的长度小于图中点的数量,则说明某些节点未被遍历,进而说明图中存…...
【2022.1.3】手脱压缩壳练习(含练习exe)
【2022.1.3】手脱压缩壳练习(含练习exe) 文章目录【2022.1.3】手脱压缩壳练习(含练习exe)0、简介1、单步跟踪法(#)方法介绍(0)练习exe下载(1)、查看源程序&am…...
【异或哈希】CF855 div3 F
感觉这道题跟之前有一题特别像,都是异或哈希感觉这种题应该很典,记录一下(66条消息) Codeforces Round #841 (Div. 2) and Divide by Zero【异或差分动态map维护】 2022 C. Even Subarrays_lamentropetion的博客-CSDN博客Problem - F - Codeforces题意&a…...
深度学习|改进两阶段鲁棒优化算法i-ccg
目录 1 主要内容 2 改进算法 2.1 CC&G算法的优势 2.2 i-CCG算法简介 3 结果对比 1 主要内容 自从2013年的求解两阶段鲁棒优化模型的列和约束生成算法(CC&G)被提出之后,基本没有实质性的创新,都是围绕该算法在各个领…...
C++11轻松打印本地时间
C11之前,想要获取时间并对其打印是有些困难的,因为C并没有标准时间库。想要对时间进行统计就需要调用C库,并且我们要考虑这样的调用是否能很好的封装到我们的类中。 C11之后,STL提供了 chrono 库,其让对时间的操作更加…...
Eureka - 总览
文章目录前言架构注册中心 Eureka Server服务提供者 Eureka Client服务消费者 Eureka Client总结资源前言 微服务(Microservices,一种软件架构风格)核心的组件包括注册中心,随着微服务的发展,出现了很多注册中心的解决…...
【算法设计-枚举、分治】素数、约数、质因数分解
文章目录1. 素数判定2. 素数筛选法3. 质因数分解4. 求一个数的约数5. 求两个数的最大公约数(GCD)6. 求两个数的最小公倍数(LCM)1. 素数判定 判定从 2 到sqrt(n)依次能否把 n 整除,若存在可以整除的数则说明 n 不是素数…...
【第十四届蓝桥杯】第三期模拟赛B组C++题解(待修正+持续更新-ing)
文章目录写在前面一、找最小数题目描述解题报告1、大体思路2、代码详解二、求列名题目描述解题报告1、大体思路2、代码详解三、求日期数题目描述解题报告1、大体思路2、代码详解四、取数题目描述解题报告1、大体思路2、代码详解五、最大连通分块题目描述解题报告1、大体思路2、…...
线程池和ThreadLocal详解
线程池和ThreadLocal详解线程池池化模式:线程池里的线程数量设定为多少比较合适?添加线程规则:实现原理:线程池实现任务复用的原理线程池状态:Executors 创线程池工具类手动创建(更推荐):自动创…...
[深入理解SSD系列综述 1.7] SSD固态存储市场发展分析与预测_固态存储技术发展方向(2022to2023)
前言 自2020年疫情爆发以来,远程办公、网上教育、流媒体等等应用引爆对消费电子及云服务的需求增长,全球数字化转型加速,带来了两年的闪存风光时刻。然而,进入2022年,在俄乌冲突、疫情重燃、通胀上升等一系列事件冲击下,全球经济下行风险加剧,对智能手机、PC等科技产品的…...
【2021.12.25】ctf逆向中常见加密算法和编码识别
【2021.12.25】ctf逆向中常见加密算法和编码识别(含exe及wp) 文章目录【2021.12.25】ctf逆向中常见加密算法和编码识别(含exe及wp)0、前言1、基础加密手法2、base64(1)原理:(2&#…...
【数据结构初阶】堆排序
目录 前言 概念 堆排序的实现 1.建堆 (1)堆向上调整算法 (2)堆的向下调整算法 2. 利用堆删除思想来进行排序 3.堆排序的时间复杂度 4.源码 总结 前言 前边我们学习了堆的实现,对堆的每个接口都进行了详细的讲…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
