当前位置: 首页 > news >正文

mybatis条件语句的查询与注解的使用以及mybatis与servelet结合查询

1、mybatis条件语句的查询

首先创建对象,添加属性(再次之前需要config.xml文件连接数据库)

import lombok.Data;@Data//该注解会自动添加get、set方法
public class Emp {private Integer empNo;private String ename;private String job;private Integer mgr;private String hireDate;private Double sal;private Double comm;private Integer deptNo;public Integer state;
}
 1)根据一个参数对数据进行查询

①建立接口,创建方法

public interface EmpMapper {List<Emp> find1(Emp emp);//一个参数进行查询
}

②xml文件书写SQL查询语句 

    <select id="find1" resultType="com.jiazhong.mybatis.m4.bean.Emp">select * from emp<if test="ename!=null">where ename like #{ename}</if></select>

③实现查询姓李的人的数据 

    private static void a(){InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);Emp emp = new Emp();emp.setEname("%李%");List<Emp> emps = empMapper.find1(emp);sqlSession.close();}
2) 根据两个参数对数据进行查询

2.1 SQL语句用<where>实现

①建立接口,创建方法

public interface EmpMapper {List<Emp> find2(Emp emp);//两个参数进行查询
}

②xml文件书写SQL查询语句 

由于是两个条件,可能只需要实现其中一个,也可能两个条件都需满足,这时候拼接就不起效了,用where可以实现如果条件只要成立一个,会自动添加where语句并且忽略第一次出现的and或者or

    <select id="find2" resultType="com.jiazhong.mybatis.m4.bean.Emp">select * from emp<!--where:如果条件只要成立一个,会自动添加where语句并且忽略第一次出现的and|or--><where><if test="ename!=null">and ename like #{ename}</if><if test="job!=null">and job=#{job}</if></where></select>

③实现查询姓李的(程序员的)数据 

    private static void b(){InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);Emp emp = new Emp();emp.setEname("%李%");//emp.setJob("程序员");List<Emp> emps = empMapper.find2(emp);sqlSession.close();}

2.2 SQL语句用<trim>实现

①建立接口,创建方法

public interface EmpMapper {List<Emp> find3(Emp emp);//两个参数进行查询
}

②xml文件书写SQL查询语句 

同样,trim也有where一样的功能:如果条件只要成立一个,会自动添加where语句并且忽略第一次出现的and或or

    <select id="find3" resultType="com.jiazhong.mybatis.m4.bean.Emp">select * from emp<!--trim:如果条件只要成立一个,会自动添加where语句并且忽略第一次出现的and|or--><trim prefix="where" prefixOverrides="and|or"><if test="ename!=null">and ename like #{ename}</if><if test="job!=null">and job=#{job}</if></trim></select>

③实现查询姓李的(程序员的)数据 

    private static void c(){InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);Emp emp = new Emp();emp.setEname("%李%");emp.setJob("程序员");List<Emp> emps = empMapper.find3(emp);sqlSession.close();}
3)更新一条数据 

3.1 SQL语句用<set>实现

①建立接口,创建方法

public interface EmpMapper {int update1(Emp emp);//一条数据的更新,SQL语句用<set>
}

②xml文件书写SQL查询语句 

由于有的数据没有给到程序,在SQL语句中使用<set>方法就可以实现只要条件成立一个,会自动添加一个set,并忽略最后一次出现的逗号

    <update id="update1" parameterType="com.jiazhong.mybatis.m4.bean.Emp">update emp<!--set:只要条件成立一个,会自动添加一个set,并忽略最后一次出现的,--><set><if test="ename!=null">ename = #{ename},</if><if test="job!=null">job = #{job},</if><if test="mgr!=null">mgr = #{mgr},</if><if test="sal!=null">sal = #{sal},</if><if test="comm!=null">comm = #{comm},</if><if test="deptNo!=null">deptNo = #{deptNo},</if></set>where empNo=#{empNo}</update>

