MyBatis 您所在的位置:网站首页 字段代码怎么编写 MyBatis

MyBatis

2024-06-28 20:26| 来源: 网络整理| 查看: 265

文章目录 1、查询所有2、查询详情(通过特定属性查询)3、多条件查询(1)接口参数列表三种表达方式(2)多条件查询(3)动态Sql(4)多条件动态查询(5)单条件动态查询

1、查询所有

基本步骤

1.定义mapper接口,编写接口方法 在这里插入图片描述 2.定义sql映射文件 创建一个和mapper接口相同的xml文件,放在相同包目录下面,然后编写sql语句 在这里插入图片描述 我是查询所有,所以sql语句和mysql查询所有一样,如果你想要查询特定字段,也可以自行定义。 在这里插入图片描述 3.编写MyBaits代码 编写代码的步骤(参考另一篇)

package com.mybatis.demo; import com.mybatis.mapper.StuMapper; import com.mybatis.pojo.Stu; 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 java.io.InputStream; import java.util.List; public class MyBatis003 { public static void main(String[] args) throws Exception { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); StuMapper stuMapper = sqlSession.getMapper(StuMapper.class); List stus = stuMapper.selectAll(); for (Stu stu:stus) { System.out.println(stu); } sqlSession.close(); } }

4.查询结果,将数据库表stu里面所有信息都查询出来了 在这里插入图片描述

5.注意信息 当你的数据库字段名和你的定义的实体类属性名不同时,不能查询出不同的字段对应数据信息。假如我数据库名称是username,实体类属是userName,下面是解决三种方法。 方法一:在定义sql语句时起别名 在这里插入图片描述 方法二:定义sql片段,直接用sql标签引入sql语句,直接用include标签加上sql片段的ID名就可以找到对用的SQL语句。 在这里插入图片描述 方法三:使用resultMap标签,映射数据库字段名和属性名(最常用) resultMap里面最常用的两个子标签,一个是result,它是映射普通字段名和属性名,还有一个是id子标签,它是映射主键和属性名。里面的column属性时数据库表的字段名,property是实体类的属性名。 在这里插入图片描述

2、查询详情(通过特定属性查询)

1.定义mapper接口,编写接口方法,这里的参数列表就是你想要查询的属性对应的全部信息。可以通过name属性查询该学生全部信息。 在这里插入图片描述 2.编写sql映射文件 创建一个和mapper接口相同的xml文件,放在相同包目录下面,然后编写sql语句 在这里插入图片描述 3.编写MyBaits代码

package com.mybatis.demo; import com.mybatis.mapper.StuMapper; import com.mybatis.pojo.Stu; 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 java.io.IOException; import java.io.InputStream; public class MyBatis004 { public static void main(String[] args) throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); StuMapper stuMapper = sqlSession.getMapper(StuMapper.class); Stu stu = stuMapper.selectByName("小赵"); System.out.println(stu); } }

4.查询结果 在这里插入图片描述

5.注意细节 1.参数占位符的使用 参数占位符就是我上面的 name=#{name},一般有两种。一种就是#{},这个参数占位附可以防止sql注入,相当于name=?,还有一种是${},这个就不能防止sql注入了,因为它是直接把参数拼到后面,相当于name=name。 2.特殊字符处理 特殊字符就是=,>, String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); StuMapper stuMapper = sqlSession.getMapper(StuMapper.class); List stus = stuMapper.selectByCondition("小%", "上海", "男"); for (Stu stu:stus) { System.out.println(stu); } sqlSession.close(); } }

4.运行结果 在这里插入图片描述

(3)动态Sql

什么是动态sql:动态sql就是sql语句随着用户输入的条件不同,对应生成的sql语句也会不同。比如在查询用户的时候,你可能只知道用户的姓名,也可能知道用户姓名,性别等。不同的输入对应sql语句是不同的。动态sql就可以解决这个问题。MyBatis提供了一些动态sql方法以及介绍,这里我就不一一介绍了。你可以去官网看对应语句以及用法。 在这里插入图片描述

(4)多条件动态查询

实现步骤 1.定义mapper接口,编写方法。(这里用类封装参数列表) 在这里插入图片描述 2.编写sql映射文件,这里用到了动态sql if语句,就是先判断有没有传入这个参数,如果有那就执行对应where条件,如果没有就不添加where条件到sql语句。 在这里插入图片描述 3.编写MyBatis代码 在编写代码时我用到的是类封装参数列表,所以在执行sql语句之前要封装好实体类。 在这里插入图片描述

package com.mybatis.demo; import com.mybatis.mapper.StuMapper; import com.mybatis.pojo.Stu; 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 java.io.IOException; import java.io.InputStream; import java.util.List; public class MyBatis006 { public static void main(String[] args) throws IOException { Stu stu = new Stu(); String name = "小%"; String adr = "上海"; String gender = "男"; stu.setName(name); stu.setAdr(adr); stu.setGender(gender); String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); StuMapper stuMapper = sqlSession.getMapper(StuMapper.class); List stus = stuMapper.selectByCondition(stu); for (Stu s:stus ) { System.out.println(s); } sqlSession.close(); } }

4.运行结果 在这里插入图片描述 5.注意点 由于if条件里面的sql语句是直接拼接在总的sql语句上的,所以如果第一个if里面的text为空,那里面的sql语句是不会加上去的。以我写的为例,如果参数列表name为空,那总的sql语句就变成了select * from stu whereand adr in adr and gender = gender;显然不符合sql语句语法,会报错。 在这里插入图片描述 MyBatis提供了解决这个问题的方法,就是在if标签外面将where关键字替换成为一个where标签,然后里面每个sql语句都加一个and就好了。 在这里插入图片描述

(5)单条件动态查询

实现步骤 1.定义一个mapper接口,定义对应方法(这里使用的是map集合封装参数) 在这里插入图片描述 2.定义sql映射文件,单条件动态查询用到的是choose:when,otherwise,相当于java里面的Switch:case,default。当满足第一个when标签的test条件,就执行当前语句,不会再往下执行。when里面都不满足就执行otherwise里面的。 在这里插入图片描述 3.编写MyBatis代码 这里使用的是map集合封装参数,所以在执行sql之前要把参数列表封装到map集合里面。

在这里插入图片描述

package com.mybatis.demo; import com.mybatis.mapper.StuMapper; import com.mybatis.pojo.Stu; 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 java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map; public class MyBatis007 { public static void main(String[] args) throws IOException { Map map = new HashMap(); String name = "小%"; String adr = "上海"; String gender = "男"; map.put("name",name); map.put("adr",adr); map.put("gender",gender); String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); StuMapper stuMapper = sqlSession.getMapper(StuMapper.class); List stus = stuMapper.selectByCondition(map); for (Stu s:stus ) { System.out.println(s); } sqlSession.close(); } }

4.执行结果 看到这个执行结果你可能有点质疑,不是有限定地址在上海,性别为男的吗。其实第三步已经解释了,当满足一个when标签的条件后,后面的条件不会被传到sql语句。所以这里相当于只查找了小字开头的同学,这正是单条件的解释。 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有