软件工程实训day01-mybatis

2023-10-29

本次实训环境:

jdk:1.8

编辑器:eclipse

数据库:mysql,SQLyog

实训所得结果:使用mybatis进行简单增删改查操作

代码上传gitee:

创建数据库:

DROP TABLE IF EXISTS `computers`;

CREATE TABLE `computers` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键(电脑编号)',
  `brand` varchar(20) DEFAULT NULL COMMENT '品牌',
  `computer_name` varchar(40) DEFAULT NULL COMMENT '电脑名字',
  `memory_size` float DEFAULT NULL COMMENT '内存大小',
  `hard_size` float DEFAULT NULL COMMENT '硬盘大小',
  `cpu_type` varchar(20) DEFAULT NULL COMMENT 'CPU型号',
  `system` varchar(40) DEFAULT NULL COMMENT '操作系统',
  `price` float DEFAULT NULL COMMENT '单价',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

添加3条记录,结果如下:

 在eclipse中新建项目(略)

新建lib文件夹,导入mybatis、mysql数据库连接驱动两个jar包

 选中Jar包,点击build path

Jar包前的图形是一个小坛子说明添加成功

 新建一个resouces文件夹,该文件夹主要放配置文件

 在resources下新建一个mybatis.xml文件,这个文件是我们的主配置文件

 编写主配置文件(可以自定义模板)

mybatis主配置文件头,输入“<”,会弹出提示符,如果没有弹出提示符,说明前期的模板导入错误。

<?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">

在主配置文件中配置数据库的连接信息

包括:数据库驱动、urlusenramepassword

<?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>
	<typeAliases>
		<package name="cn.java.entity"/>
	</typeAliases>
	<environments default="mysql">
		<environment id="mysql">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false"/>
				<property name="username" value="root"/>
				<property name="password" value="123456"/>
			</dataSource>
		</environment>
	
	</environments>
	
</configuration>

编写局部配置文件(mapper文件)

新建对应Java文件

创建局部配置文件

局部配置文件头

<?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">

引入命名空间(对应接口的全限定包名)

<?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.java.dao.impl.ComputerDaoImpl">

	
</mapper>

在mapper内部添加对数据库的操作---增删改查

提示:在xml文件中写入句子前,先在数据库中验证,sql语句是否正确

<?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.java.dao.impl.ComputerDaoImpl">

	<!-- 查询全部 -->
	<select id="selectAll" resultType="computer">
		SELECT * FROM computers
	</select>
	
	<!-- 按单条件查询 -->
	<select id="selectById" parameterType="Long" resultType="computer">
		SELECT * FROM computers WHERE id=#{0}
	</select>
	
	<!-- 按多条件查询 -->
	<select id="selectByConditions" parameterType="Map" resultType="computer">
		SELECT * FROM computers WHERE brand=#{b} AND memory_size=#{m}
	</select>
	
	<!-- 添加 -->
	<insert id="addComputer" parameterType="Map" >
		INSERT INTO computers SET brand=#{brand},computer_name=#{computer_name},memory_size=#{memory_size},hard_size=#{hard_size},cpu_type=#{cpu_type},system=#{system},price=#{price};
	</insert>
	
	<!-- 更新 -->
	<update id="updateComputer" parameterType="Map">
		UPDATE computers SET computer_name=#{computer_name},cpu_type=#{cpu_type} WHERE id=#{id};
	</update>
	
	<!-- 删除 -->
	<delete id="deleteComputer" parameterType="Long">
		DELETE FROM computers WHERE id=#{id};
	</delete>

</mapper>

测试:

在测试类中新建 init 方法,此方法是为了获取SqlSession,因为每个操作都需要,所以抽取成一个单独的方法以便调用

public class ComputerDaoImpl {
	
	static SqlSession session = null;
	
	@Before
	public void init() throws IOException {
	
		SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();

		InputStream ins = ins=Resources.getResourceAsStream("mybatis.xml");
		
		SqlSessionFactory ssf = sfb.build(ins);
		session = ssf.openSession();
		
	}

}

编写测试方法:

public class ComputerDaoImpl {
	
	static SqlSession session = null;
	
	@Before
	public void init() throws IOException {	
		SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
		InputStream ins = ins=Resources.getResourceAsStream("mybatis.xml");		
		SqlSessionFactory ssf = sfb.build(ins);
		session = ssf.openSession();		
	}
	
	@Test
	public void selectAll() throws IOException {	
		List<Computer> lists = session.selectList("cn.java.dao.impl.ComputerDaoImpl.selectAll");
		for(Computer computer:lists) {
			System.out.println(computer);
		}	
	}
	