③实现数据更新

    private static void d(){InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);Emp emp = new Emp();emp.setEname("你好");emp.setJob("程序员");emp.setSal(798.0);emp.setEmpNo(999999);empMapper.update1(emp);sqlSession.close();}

3.2 SQL语句用<trim>实现

①建立接口,创建方法

public interface EmpMapper {int update2(Emp emp);//一条数据的更新,SQL语句用<trim>
}

②xml文件书写SQL查询语句 

<trim>方法跟<set>方法是一样的效果:只要条件成立一个,会自动添加一个set,并忽略最后一次出现的逗号

    <update id="update2" parameterType="com.jiazhong.mybatis.m4.bean.Emp"><trim prefix="set" suffixOverrides=","><if test="ename!=null">ename = #{ename},</if><if test="job!=null">job = #{job},</if><if test="mgr!=null">mgr = #{mgr},</if><if test="sal!=null">sal = #{sal},</if><if test="comm!=null">comm = #{comm},</if><if test="deptNo!=null">deptNo = #{deptNo},</if></trim>where empNo=#{empNo}</update>

③实现数据更新

    private static void d(){InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);Emp emp = new Emp();emp.setEname("你好");emp.setJob("程序员");emp.setSal(798.0);emp.setEmpNo(999999);empMapper.update2(emp);sqlSession.close();}
4)if else 条件语句

①建立接口,创建方法

public interface EmpMapper {    List<Emp> find4(String job);//if else判断语句
}

②xml文件书写SQL查询语句 

when相当于if,otherwise相当于else if    
&lt;是小于号,网页中小于号是一个特殊字符,所有不能用<表示小于号   

    <select id="find4" resultType="com.jiazhong.mybatis.m4.bean.Emp">select * from emp<where><choose><!--when相当于if,otherwise相当于else if--><when test="job=='程序员'">and sal>1000</when><when test="job=='歌手'">and deptNp=20</when><when test="job=='网页设计'">and hiredate>='2025-1-1' and hiredate &lt;='2025-12-31'</when><otherwise>and ename like '%李%'</otherwise></choose></where></select>

③实现条件查询

传入的job值既不是程序员,也不是歌手和网页设计,所以输出姓李的员工信息

    private static void e(){InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);empMapper.find4("1212");sqlSession.close();}

5)foreach 

①建立接口,创建方法

public interface EmpMapper {    List<Emp> find5(@Param("abcd")List<String> abcd);//foreach
}

②xml文件书写SQL查询语句 

    <select id="find5" resultType="com.jiazhong.mybatis.m4.bean.Emp">select * from emp<where><if test="abcd!=null">job in<foreach collection="abcd" item="e" separator="," open="(" close=")">#{e}</foreach></if></where></select>

③实现条件查询

查询job是程序员、网页设计、歌手、aaa的员工信息

    private static void f(){InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();List<String> jobs = Arrays.asList("程序员","网页设计","歌手","aaa");EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);List<Emp> result = mapper.find5(jobs);sqlSession.close();}

6)bind

①建立接口,创建方法

public interface EmpMapper {    List<Emp> find6(@Param("ename")String ename);//bind
}

②xml文件书写SQL查询语句 

    <select id="find6" resultType="com.jiazhong.mybatis.m4.bean.Emp"><!-- _parameter.ename:获取参数对象的 ename 属性值'%'+...+'%':在值的前后添加通配符 % --><bind name="abc" value="'%'+_parameter.ename+'%'"></bind>select * from emp where ename like #{abc}</select>

③实现条件查询

查询姓张的员工信息

    private static void g(){InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);mapper.find6("张");sqlSession.close();}

2、mybatis注解的使用

注解的使用会让代码更加简洁

首先创建对象,添加属性(再次之前需要config.xml文件连接数据库)

@Data//该注解会自动生成get set方法
public class Emp {private Integer empNo;private String ename;private String job;private Integer mgr;private String hireDate;private Double sal;private Double comm;private Integer deptNo;public Integer state;
}

