Mybatis使用xml及纯注解实现增删改查操作

ops/2024/12/21 14:11:50/
xmlns="http://www.w3.org/2000/svg" style="display: none;">

文章目录

  • MyBatis 的基本使用
    • 1 案例讲解: 使用xml文件配置,实现对数据的增删改查,MyBatis----xml配置使用
      • (1)代码目录:
      • 导入项目依赖
      • (2)创建pojo类:
      • (3)编写mybatis 核心配置文件: mybatis-config.xml
      • (4)编写SQL映射文件:DeptMapper.xml
      • (4)编写工具类:MyUtils.java
      • (5)开始使用:App.java
    • 2 案例演示:MyBatis的纯注解开发,实现对数据的增删改查。
      • (1)将 DeptMapper.xml 文件全部进行注释即可
      • (2) 将工具类 MyUtils.java 保留以下部分,其他注释掉即可
      • (3)接口 DeptMapper 使用注解
      • (4)App.java 进行运行
    • 由以上2个案例,可以体会到纯注解开发的快捷之处,希望大家好好体会。

MyBatis 的基本使用

  什么是 MyBatis ?

  • MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发
  • MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github官网:https://mybatis.org/mybatis-3/zh/index.html

xmlMyBatisxml_8">1 案例讲解: 使用xml文件配置,实现对数据的增删改查,MyBatis----xml配置使用

(1)代码目录:

在这里插入图片描述
在这里插入图片描述

  id 列为自增长。

导入项目依赖

pom.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.xbf</groupId><artifactId>mybatis</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.34</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.9</version></dependency></dependencies></project>

(2)创建pojo类:

package com.xbf.pojo;public class Dept implements java.io.Serializable{private int id;private String name;private int age;private String sex;private String address;public String getName() {return name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Dept{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", sex='" + sex + '\'' +", address='" + address + '\'' +'}';}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}
}

mybatis__mybatisconfigxml_126">(3)编写mybatis 核心配置文件: mybatis-config.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"><configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><!-- 数据库连接相关配置 ,db.properties文件中的内容--><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/demo01?useSSL=true&amp;useUnicode=true&amp;
characterEncoding=GBK"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><package name="com.xbf.mapper"/></mappers></configuration>

xml_159">(4)编写SQL映射文件:DeptMapper.xml