	@Test
	public void selectById() throws IOException {		
		Computer computer = session.selectOne("cn.java.dao.impl.ComputerDaoImpl.selectById",2L);
		System.out.println(computer.toString());	
	}
	
	@Test
	public void selectByConditions() throws IOException {		
		Map<String,Object> parameter = new HashMap<String,Object>();
		parameter.put("b", "lenovo");
		parameter.put("m", 4F);
		List<Computer> list = session.selectList("cn.java.dao.impl.ComputerDaoImpl.selectByConditions",parameter);
		for(Computer computer:list) {
			System.out.println(computer);
		}
	}
	
	@Test
	public void addComputer() {
		Map<String,Object> parameter = new HashMap<String,Object>();
		parameter.put("brand", "外星人");
		parameter.put("computer_name", "fun410");
		parameter.put("memory_size", 4F);
		parameter.put("hard_size", 1024);
		parameter.put("cpu_type","i10");
		parameter.put("system", "windows10");
		parameter.put("price", 4999);
		
		int flag = session.insert("cn.java.dao.impl.ComputerDaoImpl.addComputer",parameter);
		session.commit();	
		if(flag>=1)
		{
			System.out.println("插入成功!");
		}else {
			System.out.println("插入失败!");
		}		
	}
	
	@Test
	public void updateComputer() {
		Map<String,Object> parameter = new HashMap<String,Object>();
		parameter.put("computer_name", "宏碁蜂鸟fun410");
		parameter.put("cpu_type","i11");
		parameter.put("id", 9);
		int flag = session.insert("cn.java.dao.impl.ComputerDaoImpl.updateComputer",parameter);
		session.commit();		
		if(flag>=1)
		{
			System.out.println("更新成功!");
		}else {
			System.out.println("更新失败!");
		}	
	}
	
	@Test
	public void deleteComputer() {
		int flag = session.delete("cn.java.dao.impl.ComputerDaoImpl.deleteComputer",9L);
		session.commit();	
		if(flag>=1)
		{
			System.out.println("删除成功!");
		}else {
			System.out.println("删除失败!");
		}
	}		
}

