12 mybatis 动态sql2

文章目录

    • user.sql
    • pom.xml
    • mybatis-config.xml
    • logback.xml
    • UserMapper.xml
    • UserMapper.java
    • UserMapperTest.java

user.sql


create table user
(user_id       int auto_incrementprimary key,user_name     varchar(50)                          not null,password_hash varchar(255)                         not null,email         varchar(100)                         null,phone_number  varchar(20)                          null,first_name    varchar(50)                          null,last_name     varchar(50)                          null,birth_date    date                                 null,gender        char                                 null,address       varchar(255)                         null,city          varchar(50)                          null,state         varchar(50)                          null,country       varchar(50)                          null,postal_code   varchar(20)                          null,is_active     tinyint(1) default 1                 null,created_at    timestamp  default CURRENT_TIMESTAMP null,updated_at    timestamp  default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP,constraint emailunique (email),constraint user_nameunique (user_name)
);

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.aistat</groupId><artifactId>mybatis_tech</artifactId><version>1.0-SNAPSHOT</version><!--打包类型--><packaging>jar</packaging><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><!--        MySQL驱动--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.31</version></dependency><!--        mybatis依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.15</version></dependency><!--测试环境--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>
<!--Lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.14.8</version><scope>provided</scope></dependency><!--        logback日志 slf规范-->
<!--        配置文件也是在resouce目录下,且只能以logback.xml/logback-test.xml命名--><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.11</version></dependency></dependencies></project>

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><settings><setting name="mapUnderscoreToCamelCase" value="true"/></settings><typeAliases><package name="com.aistart.tech.pojo"/></typeAliases><!--    <typeAliases>-->
<!--        <typeAlias alias="Products" type="com.aistart.tech.pojo.Products"/>--><!--    </typeAliases>--><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatisdb"/><property name="username" value="root"/><property name="password" value="root"/><property name="poolMaximumActiveConnections" value="1"/></dataSource></environment><environment id="testdevelopment"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><mappers><mapper class="com.aistart.tech.mapper.ProductsMapper"/><mapper resource="com/aistart/tech/mapper/UserMapper.xml"></mapper></mappers>
</configuration>

logback.xml


<?xml version="1.0" encoding="UTF-8"?>
<configuration ><!--0. 日志格式和颜色渲染 --><!-- 彩色日志依赖的渲染类 --><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /><conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /><conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /><!-- 彩色日志格式 --><property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/><!--CONSOLE :表示当前的日志信息是可以输出到控制台的。--><appender name="Console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>[%level] %blue(%d{HH:mm:ss.SSS}) %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern></encoder></appender><!--触动到定义部分,就输出对应级别日志--><logger name="org.apache.ibatis" level="TRACE"/><logger name ="java.sql.Connection" level="DEBUG"/><logger name="java.sql.PreparedStatement" level="DEBUG"/><logger name="java.sql.Statement" level="DEBUG"/><logger name="com.aistart.tech.mapper" level="DEBUG"/><!--level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 默认debugINFO类似于sout<root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。--><root level="DEBUG"><appender-ref ref="Console"/></root>
</configuration>

UserMapper.xml


<?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.aistart.tech.mapper.UserMapper"><select id="findOne" resultType="User" parameterType="User">select * from user<trim prefix="where" prefixOverrides="and | or"><if test="userName != null">user_name = #{userName}</if><!--  if标签之间是相互独立的 --><if test="email != null">AND email = #{email}</if></trim><!--                      只会执行一个-->
<!--        <choose><when test="userName != null">AND user.user_name like #{userName}</when><when test="email != null ">AND email like #{email}</when><otherwise>AND 1 = 1</otherwise></choose>-->
<!-- 默认帮我们拼接了where,并智能识别where or and是否应该写出来<where>&lt;!&ndash;  test就是条件表达if的() &ndash;&gt;<if test="userName != null">user_name = #{userName}</if>&lt;!&ndash;  if标签之间是相互独立的 &ndash;&gt;<if test="email != null">AND email = #{email}</if></where>-->limit 1;</select><select id="findOneLikeName" resultType="User"><bind name="pattern" value="'%' + name + '%'" />SELECT * FROM userWHERE user.user_name LIKE #{pattern}</select><insert id="insertList" >insert into user (user_name,password_hash,email)value<foreach collection="userList" item="user" separator=",">(#{user.userName},#{user.passwordHash},#{user.email})</foreach></insert></mapper>

UserMapper.java