这里我将把增删查改写在一起,注释在代码中

①建立接口,创建方法

import com.jiazhong.mybatis.m5.bean.Emp;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;import java.util.List;public interface EmpMapper {//使用注解进行增删改查@Select("select * from emp where state=1")List<Emp> findAll();@Select("select * from emp where state=1 and empno=#{id}")Emp findById(Integer id);@Select("select * from emp where state=1 and ename like #{name}")List<Emp> findByName(String name);@Select("select * from emp where state=1 and ename like #{ename} and job=#{job}")//@Select("<script>select * from emp where state=1 and ename like #{ename} <if test='job!=null'>and job=#{job}</if></script>")//这里不使用mybatis的条件语句(if else)查询是因为它太长List<Emp> findByEnameAndJob(@Param("ename") String ename,@Param("job") String job1);@Insert("insert into emp values (null,#{ename},#{job},#{mgr},now(),#{sal},#{comm},#{deptNo},1)")int save(Emp emp);@Update("update emp set ename=#{ename},job=#{job},mgr=#{mgr},sal=#{sal},comm=#{comm},deptNo=#{deptNo} where empno=#{empNo}")int update(Emp emp);@Update("update emp set state=0 where empno=#{id} and state=1")int delete(int id);
}

注解已经帮我们完成了SQL语句的书写,所以我们不用再在xml文件中书写SQL查询语句 

②实现增删改查

查所有数据

    private static void a(){InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);List<Emp> emps = empMapper.findAll();for (Emp emp : emps){System.out.println(emp);}sqlSession.close();}

根据Id查数据

    private static void b(){InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);Emp emp = empMapper.findById(7908);System.out.println(emp);sqlSession.close();}

根据姓名查数据

    private static void c(){InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);List<Emp> emps = empMapper.findByName("%李%");for(Emp emp : emps){System.out.println(emp);}sqlSession.close();}

分页查询
分页查询需要在config.xml文件中添加插件,还需要添加依赖,在mybatis增删改查文章中有该方法

    private static void d(){InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);//分页查询int page=1;PageHelper.startPage(page,10);List<Emp> emps = empMapper.findAll();for(Emp emp : emps){System.out.println(emp);}//将原始查询结果(emps)转换为分页对象(PageInfo),自动计算并封装分页信息PageInfo<Emp> pageInfo = new PageInfo<>(emps);System.out.println(pageInfo);sqlSession.close();}

 根据名字和job进行分页查询

    private static void e(){InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);int page=1;PageHelper.startPage(page,10);List<Emp> emps = empMapper.findByEnameAndJob("%张%","程序员");for (Emp emp : emps){System.out.println(emp);}PageInfo<Emp> pageInfo = new PageInfo<>(emps);System.out.println(pageInfo);sqlSession.close();}

添加一条数据

    private static void f(){InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);Emp emp = new Emp();emp.setEname("xx");emp.setJob("程序员");emp.setMgr(8907);emp.setSal(9999.9);emp.setComm(null);emp.setDeptNo(30);empMapper.save(emp);//将emp对象保存到数据库sqlSession.commit();//提交事务sqlSession.close();}

更新一条数据

    private static void g(){InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);Emp emp = new Emp();emp.setEname("小美");emp.setJob("歌手");emp.setMgr(7898);emp.setSal(99199.9);emp.setComm(10.9);emp.setDeptNo(40);emp.setEmpNo(8041);empMapper.update(emp);sqlSession.commit();sqlSession.close();}

删除一条数据(这里是逻辑删除)

    private static void h(){InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);empMapper.delete(8040);sqlSession.commit();sqlSession.close();}

3、mybatis与servelet结合查询

①首先创建对象,添加属性(再次之前需要config.xml文件连接数据库)