总结:

        由于之前已经自学过mybatis,所以只是简单记录一下实训过程~~

        之前自学的时候用的是IDEA编辑器,此时用eclipse略显生疏,好在操作能够顺利实现

        大佬都不会吐槽编辑器的,所以我要吐槽一下eclipse~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软件工程实训day01-mybatis 的相关文章

  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • ajax工作原理 网页从输入url到呈现过程(TCP ,渲染引擎) 头像上传 下拉加载 节流 防抖 常见状态码

    Ajax工作原理 1 http网络传输协议 规定 前后端交互的 数据传输格式 协议 规定 前后端交互的数据传输格式 2 http协议组成两个部分 2 1前端 必须发送 请求报文格式 2 2后端 必须响应 响应报文格式 3 请求报文格式组成
  • VueX是什么?好处?何时使用?

    VueX相关 1 VueX是什么 2 使用VueX统一管理状态的好处 3 什么样的数据适合存储到Vuex中 1 VueX是什么 VueX是实现组件全局状态 数据 管理的一种机制 可以方便的实现组件之间数据的共享 如果没有VueX实现数据间的
  • 点云配准(四) Sparse Point Registration 算法浅析

    Sparse Point Registration SPR 是一篇2017年的点云配准算法 该算法的主要目的是对稀疏点云进行配准 并且取得了不错的成果和突破 本文一方面是对SPR配准算法模型进行了简单的原理解析以及附加代码实现 另一方面是对
  • c++ 的 multiple definition of `XXX‘

    文章目录 一 为什么会有多重定义问题 二 一些错误情景 1 头文件忘记加条件编译 2 类的静态变量在头文件定义 3 全局变量在 h文件定义 4 待补充 三 参考链接 一 为什么会有多重定义问题 声明 指出存储类型 并给出存储单元指定名称 定
  • C语言博客作业--嵌套循环

    一 PTA实验作业 题目1 7 1 查询水果价格 给定四种水果 分别是苹果 apple 梨 pear 桔子 orange 葡萄 grape 单价分别对应为3 00元 公斤 2 50元 公斤 4 10元 公斤 10 20元 公斤 首先在屏幕上
  • JavaScript函数的命名方式

    函数的命名方式 JavaScript代码服用单位是函数 函数可以包含一段可执行代码 也可以接受调用者传入的参数 JavaScript定义函数主要有以下三种方式 第一种方式 命名函数 第二种 匿名函数
  • 【C++】函数的设计与使用(三)重载函数、模板函数

    重载函数 参数列表不相同 可能是参数类型不相同 或者参数个数不相同 都不相同 也可以 的两个或多个函数 可以拥有相同的函数名称 编译器会把实参和每个重载函数的形参比对 找出哪个重载函数合适 所以每个重载函数的参数列表必须和其他的重载函数的不
  • ubuntu安装bochs,nasm

    1 ubuntu上安装bochs nasm 1 1 安装缘由 最近想自己做个操作系统玩一玩巩固巩固知识 工欲善其事 必先利其器 开发操作系统首先得搭建环境 编程语言上我选择C和汇编完成 开发环境是在我装的一个虚拟机ubuntu上 ubunt
  • 【满分】【华为OD机试真题2023 JAVA&JS】统计匹配的二元组个数

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 统计匹配的二元组个数 知识点数组 时间限制 1s 空间限制 32MB 限定语言 不限 题目描述 给定两个数组A和B 若数组A的某个元素A i 与数组B中的某个元素B j 满足 A
  • NodeJS - Express使用

    文章目录 1 参数 1 1 获取URL中的动态参数 2 静态资源 2 1 挂载路径前缀 3 nodemon 4 1路由 4 1 路由的匹配过程 4 2 模块化路由 4 3 为路由模块添加前缀 5 中间件 5 1 全局生效的中间件 5 2 全
  • 功能强大,但因安全隐患被企业禁用的Python内置函数

    功能强大 但却因安全隐患被企业禁用的Python内置函数 eval 函数是Python的内置函数 功能非常强大 但是存在不小的安全隐患 有些企业或项目出于安全考虑 禁止使用eval 函数 会在一些安全相关的扫描校验中进行识别和拦截 杜绝使用
  • 【嵌入式】虚拟机未能将管道连接到虚拟机: 系统找不到指定的文件

    这两天虚拟机莫名奇妙的爆出这个错误 在升级win11过后解决嘞这个问题 但是win11确实不好用最后退回win10这个问题又出现了 这里记录一下我的解决办法 设置为管理员运行程序 然后遇到新的报错了 进入控制面板选择C 2015修复环境 到
  • React性能提升

    了解react如何提升性能将有助于我们更好的编写代码 个人认为react中很多的性能优化 其实都是围绕着react的核心diff算法来展开的 通过优化 减少diff算法中一些不必要的步骤 从而来提高性能 下面是我平时开发总结出来的一些经验
  • QT控件之(TableView)中设置为不可编辑状态

    加入以下一句代码 ui gt tableView gt setEditTriggers QAbstractItemView NoEditTriggers
  • 【H.264/AVC视频编解码技术详解】二十三、帧间预测编码(1):帧间预测编码的基本原理

    H 264 AVC视频编解码技术详解 视频教程已经在 CSDN学院 上线 视频中详述了H 264的背景 标准协议和实现 并通过一个实战工程的形式对H 264的标准进行解析和实现 欢迎观看 纸上得来终觉浅 绝知此事要躬行 只有自己按照标准文档
  • STM32初始化USART后只发送了一个0x00,而无法发送其他数据的解决方法

    GPIO InitTypeDef GPIO InitStructure USART InitTypeDef USART InitStructure RCC APB2PeriphClockCmd RCC APB2Periph GPIOB EN
  • Tornado入门教程

    Overview FriendFeed是一款使用 Python 编写的 相对简单的 非阻塞式 Web 服务器 其应用程序使用的 Web 框架看起来有些像 web py 或者 Google 的 webapp 不过为了能有效利用非阻塞式服务器环
  • 【数据结构与算法】顺序表精讲

    所属专栏 数据结构与算法 前期内容 绪论1 抽象数据类型 绪论2 时间复杂度与空间复杂度 与时间复杂度相关的OJ面试题 抽象数据类型的实现 目录 1 1线性表的定义和特点 1 2案例引入 eg 图书信息管理系统 1 3线性表的类型定义 基本
  • code-server安装使用

    code server是一款基于VSCode的在线编辑器 它提供了一个web话的在线IDE 服务端上运行code server 可以理解为一个在远程服务器上运行的VS Code 客户端就可以使用浏览器打开vscode vscode上的资源都
  • 软件工程实训day01-mybatis

    本次实训环境 jdk 1 8 编辑器 eclipse 数据库 mysql SQLyog 实训所得结果 使用mybatis进行简单增删改查操作 代码上传gitee 创建数据库 DROP TABLE IF EXISTS computers CR