package com.aistart.tech.mapper;import com.aistart.tech.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;import java.util.List;public interface UserMapper {/**** 通过条件集合返回特定查询的结果user** @Param user就是所有条件的集合(id name .....)* @return 根据动态的组合条件产生的结果*///也就说${}是非预编译的statement(字符串拼接,更直接但不安全),而#{}是praperStatemen预编译语句(留占位符?)public User findOne(User user);//    @Select("select * from user where user_name like concat('%',#{name},'%') limit 1")public User findOneLikeName(String name);public int insertList(@Param("userList") List<User> userList);}

UserMapperTest.java


package com.aistart.tech.mapper;import com.aistart.tech.pojo.User;
import com.aistart.tech.utils.DButil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;import java.util.ArrayList;
import java.util.List;import static org.junit.Assert.*;public class UserMapperTest {SqlSession sqlSession = DButil.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);@Testpublic void findOneTest() {User user = new User();//里面有什么值就是传递什么参数(条件)
//        user.setUserName("小明");user.setEmail("qq.com");User one = mapper.findOne(user);System.out.println(one);sqlSession.close();;}@Testpublic void findOneLikeName() {User one = mapper.findOneLikeName("王");System.out.println(one);}@Testpublic void insertList() {ArrayList<User> users = new ArrayList<>();users.add(new User("lxy","123456","123456@qq.com"));users.add(new User("yc","hhxx,ttxs","hhxx@qq.com"));int rows = mapper.insertList(users);System.out.println(rows);sqlSession.commit();sqlSession.close();}
}

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

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

相关文章

大型集团公司企业文化知识竞活动赛策划方案

一场高端企业文化知识竞赛活动完整策划书&#xff0c;按诗词大会舞美标准进行设计&#xff0c;竞赛规则新颖&#xff0c;值得收藏。 天纵高端知识竞赛服务商&#xff0c;20多年现场经验和软硬件开发。 专业承办全国高端知识竞赛活动。线上线下各类竞赛活动均可执行&#xff0c;…

网络问题排查方案

PC上不了网初步排查方案步骤 首先查看配置是否正确&#xff0c;是否使用自动获取&#xff08;DHCP&#xff09;IP&#xff0c;掩码&#xff0c;网关&#xff0c;如果不是&#xff0c;手动配置确认网关&#xff0c;子网掩码&#xff0c;IP是否配置正确&#xff0c;IP是否已有PC使…

鸿蒙开发之了解ArkTS

鸿蒙开发者官网 &#xff1a; https://developer.huawei.com/consumer/cn/ 开发鸿蒙要用的软件是 DevEco Studio ArkTS建立在JS和TS的基础之上&#xff0c;扩展了声明式UI开发范式和状态管理&#xff0c;提供更简洁和自然的开发方式。 ArkTS引入了渲染引擎的增强&#xff0c…

Python 3 教程(8)

heisenbug601 601***902@qq.com 参考地址 311 tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字: 代码如下: >>> classmates = (Michael, Bob, Tracy) 现在,classmates这个tuple不能变了,它也没有append(),insert()这样的方法…

04. 【Android教程】Android 工程解析及使用

在上一章中已经搭建好了 Android 开发环境&#xff0c;本章我们将一起通过 Eclipse 创建我们的第一个 Android App。 1. 创建 Android 工程 首先打开 Eclipse&#xff0c;在菜单栏依次选择“New” -> “Android App Project”。如果是第一次创建&#xff0c;可能没有“Andr…

ChatGPT,来一份3·28雷布斯米时捷上市发布会即时发言稿

你新招了一个秘书。上班第一天&#xff0c;你对他说&#xff1a;“3月28号我可能会受邀参加雷老板的米时捷’上市发布会&#xff0c;届时我可能会有十分钟的发言机会&#xff0c;你现在准备一篇演讲稿。” 秘书问你有何指导意见&#xff1f; 你自己都不知说啥子&#xff0c;能…

gcc任意版本安装流程(linux)

一.更换镜像源 仅仅针对有需要换镜像需求的用户 sudo gedit /etc/apt/sources.list 用于在基于Debian的Linux发行版&#xff08;如Ubuntu&#xff09;上用来编辑软件源列表的命令。 我们更换阿里源&#xff1a; deb http://mirrors.aliyun.com/ubuntu/ focal main restricted…

fl studio21.2中文版下载及使用基础教学

FL Studio 21.2.2是一款功能强大的音乐制作软件&#xff0c;也被广大用户称为“水果编曲”。这款软件支持简体中文和英语&#xff0c;适用于Windows 10/11&#xff08;仅限64位&#xff09;以及MacOS 10.13.6或更高版本的系统。 在FL Studio 21.2.2中&#xff0c;用户可以享受…

AI论文速读 | 【综述】用于轨迹数据管理和挖掘的深度学习:综述与展望

论文标题&#xff1a;Deep Learning for Trajectory Data Management and Mining: A Survey and Beyond 作者&#xff1a;Wei Chen(陈伟), Yuxuan Liang(梁宇轩), Yuanshao Zhu, Yanchuan Chang, Kang Luo, Haomin Wen(温皓珉), Lei Li, Yanwei Yu(于彦伟), Qingsong Wen(文青…

【PADS 原理图Logic发送网表元器件丢失的解决办法】

1、PADS版本&#xff1a;VX1.2 2、PADS Logic原理图导入PCB Layout后&#xff0c;发现总有几个元器件怎么导都不会显示在PADS Layout上&#xff0c;如下图&#xff1a; PADS Logic上也选择了封装&#xff0c;还是不行&#xff0c;如下图&#xff1a; 3、解决办法&#xff1a; …

深入了解 Postman 请求头的使用方法

当你在使用 Postman 发送请求时&#xff0c;请求头&#xff08;Headers&#xff09;是你可以包含在 HTTP 请求中的重要部分之一。请求头包含了关于请求的元数据信息&#xff0c;这些信息对于服务器来处理请求是非常重要的。下面是一份详细的图文介绍&#xff0c;说明了如何在 P…

电源模块 YULIN俞霖科技DC/DC电源模块 直流升压 高压稳压

Features 最低工作电压&#xff1a;0.7V电压隔离&#xff1a;1000VDC /3000VDC 平均无故障时间&#xff1a; > 800,000 小时短路与电弧保护无最低负载要求&#xff1a;可空载工作输入电压&#xff1a;5、12、15、24VDCOutput 100,200、300、400、500 、600、800、 1000、1…

特征工程 | 特征选择、特征降维

目录 一. 特征选择1. 方差选择法2. 相关系数法3. 卡方检验 二. 特征降维1. LDA(线性判别分析法)2. PCA(主成分析法) 一. 特征选择 特征选择的目的是从原有特征中找出主要特征&#xff0c;原始特征可能包含冗余或无关变量&#xff08;或称特征、属性、指标等&#xff09; 手工 …

共享旅游卡是怎么一回事?600字讲解

在当今的旅游行业中&#xff0c;有一种创新的旅游服务方式正悄然兴起。它通过互联网等先进技术的运用&#xff0c;为游客提供了全方位的旅行支持&#xff0c;从出行到住宿&#xff0c;从餐饮到景点门票&#xff0c;一应俱全。这种服务模式为游客带来了前所未有的便捷与舒适&…

C# CSV 文件读取的三种方式分析

1 、文件流 字符串分割&#xff08;“&#xff0c;”&#xff09;&#xff0c;缺点&#xff1a;数据中如果有“&#xff0c;”&#xff0c;会出现分割错误。 public DataTable readCsvSql(string filepath) {FileStream fs new FileStream(filePath, FileMode.Open, FileAcc…

二刷代码随想录——单调栈day59

文章目录 前言单调栈知识点 单调栈的特点一、503. 下一个更大元素 II二、42. 接雨水总结 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划二刷完卡子哥的刷题计划&#xff0c;加油&#xff01; 二刷决定精刷了&#xff0c;于是参加了卡子哥的刷题班&#…

门店稽查的主要涵盖范围

先有需求再有目标&#xff0c;门店稽查也是如此&#xff0c;当品牌有线下终端的查价、上架率、竞品调研等的需求&#xff0c;则需要安排神秘访员进行上门稽查&#xff0c;整个过程可以分为明访和暗访&#xff0c;稽查方式的不同&#xff0c;对于稽查的结果会有差异&#xff0c;…

HangZhou Java Journey P1

Java程序运行时类加载机制 下面是对这个流程的详细说明&#xff1a; JVM启动&#xff1a;当Java程序开始执行时&#xff0c;JVM首先启动。JVM的启动涉及到操作系统级别的进程创建和资源分配。 Bootstrap ClassLoader&#xff1a;JVM启动后&#xff0c;首先会初始化Bootstrap …

[深度学习]yolov8+pyqt5搭建精美界面GUI设计源码实现五

【简单介绍】 依托先进的目标检测算法YOLOv8与灵活的PyQt5界面开发框架&#xff0c;我们倾力打造出了一款集直观、易用与功能强大于一体的目标检测GUI界面软件。通过深度融合YOLOv8在目标识别领域的出色性能与PyQt5的精美界面设计&#xff0c;我们成功推出了一款高效且稳定的软…

电脑开机0x0000007B蓝屏怎么办?

电脑开机0x0000007B蓝屏怎么办啊?相信很多用户的电脑都有遇到过蓝屏的问题,最近有用户电脑一开机就蓝屏,并且显示0x0000007B错误代码,原本想通过安全模式进行修复,结果发现安全模式进不去,不知道该怎么解决。这可能与我们的内存或硬盘有关,尝试设置一下硬盘模式,看看是…