########################################################################################################################
# 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
查看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 #
# 中文乱码!!!! | | | | #
# \ / \ / #
########################################################################################################################