12 mybatis 动态sql2

2024-03-27 13:28
文章标签 动态 mybatis sql2

本文主要是介绍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();}
}

这篇关于12 mybatis 动态sql2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/852250

相关文章

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul

Mybatis的分页实现方式

《Mybatis的分页实现方式》MyBatis的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异,对Mybatis的分页实现方式感兴趣的朋友一起看看吧... 目录​1. 原生 SQL 分页(物理分页)​​2. RowBounds 分页(逻辑分页)​​3. Page

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

Mybatis Plus JSqlParser解析sql语句及JSqlParser安装步骤

《MybatisPlusJSqlParser解析sql语句及JSqlParser安装步骤》JSqlParser是一个用于解析SQL语句的Java库,它可以将SQL语句解析为一个Java对象树,允许... 目录【一】jsqlParser 是什么【二】JSqlParser 的安装步骤【三】使用场景【1】sql语

mybatis的mapper对应的xml写法及配置详解

《mybatis的mapper对应的xml写法及配置详解》这篇文章给大家介绍mybatis的mapper对应的xml写法及配置详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录前置mapper 对应 XML 基础配置mapper 对应 xml 复杂配置Mapper 中的相