@Data
public class Emp {private Integer empNo;private String ename;private String job;private Integer mgr;private String hireDate;private Double sal;private Double comm;private Integer deptNo;private Integer state;
}

 ②创建接口

import com.jiazhong.mybatis.m6.bean.Emp;
import org.apache.ibatis.annotations.Select;import java.util.List;public interface EmpMapper {@Select("select * from emp where state=1")List<Emp> findAll();
}

③创建Serlet响应类

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;// 接受用户的请求,对请求作出响应
@WebServlet("/emp")
public class EmpServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException {//HttpServletRequest:客户端请求  HttpServletResponse:服务器响应//1.接受请求InputStream inputStream = EmpServlet.class.getClassLoader().getResourceAsStream("config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession(true);EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);List<Emp> list = empMapper.findAll();// 2.作出响应//req.getSession():获取当前用户的会话(若不存在则创建新会话)//setAttribute("list", list):将会话属性list设为指定的list对象。后续可通过session.getAttribute("list")获取该数据req.getSession().setAttribute("list", list);//将数据(list)存入用户的会话(Session)中,键名为 "list"//sendRedirect("index.jsp"):向客户端发送302状态码和新 URL。浏览器收到后会自动发起新请求访问index.jspresp.sendRedirect("index.jsp");//将客户端重定向到 index.jsp 页面}
}

④建立jsp界面显示

<%@ page import="com.jiazhong.mybatis.m6.bean.Emp" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>Title</title></head><body><%--从会话中获取员工列表数据并展示--%><%//getAttribute("list"):尝试获取会话中名为 "list"的属性返回值为Object类型,需强制转换为实际类型Object obj = session.getAttribute("list");if (obj == null){ //若obj为nullresponse.sendRedirect("emp");//重定向到emp路径(通常是 Servlet)return;//终止当前 JSP 页面的执行}List<Emp> list = (List<Emp>) obj;//将Object类型的obj强制转换为List<Emp>//out:用于向客户端输出内容  e+"<br/>":调用Emp类的toString()方法并添加换行标签//最终在页面上显示每个员工的信息for (Emp e : list){out.print(e + "<br/>");}%></body>
</html>
http://www.dtcms.com/a/295036.html

相关文章:

  • 数据结构系列之AVL树
  • 主要科技公司与新创公司 AI Agent 进展调研
  • Nginx 日志分析与慢请求排查
  • Symantec sep配置自定义yara规则
  • 背包九讲 详细解析与 C++ 实现
  • 不一样的Mysql安装方式
  • (8)Step 7 实现泵组主备切换与PID变频调节(压力——频率)
  • LangChain面试内容整理-知识点28:LangChain部署实践
  • 【JavaSE】正则表达式学习笔记
  • 二、计算机网络技术——第4章:网络层
  • 跟著Qcadoo MES系统学习产品设计001
  • 从订单簿到AMM:一场去中心化交易所的技术革命
  • 彻底掌握双列集合——Map接口以及实现类和常用API及其底层原理
  • 1688商品数据采集的应用行业与接入方式
  • 人工智能之数学基础:事件间的运算
  • JVM、Dalvik、ART垃圾回收机制
  • OpenLayers 快速入门(八)事件系统
  • java基础(the 15th day)
  • freelancer是什么用工模式?有什么好处和坏处呢?
  • Log4j2漏洞vul-hub通关教程
  • 根据图片的r值来进行透明剔除
  • SpringBoot RESTful API设计指南
  • C++day1
  • #Linux内存管理# 在一个播放系统中同时打开几十个不同的高清视频文件,发现播放有些卡顿,打开视频文件是用mmap函数,请简单分析原因。
  • SQL难点突破之复杂业务逻辑的SQL查询实战
  • pcb碳油板工艺流程
  • zabbix基于GNS3监控部署
  • 学校电子钟系统时间为何不同步?如何解决
  • 面试实战,问题六,被问数据库索引,怎么回答
  • 期权遇到股票分红会调整价格吗?