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
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84453.shtml
英文地址,請注明出處:http://en.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;這導致了較差的泛化能力和較高的模型復…