<?xml version="1.0" encoding="UTF8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xbf.mapper.DeptMapper"><!-- 根据id查询图书信息 --><select id="selectAll" parameterType="Integer"resultType="com.xbf.pojo.Dept">SELECT * from table1</select>
<!--       新增--><insert id="insertDept" parameterType="com.xbf.pojo.Dept">insert into table1(`name`,`age`,`sex`,`address`) values(#{name},#{age},#{sex},#{address})</insert>
<!-- 删除--><delete id="deleteDept" parameterType="int">delete from table1 where id=#{id}</delete><!-- 修改--><update id="updateDept" parameterType="com.xbf.pojo.Dept">update table1 set name=#{name},age=#{age},sex=#{sex},address=#{address} where id=#{id}</update>
</mapper>

(4)编写工具类:MyUtils.java

package com.xbf.utils;import com.xbf.mapper.DeptMapper;
import com.xbf.pojo.Dept;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;public class MyUtils {public static SqlSession getSqlSession() {SqlSession sqlSession = null;try {InputStream is =Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory build =new SqlSessionFactoryBuilder().build(is);sqlSession = build.openSession();} catch (IOException e) {throw new RuntimeException(e);}return sqlSession;}//修改public static void updateDept(int id, String name, int age, String sex,String address, DeptMapper mapper, SqlSession sqlSession) {//SqlSession sqlSession = getSqlSession();Dept dept = new Dept();dept.setId(id);dept.setName(name);dept.setAge(age);dept.setSex(sex);dept.setAddress(address);mapper.updateDept(dept);if (sqlSession != null) {sqlSession.commit();// sqlSession.close();}System.out.println("修改成功");}//插入数据public static void insertDept(String name, int age, String sex,String address, DeptMapper mapper, SqlSession sqlSession) {//SqlSession sqlSession = getSqlSession();Dept dept = new Dept();dept.setName(name);dept.setAge(age);dept.setSex(sex);dept.setAddress(address);mapper.insertDept(dept);if (sqlSession != null) {sqlSession.commit();// sqlSession.close();}System.out.println("插入成功");}//删除数据public static void deleteDept(int id, DeptMapper mapper, SqlSession sqlSession) {//SqlSession sqlSession = getSqlSession();mapper.deleteDept(id);if (sqlSession != null) {sqlSession.commit();// sqlSession.close();}System.out.println("删除成功");}
}

(5)开始使用:App.java

package com.xbf;import com.xbf.mapper.DeptMapper;
import com.xbf.pojo.Dept;
import com.xbf.utils.MyUtils;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;public class App {public static void print(DeptMapper mapper) {List<Dept> depts = mapper.selectAll();for (Dept dept : depts) {System.out.println(dept);}}public static void main(String[] args) throws IOException {SqlSession sqlSession = MyUtils.getSqlSession();DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);//查询print(mapper);//增加MyUtils.insertDept("熊21", 23, "男", "北京", mapper,sqlSession);print(mapper);//修改MyUtils.updateDept(12, "熊5", 23, "男", "北京", mapper, sqlSession);print(mapper);//删除MyUtils.deleteDept(11, mapper, sqlSession);print(mapper);sqlSession.close();}
}

运行结果:注意,下图结果为博主多次测试的结果,和上面代码运行结果不一定完全符合。

在这里插入图片描述


2 案例演示:MyBatis的纯注解开发,实现对数据的增删改查。

  在上一个案例的基础上进行修改:

xml__333">(1)将 DeptMapper.xml 文件全部进行注释即可

(2) 将工具类 MyUtils.java 保留以下部分,其他注释掉即可

package com.xbf.utils;import com.xbf.mapper.DeptMapper;
import com.xbf.pojo.Dept;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;public class MyUtils {public static SqlSession getSqlSession() {SqlSession sqlSession = null;try {InputStream is =Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory build =new SqlSessionFactoryBuilder().build(is);sqlSession = build.openSession();} catch (IOException e) {throw new RuntimeException(e);}return sqlSession;}
}

(3)接口 DeptMapper 使用注解

package com.xbf.mapper;import com.xbf.pojo.Dept;
import org.apache.ibatis.annotations.*;import java.util.List;public interface DeptMapper {@Select("select * from table1")//查询所有List<Dept> selectAll();//添加@Insert("insert into table1(`name`,`age`,`sex`,`address`) values(#{name},#{age},#{sex},#{address})")int insertDept(@Param(value = "name") String name,@Param(value = "age") int age,@Param(value = "sex") String sex,@Param(value = "address") String address);//@Param(value="name")String name,@Param(value="hobby")String hobby//根据id 删除记录@Delete("delete from table1 where id=#{id}")int deleteDept(Integer id);//根据id修改信息@Update("update table1 set name=#{name},age=#{age},sex=#{sex},address=#{address} where id=#{id}")int updateDept(@Param(value = "id") Integer id,@Param(value = "name") String name,@Param(value = "age") int age,@Param(value = "sex") String sex,@Param(value = "address") String address);}

(4)App.java 进行运行

package com.xbf;import com.xbf.mapper.DeptMapper;
import com.xbf.pojo.Dept;
import com.xbf.utils.MyUtils;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;public class App {public static void print(DeptMapper mapper) {List<Dept> depts = mapper.selectAll();for (Dept dept : depts) {System.out.println(dept);}}public static void main(String[] args) throws IOException {SqlSession sqlSession = MyUtils.getSqlSession();DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);//查询print(mapper);System.out.println("查询成功");//增加mapper.insertDept("熊21", 23, "男", "北京");print(mapper);sqlSession.commit();System.out.println("增加成功");//删除mapper.deleteDept(12);print(mapper);sqlSession.commit();System.out.println("删除成功");//修改mapper.updateDept(2, "熊10", 23, "男", "萍乡");print(mapper);sqlSession.commit();System.out.println("修改成功");sqlSession.close();}
}

  可以看到运行结果为:
在这里插入图片描述




由以上2个案例,可以体会到纯注解开发的快捷之处,希望大家好好体会。


http://www.ppmy.cn/ops/143773.html

相关文章

【自动化部署】Ansible循环

文章目录 Ansible循环1. with_items2. with_list3. with_flattened4. with_together5. with_cartesian 和 with_nested Ansible 配置模板与效率优化一、配置模板1. 准备配置模板文件2. 修改 inventory 主机清单配置文件3. 编写 playbook 二、Ansible 执行效率优化1. 加大 forks…

推送本地仓库到远程git仓库

目录 推送本地仓库到远程git仓库1.1修改本地仓库用户名1.2 push 命令1.3远程分支查看 推送本地仓库到远程git仓库 删除之前的仓库中的所有内容&#xff0c;从新建库&#xff0c;同时创建一个 A.txt 文件 清空原有的远程仓库内容&#xff0c;重新创建一个新的仓库&#xff0c;…

InnoDB和MyISAM引擎优缺点和区别

nnoDB和MyISAM是MySQL数据库中常用的两种存储引擎。它们各自具有不同的特性和优势&#xff0c;适用于不同的应用场景。 一、InnoDB引擎&#xff1a; 1、它有如下特性&#xff1a; 1)、支持事务&#xff08;ACID&#xff09; 2)、支持外键约束&#xff08;FOREIGN KEY const…

基于开源 AI 智能名片 S2B2C 商城小程序的智慧零售仓储管理创新策略研究

摘要&#xff1a;本文深入探讨在智慧零售蓬勃发展的背景下&#xff0c;仓储管理面临的新挑战。随着消费者对线上购物时效要求的不断攀升&#xff0c;前置仓、门店仓等新型仓储模式应运而生&#xff0c;在带来配送时间缩短优势的同时&#xff0c;也引发了运营成本增加、运营难度…

Ansible 批量管理华为 CE 交换机

注&#xff1a;本文为 “Ansible 管理华为 CE 交换机” 相关文章合辑。 使用 CloudEngine - Ansible 批量管理华为 CE 交换机 wsf535 IP 属地&#xff1a;贵州 2018.02.05 15:26:05 总体介绍 Ansible 是一个开源的自动化运维工具&#xff0c;AnsibleWorks 成立于 2012 年&a…

dolphinscheduler服务注册中心源码解析(二)基于zookeeper实现注册中心源码解析

1.概述 DolphinScheduler的架构遵循分布式设计,其核心包括多个组件,每个组件负责特定的功能,这样可以避免单点故障并提供可扩展性。 Master节点:负责管理调度任务的调度流程、协调任务的执行和状态监控。Master节点还负责任务的调度调度策略的选择(例如负载均衡)以及资源…

【LuaFramework】LuaFramework_UGUI_V2框架学习

GitHub - jarjin/LuaFramework_UGUI_V2: 基于tolua的热更新框架V2 旧版本是Unity 5.0&#xff0c;这个是新版本支持更高版本的 导入工程后先清除wrap 然后重新生成wrap&#xff0c;你会发现有个报空null&#xff0c;框架的问题总结下所有的框架wrap相关报错问题和修复方法&…

c# 后台任务自动执行

如果有些任务需要在后台自动执行&#xff0c;且时不时需要添加一个任务&#xff0c;且按照优先级顺序执行&#xff0c;那么可以参考本文的方法。 后台任务类 定义一个后台任务类BackgroundTaskThread&#xff0c;其中Start方法是用来启动任务的&#xff0c;循环查询是否有添加…