Mybatis框架动态sql查询
创始人
2025-05-31 19:11:02
0
########################################################################################################################
#   declare   吼吼吼!hohoho~~~~ 开始了开始了                                                                             # 
#   begin                                                                                                              #
#     代码肌肉兄贵         ~~~~~~      {  ]       OH  YEAH~~~    author:Vincent                                          # 
#              ________  |^^\  }  _____\ \                                                                             #                                                 
#             \  ______ (_-__\ }  ________\       来到代码世界~展示我的超能力                                              #                                   
#               \ \     |____|____/                                                                                    #                                   
#                 [  }   | __/__ /             祝小伙儿们看完文章后                                                       #                                  
#      ^ ^                |__/__/      工作顺利,吃啥啥没够儿~!                                                          #                                   
#  这里是ISO-8859-1        |__/__|       不要惹我,一拳从多线程给你打成hello world!                                      #                                    
#  西欧字符集  ------>    /  \??/   \         欢迎关注微信 2012letitgo2012                                                #                                   
#    中文乱码!!!!    |    | |     |                                                                                  #                                     
#                       \   /  \   /                                                                                   # 
########################################################################################################################

前提

小伙伴们,我们来一个Mybatis动态sql框架的查询例子。

我们一起来看一下吧^_^~~

需求:

有三张表,用户表users,商品表Mybatisgoods,订单表dingdan。

需要做三张表关联,查询用户表中的用户:关联订单表中的下单人。查询订单表中数据:订单编号 数量 总价格。商品表:商品名称。

另外增加三个动态条件,即条件不满足时此条件添加到sql中。

不确定条件:

1.按照下单人进行查询

2. 按照下单数量进行查询

3. 商品名称(商品名称进行模糊查询)

首先创建三张表

用户表:

用户表:usersid(流水号)  主键  自动增长,username(用户名:不能重复  不能为空)create table users(id int primary key,
name varchar2(30) unique not null
)
create sequence users_id increment by 1 start with 0 minvalue 0;
insert into users values(users_id.nextval,'tom');
insert into users values(users_id.nextval,'mike');
insert into users values(users_id.nextval,'bob');
commit;

商品表:

商品表:goodsid(商品编号), 主键  自动增长,goodname(商品名称),  不能为空price(商品价格)  doublecreate table Mybatisgoods(id int primary key,
goodname varchar2(30) not null,
price number)
/
create sequence goods_id increment by 1 start with 0 minvalue 0;
insert into Mybatisgoods values(goods_id.nextval,'雪碧',6);
insert into Mybatisgoods values(goods_id.nextval,'可乐',6);
insert into Mybatisgoods values(goods_id.nextval,'大重九',9.9);
insert into Mybatisgoods values(goods_id.nextval,'茅台',99);
insert into Mybatisgoods values(goods_id.nextval,'剑南春',90);
insert into Mybatisgoods values(goods_id.nextval,'绵竹大曲',90);
commit;

订单表:

订单表:dingdan(id(流水号),   主键  自动增长,ddnum(订单编号),userid(下单人编号),外键(users)num(数量),goodid(商品编号),  外键(商品表)price(总价格))create table dingdan(id int primary key,
ddnum varchar2(30) not null,
userid number,
num number,
goodid number,
price number,
constraint fk_dingdan_userid_uid foreign key(userid) references users(id),
constraint fk_dingdan_goodid_mgid foreign key(goodid) references Mybatisgoods(id)
)
/
create sequence dingdan_id increment by 1 start with 0 minvalue 0;
insert into dingdan values(dingdan_id.nextval,4,1,4,1,24);
insert into dingdan values(dingdan_id.nextval,5,2,5,2,30);
insert into dingdan values(dingdan_id.nextval,6,3,6,3,60);
commit;

在oracle数据库进行sql测试:

select u.username,
mg.goodname,
dd.num,
dd.price 
from user u, Mybatisgoods mg,
dingdan dd 
where u.id=dd.userid 
and mg.id=dingdan.goodid 
or u.username=${username} 
or dd.num=${num} 
or mg.goodname 
like '%'||#{username}||'%';

