Mybatis框架的构建(IDEA)

选择maven项目

修改设置

在设置中添加自定义代码模板

开始写代码

动态SQL语句的示例:

pom文件:

<?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.qcby</groupId><artifactId>MyBatisDemoTest</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--mybatis核心包--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!--mysql驱动包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version></dependency><!-- 单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version></dependency><!-- 日志 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies></project>

实体层:

package com.qcby.entity;import java.util.Date;/**对应数据库当中的user表*/
public class User {private Integer id;private String username;private Date birthday;private String sex;private String address;private String password;private Integer pagesize;private Integer pageStart;public User() {}public User(String username, Date birthday, String sex, String address) {this.username = username;this.birthday = birthday;this.sex = sex;this.address = address;}public Integer getPagesize() {return pagesize;}public void setPagesize(Integer pagesize) {this.pagesize = pagesize;}public Integer getPageStart() {return pageStart;}public void setPageStart(Integer pageStart) {this.pageStart = pageStart;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}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;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", birthday=" + birthday +", sex='" + sex + '\'' +", address='" + address + '\'' +", password='" + password + '\'' +'}';}
}

dao层:

package com.qcby.dao;import com.qcby.entity.User;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface UserDao {List<User> findUser(User user);int update(User user);List<User> selectUserByChoose(User user);List<User> selectUserByUsernameAndSex(User user);int trimUpdate(User user);int deleteMoreByArray(@Param("ids") Integer[] ids);int insertMoreByList(@Param("users") List<User> users);
}

SqlMapConfig:

<?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><settings><!--设置Mybatis输出日志--><!--logImpl: 表示对日志的控制--><!--STDOUT_LOGGING: 将日志输出到控制台上--><setting name="logImpl" value="STDOUT_LOGGING"/></settings><environments default="mysql"><environment id="mysql"><!--配置事务的类型,使用本地事务策略--><transactionManager type="JDBC"></transactionManager><!--是否使用连接池 POOLED表示使用链接池,UNPOOLED表示不使用连接池--><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="mapper/UserMapper.xml"></mapper><mapper resource="mapper/StudentMapper.xml"></mapper><mapper resource="mapper/PersonMapper.xml"></mapper><mapper resource="mapper/TeacherMapper.xml"></mapper></mappers>
</configuration>

Test文件:

import com.qcby.dao.UserDao;
import com.qcby.entity.User;
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.After;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.Arrays;
import java.util.List;public class UserTest {private InputStream in = null;private SqlSession session = null;private UserDao mapper = null;@Before  //前置通知, 在方法执行之前执行public void init() throws IOException {//加载主配置文件,目的是为了构建SqlSessionFactory对象in = Resources.getResourceAsStream("SqlMapConfig.xml");//创建SqlSessionFactory对象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);//通过SqlSessionFactory工厂对象创建SqlSesssion对象session = factory.openSession();//通过Session创建UserDao接口代理对象mapper = session.getMapper(UserDao.class);}@After  //@After: 后置通知, 在方法执行之后执行 。public void destory() throws IOException {//释放资源session.close();in.close();}@Testpublic void findUser(){User user = new User();//user.setUsername("熊大");user.setAddress("上海");user.setPassword("123");List<User> users = mapper.findUser(user);for (User user1: users) {System.out.println(user1.toString());}}@Testpublic void insert(){User user = new User();user.setUsername("sssssss");user.setId(1);mapper.update(user);session.commit();}@Testpublic void trimUpdate(){User user = new User();user.setUsername("sssssss");user.setId(1);mapper.trimUpdate(user);session.commit();}@Testpublic void selectUserByChoose(){User user1 = new User();user1.setId(1);//user1.setUsername("admin");List<User> users = mapper.selectUserByChoose(user1);for (User user: users) {System.out.println(user.toString());}}@Testpublic void selectUserByUsernameAndSex(){User user = new User();user.setUsername("熊大");// user.setAddress("上海");user.setPassword("123");List<User> users = mapper.selectUserByUsernameAndSex(user);for (User user1: users) {System.out.println(user1.toString());}}@Testpublic void deleteMoreByArray(){Integer[] integer = new Integer[]{8,9,10,11};mapper.deleteMoreByArray(integer);session.commit();}@Testpublic void insertMoreByList(){User user1 = new User("小赵",new Date(),"男","保定");User user2 = new User("小张",new Date(),"男","保定");User user3 = new User("小李",new Date(),"男","保定");List<User> users = Arrays.asList(user1,user2,user3);mapper.insertMoreByList(users);session.commit();}
}

