MyBatis技术练习

news2024/11/26 21:47:11

一、模仿教程练习增删改查,自己完成一个新表相关操作

1、配置fkxml文件

我们这里的增删改查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="Num">
        <select id="query" parameterType="String" resultType="fk">
            select * from data where zhanghao=#{zhanghao}
        </select>
        
        <insert id="add" parameterType="fk">
        	insert into data(name ,zhanghao ,password ,age) values(#{name} ,#{zhanghao} ,#{password} ,#{age})
        </insert>
        
        <update id="uppdate" parameterType="fk">
        	update data set name=#{name},age=#{age} where zhanghao=#{zhanghao}
        </update>
        
        <delete id="delete" parameterType="fk">
        	delete from data where zhanghao=#{zhanghao}
        </delete>
        
        <select id="list" resultType="fk">
        	select * from data
        </select>
    </mapper>

2、Java类

package Num;

public class fk {
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getZhanghao() {
        return zhanghao;
    }

    public void setZhanghao(String zhanghao) {
        this.zhanghao = zhanghao;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    
    private String name;
    private String zhanghao;
    private String password;
    private int age;
    
    public fk(){
    	
    }
    public fk(String name ,String zhanghao ,String password ,int age){
    	this.age = age;
    	this.name = name;
    	this.password = password;
    	this.zhanghao = zhanghao;
    }
}

3、编写测试类,我们可以用一个循环输入来一次测试增删改查所有功能

package controller;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Scanner;

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 Num.fk;
 
public class TestMybatis {
 
    public static void main(String[] args) throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session=sqlSessionFactory.openSession();

    	System.out.println("输入数字对应相关功能:");
    	System.out.println("1、增加");
    	System.out.println("2、删除");
    	System.out.println("3、修改");
    	System.out.println("4、查询");
    	System.out.println("5、结束程序");
    	Scanner sc = new Scanner(System.in);
    	while(true){
	    	int value = sc.nextInt();
	    	if (value == 1){
	    		System.out.println("请输入姓名、账号、密码、年龄");
	    		String name = sc.next();
	    		String zhanghao = sc.next();
	    		String password = sc.next();
	    		int age = sc.nextInt();
	    		
	    		fk f = new fk(name ,zhanghao ,password ,age);
	    		session.insert("add" ,f);
	    		session.commit();
	    	}else if (value == 2){
	    		System.out.println("请输入您想删除的账号");
	    		String zh = sc.next();
	    		fk f = new fk();
	    		f.setZhanghao(zh);
	    		
	    		session.delete("delete" ,f);
	    		session.commit();
	    	}else if (value == 3){
	    		System.out.println("请输入修改后的姓名、账号、密码、年龄");
	    		String name = sc.next();
	    		String zhanghao = sc.next();
	    		String password = sc.next();
	    		int age = sc.nextInt();
	    		
	    		fk f = new fk(name ,zhanghao ,password ,age);
	    		session.insert("update" ,f);
	    		session.commit();
	    	}else if (value == 4){
	    		List<fk> array = session.selectList("list");
	    		for (fk f : array){
	    			System.out.println("姓名:" + f.getName() + "  " + "年龄:" + f.getAge());
	    		}
	    		session.commit();
	    	}else{
	    		session.close();
	    		break;
	    	}
    	}
    }
}

 运行没问题:

 二、一对多,多对一,多对多的练习

这一部分比较难,学习时我建议跟着教程一句代码一句代码地敲,边写边理解,而不是想一蹴而就直接看懂。

一对多:

这个部分最关键的应该就是xml文件配置resultMap。每一列column指明列名,property指明对应属性;<id>部分是主键,用来确定某一元组,<result>部分则是前面id确定的元组具体属性。还需要注意的就是如果在sql语句中修改了列名,映射中记得也要与其对应。

多对一: 

 一对多和多对一最大的区别就是association和collection标签

association 用于处理一对一或多对一关系。它将查询结果中的一行记录映射为一个 Java 对象,并将这个 Java 对象设置到它所属的另一个 Java 对象中。

collection 用于处理一对多或多对多关系。它将查询结果中的多行记录映射为一个 Java 集合,并将这个集合设置到它所属的 Java 对象中。

多对多 :

 多对多的关键就是Order.xml文件的映射配置。我的理解就是首先拿着订单的id在订单和产品关系表中找到属于这个订单id的集合(一个订单id对应了多个产品,一对多),然后再给每个订单映射了产品的从属(多个订单可能都有同一个产品,多对一),从而达到多对多的效果。

三、动态sql

1、if 就是给sql语句加了个if判断功能

 2、where有种if进阶版的感觉,可以判断多个条件并且不受空参影响,包括update对应的set都是一个道理,就不做额外练习

3、choose对标if else逻辑判断。有些同学会认为这是switch-case当然也没问题,如果按照if else理解了话其实这是一个多重if-else嵌套关系

4、 foreach标签就是可以让你配合in一次查找多个结果。其中“open="(" separator="," close=")"”这一句是在规范配合sql语句in的格式,不能省略

5、 bind标签我尝试了一下这样操作

 可以运行,但是要注意属性不能往里面放,比如这样:

就不可以。

 四、分页

教程的分页只是给你简单展示了一下功能,并没有真正的达到分页的效果,我们简单写一个代码来实现这个效果

package controller;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

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 Num.Category;
import Num.Order;
import Num.OrderItem;
import Num.Product;
 
public class TestMybatis {
 
	 public static void main(String[] args) throws IOException {
	        String resource = "mybatis-config.xml";
	        InputStream inputStream = Resources.getResourceAsStream(resource);
	        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	        SqlSession session = sqlSessionFactory.openSession();
	        
	        int start = 0 ,count = 5 ,page = 1;
	        while (true){
	        	System.out.println("这是第" + page + "页");
		        Map<String,Object> params = new HashMap<>();
		        params.put("start", start);
		        params.put("count", count);
		        
		        start += 5;
		        page ++;
		        
		        List<Category>  cs =session.selectList("listCategory", params);
		        for (Category c : cs) {
		            System.out.println(c);
		        }
		        if (page == 21) break;
		        session.commit();
	        }
	        session.close();
	  
	    }
}

效果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/551555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实测有效:由于找不到MSVCP140.dll,无法继续执行代码

从解决实际问题的角度上&#xff0c;推荐两种实测有效的方法。 先来说一下msvcp140.dll是什么&#xff1f; msvcp140.dll 是 Microsoft Visual C Redistributable for Visual Studio 2015 库文件的一部分。这个文件是一些需要 Visual Studio 2015 支持的程序所必需的。 如果…

(C语言版)力扣(LeetCode)题库1-5题解析

力扣&#xff08;LeetCode&#xff09;题库1-5题解析 1.两数之和题目解析 2.两数相加题目解法 3.无重复字符的最长字串题目解法 4. 寻找两个正序数组的中位数题目解法 5. 最长回文子串题目解法 结语 1.两数之和 题目 给定一个整数数组 nums 和一个整数目标值 target&#xff…

Java基础--->并发部分(3)【JUC、AQS】

文章目录 AQS&#xff08;AbstractQueuedSynchronizer&#xff09;AQS实现原理AQS操作重点方法 Java并发容器JUC&#xff08;java.util.concurrent&#xff09;ConcurrentHashMapCopyOnWriteArrayList AQS&#xff08;AbstractQueuedSynchronizer&#xff09; AbstractQueuedSy…

如何从其他ETL工具迁移到ETLCloud上?

ETL数据集成工具主要用于将来自不同数据源的数据整合到一个单一的、一致的数据存储库或将数据分发到不同的数据源中&#xff0c;同时也可以把数仓中的数据通过ETL反向输出给业务系统使用。它可以帮助企业解决数据共享问题&#xff0c;同时有效地管理和利用海量数据&#xff0c;…

DAY 61 MySQL高级SQL语句

高级SQL语句&#xff08;进阶查询&#xff09; 先准备2个表 一个location表 use market;create table location(Region char(20),Store_Name char(20));insert into location values(East,Boston);insert into location values(East,New York);insert into location values(W…

python数据可视化显示(附代码)

Python是一种非常流行的编程语言&#xff0c;具有广泛的应用领域&#xff0c;包括数据可视化。在数据可视化中&#xff0c;Python提供了多种工具来帮助用户创建各种类型的图表、图形和可视化效果。本文将介绍Python数据可视化的基本概念、工具和技术&#xff0c;并提供代码示例…

CustomTkinter:【二】颜色和主题、外观模式、缩放、包装

GitHub地址: https://github.com/TomSchimansky/CustomTkinter 官网&#xff1a; https://customtkinter.tomschimansky.com/ 官方教程文档&#xff1a;https://customtkinter.tomschimansky.com/documentation/ 目录 1、颜色和主题2 、外观模式3 、缩放4、包装 1、颜色和主题 …

2023/5/21周报

目录 摘要 论文阅读 1、标题和现存问题 2、各个结构 3、基于GNN-LSTM-CNN 网络轨迹预测模型 4、实验准备 5、实验结果 深度学习 1、费舍尔判别 2、步骤具体化 3、GCN 总结 摘要 本周在论文阅读上&#xff0c;阅读了一篇基于GNN-LSTM-CNN网络的6G车辆轨迹预测算法的…

git pull报没有足够内存 not enough memory for initialization

git clone 或 git pull 批量同步远程 git仓库代码时&#xff0c;报 没有足够内存用于初始化 not enough memory for initialization。经过观察 资源管理器 的内存使用情况&#xff0c;发现为 剩余可用内存不足造成的。加物理内存麻烦&#xff0c;可通过适当调整 分页文件&…

chatgpt赋能Python-pythoncom安装

Pythoncom安装指南 如果你是一位Python编程的爱好者或专业工程师&#xff0c;那么你可能会需要使用Pythoncom库。Pythoncom是Python与COM技术相互操作的重要组件&#xff0c;它可以帮助你实现各种Windows应用程序与Python之间的无缝集成。 什么是Pythoncom Pythoncom是Pytho…

电商项目9:新增商品

电商项目9&#xff1a;新增商品 1、前端1.1、修复前端组件通信问题1.2、引入其他前端代码1.3、会员等级列表1.4、当前分类关联的所有品牌 2、后端2.1、会员系统搭建&#xff08;注册与发现&#xff09;2.2、当前分类关联的所有品牌2.3、获取分类下所有分组&关联属性 1、前端…

网上书店管理系统

系列文章 任务46 网上书店管理系统 文章目录 系列文章一、实践目的与要求1、目的2、要求 二、课题任务三、总体设计1.存储结构及数据类型定义2.程序结构3.所实现的功能函数4、程序流程图 四、小组成员及分工五、 测试添加新的图书购买信息显示所有图书购买信息按购买编号查找图…

软件测试—Selenium01

软件测试—Selenium01 &#x1f50e;自动化测试自动化测试的定义自动化测试的分类 &#x1f50e;SeleniumSelenium 是什么Selenium 的特点Selenium 的原理Selenium Java 的环境搭建Selenium 中常用的 APIBy.cssSelector()By.xpath()By.cssSelector() 与 By.xpath() 的比较 &am…

C++编译和链接

目录 一、源代码的组织 ①头文件&#xff08;*.h&#xff09; ②源文件&#xff08;*.cpp&#xff09; ③主程序&#xff08;main函数所在的程序&#xff09; ④从源代码到可执行文件&#xff0c;编译的过程有三大步骤&#xff1a; 1&#xff09;编译预处理 2&#xff09…

Python学习笔记——《吴恩达Machine Learning》线性回归例程

文章目录 案例背景线性回归&#xff08;Loss Regression&#xff09;梯度下降法&#xff08;批量梯度下降算法——batch gradient descent&#xff09;计算成本函数和梯度下降使用线性回归拟合训练数据模型预测 梯度下降效果可视化完整版demo 案例背景 详情参照吴恩达机器学习…

Linux/Windows安装Maven

一、Linux部署Maven 注意&#xff1a;必须先安装jdk&#xff0c;maven与jdk&#xff08;java -version&#xff09;版本会有对应关系 版本对应&#xff08;必看&#xff01;&#xff09;&#xff1a;http://maven.apache.org/docs/history.html 官方tar包下载地址&#xff1a;h…

因为一个Bug,差点损失了100w

大家好&#xff0c;我是洋子 最近在做单接口的性能测试比较多&#xff0c;在压测过程发现了一个比较有意思的问题&#xff0c;拿出来和大家分享一下 背景是这样的&#xff0c;最近在搞线上的抽奖活动&#xff0c;压测的对象是一个抽奖接口&#xff0c;主要的逻辑见程序的流程…

Spring ioc容器

Spring ioc容器 导入 spring 容器包 使用 ioc 容器之前&#xff0c;需要先导入 Spring 的包 在 spring maven中下载 spring maven 网址:Maven Repository: spring (mvnrepository.com) 搜索 spring 找到 Spring Web MVC点击 spring-webmvc 进入 选择一个版本号点击&#x…

Ocean Optics USB2000光谱仪无法在Win10系统运行

1、问题描述 USB2000型光谱仪&#xff0c;由于生产年代过于久远&#xff0c;虽然能被Win10系统识别&#xff0c;但是驱动程序安装完成后依然报错&#xff0c; 提示&#xff1a;该设备无法启动。&#xff08;代码 10&#xff09; 请求USB BOS 描述符失败。 运行SpectraSuite软件…

ETLCloud社区版与Kettle对比分析

ETLCloud社区版本与Kettle社区版本都有什么优势和劣势? Pentaho Data Integration&#xff08;PDI&#xff09;&#xff0c;也称为Kettle&#xff0c;是一款开源的数据集成工具,国内有很多企业都选择kettle作为数据清洗工具。以下是kettle的主要特点和优势&#xff1a; 广泛的…