首先把我的Mybatis配置贴出来:




把sql语句写在mapper配置文件中:



进行sql查询

package com.mybatishomework;import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.annotation.Resource;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 com.dao.pojo.User;public class test {public static void main(String[] args) throws IOException {InputStream input = Resources.getResourceAsStream("mybatis.xml"); SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(input);SqlSession sql = fac.openSession();Map map = new HashMap();map.put("username", "mike");map.put("num", 4);map.put("goodname", "大重九");List list = sql.selectList("c1.selectUMgDd",map);for(Map m : list) {System.out.println(m);}//这里不要忘记提交sql和关闭sql,查询语句不需要提交,如果是DML//语句需要进行提交,不然sql.insert()或者sql.update()方法不会有返回值。sql.commit();sql.close();}
}

查看sql语句输出结果:

DEBUG 2023-03-19 22:05:53,542 org.apache.ibatis.logging.LogFactory: Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG 2023-03-19 22:05:53,565 org.apache.ibatis.datasource.pooled.PooledDataSource: PooledDataSource forcefully closed/removed all connections.
DEBUG 2023-03-19 22:05:53,565 org.apache.ibatis.datasource.pooled.PooledDataSource: PooledDataSource forcefully closed/removed all connections.
DEBUG 2023-03-19 22:05:53,565 org.apache.ibatis.datasource.pooled.PooledDataSource: PooledDataSource forcefully closed/removed all connections.
DEBUG 2023-03-19 22:05:53,565 org.apache.ibatis.datasource.pooled.PooledDataSource: PooledDataSource forcefully closed/removed all connections.
DEBUG 2023-03-19 22:05:53,733 org.apache.ibatis.transaction.jdbc.JdbcTransaction: Opening JDBC Connection
DEBUG 2023-03-19 22:05:53,967 org.apache.ibatis.datasource.pooled.PooledDataSource: Created connection 1535634836.
DEBUG 2023-03-19 22:05:53,969 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: ooo Using Connection [oracle.jdbc.driver.T4CConnection@5b87ed94]
DEBUG 2023-03-19 22:05:53,970 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: ==>  Preparing: select t.* from (select u.username,mg.goodname,dd.num,dd.price from users u,Mybatisgoods mg,dingdan dd where u.id=dd.userid and mg.id=dd.goodid) t where t.username='mike' or t.num=4 or t.goodname like '%'||?||'%' 
DEBUG 2023-03-19 22:05:54,079 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: ==> Parameters: 大重九(String)
{PRICE=60, NUM=6, USERNAME=bob, GOODNAME=大重九}
{PRICE=30, NUM=5, USERNAME=mike, GOODNAME=可乐}
{PRICE=24, NUM=4, USERNAME=tom, GOODNAME=雪碧}
DEBUG 2023-03-19 22:05:54,138 org.apache.ibatis.transaction.jdbc.JdbcTransaction: Resetting autocommit to true on JDBC Connection [oracle.jdbc.driver.T4CConnection@5b87ed94]
DEBUG 2023-03-19 22:05:54,139 org.apache.ibatis.transaction.jdbc.JdbcTransaction: Closing JDBC Connection [oracle.jdbc.driver.T4CConnection@5b87ed94]
DEBUG 2023-03-19 22:05:54,139 org.apache.ibatis.datasource.pooled.PooledDataSource: Returned connection 1535634836 to pool.

好的,目前我们可以看到查询语句的输出结果了。

小伙伴们,你们学会了吗?^_^~~~

如果有疑问请在评论区进行提问。

如果想了解更多Mybatis知识,请继续关注我的博客噢~~~

########################################################################################################################
#     end;                                                                                                             #
#     代码肌肉兄贵         ~~~~~~      {  ]       OH  YEAH~~~    author:Vincent                                          # 
#              ________  |^^\  }  _____\ \                                                                             #                                                 
#             \  ______ (_-__\ }  ________\       来到代码世界~展示我的超能力                                              #                                   
#               \ \     |____|____/                                                                                    #                                   
#                 [  }   | __/__ /             祝小伙儿们看完文章后                                                       #                                  
#      ^ ^                |__/__/      工作顺利,吃啥啥没够儿~!                                                          #                                   
#  这里是ISO-8859-1        |__/__|       不要惹我,一拳从多线程给你打成hello world!                                        #                                    
#  西欧字符集  ------>    /  \??/   \         欢迎关注微信 2012letitgo2012                                                #                                   
#    中文乱码!!!!    |    | |     |                                                                                  #                                     
#                       \   /  \   /                                                                                   # 
########################################################################################################################

相关内容

热门资讯

玩的作文400字 关于玩的作文400字(通用30篇)  在日常学习、工作抑或是生活中,大家都经常看到作文的身影吧,借助...
随笔作文 随笔作文随笔我不知道梦想是什么颜色,也许它自有自己的颜色,我不知道风往哪里吹,也许它自有自己的方向,...
曾经那个少年作文 曾经那个少年作文(精选22篇)  在现实生活或工作学习中,大家都跟作文打过交道吧,通过作文可以把我们...
垃圾分类的重要性优秀作文40... 垃圾分类的重要性优秀作文400字  我是一个垃圾桶,整天在角落收垃圾,一天到晚都挺着一个“啤酒肚”,...
我最爱看的电视栏目250字作... 我最爱看的电视栏目250字作文我最爱看的电视栏目是少儿频道的《熊出没》。原因:因为这部动画片很好玩,...
爱玩乐器的爸爸作文 爱玩乐器的爸爸作文爱玩乐器的爸爸··· 韩鹦我的爸爸是一个非常喜欢音乐的人,他特别擅长吹、拉、弹各种...
让我再看你一眼作文 让我再看你一眼作文  在日常学习、工作抑或是生活中,许多人都有过写作文的经历,对作文都不陌生吧,借助...
20年后的世界想象作文 20年后的世界想象作文  在日常的学习、工作、生活中,大家对作文都再熟悉不过了吧,写作文可以锻炼我们...
雨优秀作文 【荐】雨优秀作文  在日常学习、工作和生活中,大家都经常看到作文的身影吧,作文根据写作时限的不同可以...
春天作文 关于春天作文(通用15篇)  在日复一日的学习、工作或生活中,大家总少不了接触作文吧,作文是一种言语...
给老师“画像”_我的老师作文... 给老师“画像”_我的老师作文600字  无论是在学校还是在社会中,许多人都有过写作文的经历,对作文都...
我喜欢的水果西瓜作文 我喜欢的水果西瓜作文我喜欢的水果西瓜我最喜欢的水果就是西瓜了。今天正好是星期天,我的奶奶到市场去给我...
秋收的作文600字 秋收的作文600字(精选32篇)  在日常学习、工作或生活中,大家都不可避免地会接触到作文吧,作文是...
蛇作文 蛇作文大家一听到蛇,想蛇全有毒,有些人并不这样认为,因为蛇分为两种,一种是有毒蛇,另一种是无毒蛇。有...
取长补短作文450字 取长补短作文450字  一天,我像往常一样带着小狗花花和小猫京京去宠物食品店买东西。我给小猫京京买了...
走进图书馆作文800字 走进图书馆作文800字(通用7篇)  在日常学习、工作或生活中,大家都接触过作文吧,作文根据写作时限...
感动常在作文 感动常在作文通用15篇  在平时的学习、工作或生活中,大家都写过作文吧,作文是从内部言语向外部言语的...
用善良做底色作文650字 用善良做底色作文650字  繁华的街道上人来人往,正在举行商品优惠的店铺,被围了个水泄不通。  一只...
尊重的作文600字 关于尊重的作文600字(通用30篇)  在平凡的学习、工作、生活中,大家都尝试过写作文吧,作文是人们...
介绍一种物品作文 介绍一种物品作文15篇  在日常的学习、工作、生活中,大家都接触过作文吧,写作文可以锻炼我们的独处习...