Mapper文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qcby.dao.UserDao"><!--where if--><select id="findUser" resultType="com.qcby.entity.User" parameterType="com.qcby.entity.User">select * from user<where><if test="username != null and username != ''">username = #{username}</if><if test="birthday != null">and  birthday = #{birthday}</if><if test="address != null and address != ''">and address = #{address}</if><if test="password != null and password != ''">and password = #{password}</if></where></select><update id="update" parameterType="com.qcby.entity.User" >update user<set><if test="username != null and username != ''">username = #{username},</if><if test="birthday != null">birthday = #{birthday},</if><if test="address != null and address != ''">address = #{address},</if><if test="password != null and password != ''">password = #{password},</if></set>where id = #{id}</update><select id="selectUserByChoose" resultType="com.qcby.entity.User"parameterType="com.qcby.entity.User">select * from user<where><choose><when test="username != null and username != ''">username = #{username}</when><when test="birthday != null">and birthday=#{birthday}</when><otherwise>and id=#{id}</otherwise></choose></where></select><select id="selectUserByUsernameAndSex" parameterType="com.qcby.entity.User"resultType="com.qcby.entity.User">select * from user<trim prefix="where" prefixOverrides="and | or"><if test="username != null and username != ''">username = #{username}</if><if test="birthday != null">and  birthday = #{birthday}</if><if test="address != null and address != ''">and address = #{address}</if><if test="password != null and password != ''">and password = #{password}</if></trim></select><update id="trimUpdate" parameterType="com.qcby.entity.User">update user<trim prefix="set" suffixOverrides=","><if test="username != null and username != ''">username = #{username},</if><if test="birthday != null">birthday = #{birthday},</if><if test="address != null and address != ''">address = #{address},</if><if test="password != null and password != ''">password = #{password},</if></trim>where id = #{id}</update><!--delete from user where id in (1,2,3,4,5); --><delete id="deleteMoreByArray">delete from user where id in<foreach collection="ids" item="id" separator="," open="(" close=")">#{id}</foreach></delete><!-- collection:当前要循环的数组或者集合   --><!--  item: 我们指定要循环的数组的每一个元素  --><!-- separator:每一个元素应该用什么来做分割   --><!-- open:当前循环是以什么开始   --><!-- close:当前循环是以什么结束   --><!--insert into 表名 (字段) values (值),(值)--><insert id="insertMoreByList" >insert into user(username,birthday,sex,address) values<foreach collection="users" item="user" separator=",">(#{user.username},#{user.birthday},#{user.sex},#{user.address})</foreach></insert>
</mapper>

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

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

相关文章

经济法-6-公司法律制度知识点

一、出资期限 1.有限责任公司&#xff1a;全体股东需在公司成立之日起5年内缴足认缴的注册资本 2.股份有限公司&#xff1a;以发起方式设立的&#xff0c;发起人需在公司登记前实缴全部股款 3.认缴期加速到期 公司不能清偿到期债务的&#xff0c;公司或者已到期债权的债权人…

jquery.table2excel方法导出

jquery提供了一个table2excel方法可以用来导出页面到xls等 $("#grid_595607").table2excel({exclude: ".noExport", // 排除类名为 noExport 的元素filename: "导出数据.xls",exclude_img: true, // 不导出图片exclude_links: true, // 不导…

echarts设置标线和最大值最小值

echarts设置标线和最大值最小值 基本ECharts图表初始化配置 设置动态的y轴范围&#xff08;min/max值&#xff09; 通过markPoint标记最大值和最小值点 使用markLine添加水平参考线 配置双y轴图表 自定义标记点和线的样式&#xff08;颜色、符号等&#xff09; 响应式调整图表大…

Java文件操作:从“Hello World”到“Hello File”

&#x1f50d; 开发者资源导航 &#x1f50d;&#x1f3f7;️ 博客主页&#xff1a; 个人主页&#x1f4da; 专栏订阅&#xff1a; JavaEE全栈专栏 文件 什么是文件&#xff1f; 广义&#xff1a;操作系统进行资源管理的一种机制&#xff0c;很多的软件/硬件资源&#xff0c;…

2025第三届黄河流域网络安全技能挑战赛--Crypto--WriteUp

2025第三届黄河流域网络安全技能挑战赛–Crypto–WriteUp Crypto sandwitch task from Crypto.Util.number import * import gmpy2 flag bflag{fake_flag} assert len(flag) 39 p getPrime(512) q getPrime(512) n p * q e 0x3 pad1 beasy_problem pad2 bHow_to_so…

三重天理论

第一重天&#xff1a;公理层&#xff08;形而上地基&#xff09; 这里构建的是人类理性的"操作系统"&#xff0c;公理作为不证自明的逻辑起点&#xff08;如矛盾律/同一律&#xff09;&#xff0c;恰似海德格尔所说的"存在之镜"。黑格尔辩证法在此显现为动…

2025年第八届广西大学生程序设计大赛(正式赛)题解(更新中)

知乎评价&#xff1a;如何评价2025年第八届GXCPC广西大学生程序设计大赛暨中国-东盟国际大学生程序设计大赛&#xff1f; 榜单&#xff1a;牛客比赛排名 题目链接&#xff1a;第八届广西大学生程序设计大赛暨2025邀请赛 TIP&#xff1a;提交处可查看别人过题代码 难度签到题普通…

WHAT - 兆比特每秒 vs 兆字节每秒

文章目录 Mbps 解释Mbps 和 MB/s&#xff08;兆字节每秒&#xff09;换算总结网络场景1. 在路由器设置中的 Mbps2. 在游戏下载时的 Mbps / MB/s总结 Mbps 解释 首先&#xff0c;Mbps 是一个常见的网络带宽单位&#xff0c;意思是&#xff1a; Megabits per second&#xff08;…

[C语言实战]C语言内存管理实战:实现自定义malloc与free(四)

[C语言实战]C语言内存管理实战&#xff1a;实现自定义malloc与free&#xff08;四&#xff09; 摘要&#xff1a;通过实现简化版的内存管理器&#xff0c;深入理解动态内存分配的核心原理。本文包含内存块设计、分配算法、空闲合并策略的完整实现&#xff0c;并附可运行的代码…

YOLOv8源码修改(5)- YOLO知识蒸馏(下)设置蒸馏超参数:以yolov8-pose为例

目录 前言 1. 不同蒸馏算法资源占用 2. 不动态调整蒸馏损失 2.1 训练定量化结果 2.1 训练结果可视化结果 3. 动态调整蒸馏损失权重及实验分析 3.1 余弦衰减和指数衰减 3.2 CWD蒸馏损失 3.3 MGD蒸馏损失 3.4 AT蒸馏损失 3.5 SKD和PKD蒸馏损失 4. 调权重心得总结 5…

历年华东师范大学保研上机真题

2025华东师范大学保研上机真题 2024华东师范大学保研上机真题 2023华东师范大学保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/school?classification1 简单一位数代数式计算 题目描述 给一个小学生都会算的1位数与1位数运算的代数式&#xff0c;请你求出这个表…

Oracle 中 SHRINK 与 MOVE 操作的比较

Oracle 中 SHRINK 与 MOVE 操作的比较 在 Oracle 数据库中&#xff0c;SHRINK 和 MOVE 都是用于重组表和索引以减少空间碎片的重要操作&#xff0c;但它们在实现方式和适用场景上有显著区别。 SHRINK 操作 基本语法 ALTER TABLE table_name SHRINK SPACE [COMPACT] [CASCAD…

展锐 Android 15 锁定某个App版本的实现

Android 15 系统锁定Antutu版本的实现方法 在Android系统开发中,有时需要锁定特定应用的版本以确保系统稳定性或测试一致性。本文将介绍如何通过修改Android源码来锁定Antutu跑分软件的版本。 修改概述 这次修改主要涉及以下几个方面: 禁用产品复制文件的检查添加指定版本…

视频剪辑SDK定制开发技术方案与报价书优雅草卓伊凡

视频剪辑SDK定制开发技术方案与报价书-优雅草卓伊凡 一、项目概述 客户需求&#xff1a;开发一套跨平台&#xff08;Android/iOS/Uni-App&#xff09;视频剪辑SDK&#xff0c;包含AI字幕提取、转场特效、文字叠加、背景音乐、滤镜、背景替换、动态贴纸等功能。 报价范围&#…

BGP为什么要配置对等IP?

本文由deepseek生成&#xff0c;特此声明 一、为什么要配置对等体IP&#xff1f; 1. 明确标识邻居身份 路由协议需求&#xff1a;动态路由协议&#xff08;如BGP、OSPF、RIP&#xff09;需要路由器之间建立邻居关系以交换路由信息。配置对等体IP是为了唯一标识邻居路由器&…

Qt中配置文件读写

1. 保存分组数据到配置文件 #include <QSettings>void saveNetworkConfig() {QSettings settings("network.ini", QSettings::IniFormat);// 网络配置分组settings.beginGroup("Network");// 源地址配置settings.beginGroup("Source");se…

Linux 的编辑器--vim

1.Linux编辑器-vim使⽤ vi/vim的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是vim是vi的升级版本&#xff0c;它不仅兼容vi的所有指令&#xff0c;⽽且还有⼀些新的特性在⾥⾯。例如语法加亮&#xff0c;可视化操作不仅可以在终端运⾏&#xff0c;也可以…

SAP Commerce(Hybris)开发实战(二):登陆生成token问题

问题简述 最近处理Hybris框架标准的登陆功能&#xff0c;遇到一个问题&#xff1a;用两个不同的浏览器&#xff0c;同时登陆一个账号&#xff0c;会同时生成两个不同的token和refreshToken。 问题原因 解决了其实非常简单&#xff0c;就是Hybris的Employee表中&#xff0c;有一…

c/c++的opencv椒盐噪声

在 C/C 中实现椒盐噪声 椒盐噪声&#xff08;Salt-and-Pepper Noise&#xff09;&#xff0c;也称为脉冲噪声&#xff08;Impulse Noise&#xff09;&#xff0c;是数字图像中常见的一种噪声类型。它的特点是在图像中随机出现纯白色&#xff08;盐&#xff09;或纯黑色&#x…

LIEDNet: A Lightweight Network for Low-light Enhancement and Deblurring论文阅读

摘要 夜间拍摄的图像常常面临诸如低光和模糊等挑战&#xff0c;这些问题主要是由于昏暗环境和长时间曝光的频繁使用所导致。现有方法要么独立处理这两种退化问题&#xff0c;要么依赖于通过复杂机制生成的精心设计的先验知识&#xff0c;这导致了较差的泛化能力和较高的模型复…