Mybatis学习笔记之---动态sql中标签的使用
动态Sql语句中标签的使用
(一)常用标签
1.<if>
if标签通常用于WHERE语句中,通过判断参数值来决定是否使用某个查询条件, 他也经常用于UPDATE语句中判断是否更新某一个字段,还可以在INSERT语句中用来判断是否插入某个字段的值
2.<where>
where元素的作用是给SQL语句添加一个条件判断. 如果输出后是and 开头的,MyBatis会把第一个and忽略,当然如果是or开头的,MyBatis也会把它忽略;此外,在where元素中你不需要考虑空格的问题,MyBatis会智能的帮你加上
3.<foreach>
主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。
foreach元素的属性主要有item,index,collection,open,separator,close
collection属性的值有三个分别是list、array、map三种,分别对应的参数类型为:List、数组、map集合
item : 表示在迭代过程中每一个元素的别名
index :表示在迭代过程中每次迭代到的位置(下标)
open :前缀
close :后缀
separator :分隔符,表示迭代时每个元素之间以什么分隔
(二)应用
1.pom.xml
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.11</version>
- </dependency>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.1.41</version>
- </dependency>
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis</artifactId>
- <version>3.4.6</version>
- </dependency>
- </dependencies>
2.SqlMapperConfig.xml
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPEconfiguration
- PUBLIC"-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <!--mybatis的主配置文件-->
- <configuration>
- <!--配置环境-->
- <environments default="mysql">
- <!--配置mysql环境-->
- <environment id="mysql">
- <!--配置事务的类型-->
- <transactionManager type="JDBC"></transactionManager>
- <!--配置数据源(连接池)-->
- <dataSource type="POOLED">
- <!--配置连接数据库的4个基本信息-->
- <property name="driver" value="com.mysql.jdbc.Driver"></property>
- <property name="url" value="jdbc:mysql://localhost:3306/zml?useUnicode=true&characterEncoding=utf-8"></property>
- <property name="username" value="root"></property>
- <property name="password" value="root"></property>
- </dataSource>
- </environment>
- </environments>
- <!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件-->
- <mappers>
- <mapper resource="dao/UserDao.xml"></mapper>
- </mappers>
- </configuration>
3.Users.java
- package entity;
- public class Users {
- private int id;
- private String username;
- private String password;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- @Override
- public String toString() {
- return "Users{" +
- "id=" + id +
- ", username='" + username + '\'' +
- ", password='" + password + '\'' +
- '}';
- }
- }
4.UserVo.java
- package entity;
- import java.util.List;
- public class UserVo {
- private Users users;
- private List<Integer> ids;
- public Users getUsers() {
- return users;
- }
- public void setUsers(Users users) {
- this.users = users;
- }
- public List<Integer> getIds() {
- return ids;
- }
- public void setIds(List<Integer> ids) {
- this.ids = ids;
- }
- }
5.UserDao.java
- package dao;
- import entity.UserVo;
- import entity.Users;
- import org.apache.ibatis.annotations.Param;
- import java.util.List;
- public interface UserDao {
- //查询所有用户信息
- List<Users> findAll();
- //根据ID进行查询
- Users find(int id);
- //模糊查询
- List<Users> findVague(String name);
- //查询用户总数
- int count();
- //将实体类封装到另一个实体类中的模糊查询
- List<Users> findVo(UserVo vo);
- //根据传入参数进行查询
- Users findby(Users users);
- //根据UserVo中的ids集合查询用户信息
- List<Users> findids(UserVo vo);
- }
6.UserDao.xml
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPEmapper
- PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="dao.UserDao">
- <!--查询所有-->
- <select id="findAll" resultType="entity.Users">
- select * from users
- </select>
- <!--根据ID查询-->
- <select id="find" resultType="entity.Users">
- select * from users where id=#{id}
- </select>
- <!--模糊查询-->
- <select id="findVague" resultType="entity.Users">
- -- select * from users where username like '%${value}%'
- select * from users where username like #{name}
- </select>
- <!--查询用户总数-->
- <select id="count" resultType="int">
- select count(id) from users
- </select>
- <!--将实体类封装到另一个实体类中的模糊查询-->
- <select id="findVo" resultType="entity.Users">
- select * from users where username like #{users.username}
- </select>
- <!--根据传入参数进行查询-->
- <select id="findby" resultType="entity.Users" >
- select * from users
- <where>
- <if test="id != null">
- and id=#{id}
- </if>
- <if test="username != null">
- and username=#{username}
- </if>
- </where>
- </select>
- <!--根据UserVo中的ids集合实现查询用户列表-->
- <select id="findids" resultType="entity.Users" parameterType="entity.UserVo">
- select * from users
- <where>
- <if test="ids != null and ids.size()>0">
- <foreach collection="ids" open="and id in (" close=")" item="id" separator=",">
- #{id}
- </foreach>
- </if>
- </where>
- </select>
- </mapper>
7.UserTest.java
- package test;
- import dao.UserDao;
- import entity.UserVo;
- import entity.Users;
- 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 org.junit.After;
- import org.junit.Before;
- import org.junit.Test;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.ArrayList;
- import java.util.List;
- public class UserTest {
- private InputStream in;
- private SqlSession sqlSession;
- private UserDao UserDaoImpl;
- @Before
- public void init() throws IOException {
- //1.读取配置文件
- in= Resources.getResourceAsStream("SqlMapperConfig.xml");
- //2.创建SqlSessionFactory工厂
- SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
- SqlSessionFactory factory=builder.build(in);
- //3.使用工厂生产SqlSession对象
- sqlSession=factory.openSession();
- //4.使用SqlSession创建dao接口的代理对象
- UserDaoImpl=sqlSession.getMapper(UserDao.class);
- }
- @After
- public void destroy() throws IOException {
- //提交事务
- sqlSession.commit();
- //6.释放资源
- sqlSession.close();
- in.close();
- }
- /**
- * 查询所有
- * @throws IOException
- */
- @Test
- public void findall() throws IOException {
- //5.使用代理对象执行方法
- List<Users> users=UserDaoImpl.findAll();
- for(Users u:users){
- System.out.println(u);
- }
- }
- /**
- * 根据ID进行查询
- */
- @Test
- public void find(){
- Users u=UserDaoImpl.find(15);
- System.out.println(u);
- }
- /**
- * 模糊查询,查询所有名字中有小的用户
- * @throws IOException
- */
- @Test
- public void findVague() throws IOException {
- //5.使用代理对象执行方法
- List<Users> users=UserDaoImpl.findVague("%小%");
- for(Users u:users){
- System.out.println(u);
- }
- }
- /**
- * 查询用户总数
- */
- @Test
- public void count(){
- int c=UserDaoImpl.count();
- System.out.println(c);
- }
- /**
- * 将实体类封装到另一个实体类中的模糊查询
- */
- @Test
- public void findVo(){
- UserVo vo=new UserVo();
- Users users=new Users();
- users.setUsername("%小%");
- vo.setUsers(users);
- List<Users> list=UserDaoImpl.findVo(vo);
- for(Users u:list){
- System.out.println(u);
- }
- }
- /**
- * if标签查询,查询用户名为小花,id为25的用户信息
- */
- @Test
- public void findby(){
- Users users=new Users();
- users.setUsername("小花");
- users.setId(25);
- Users u=UserDaoImpl.findby(users);
- System.out.println(u);
- }
- /**
- * 根据UserVo中的ids集合查询用户信息
- */
- @Test
- public void findids(){
- UserVo vo=new UserVo();
- List<Integer> list=new ArrayList<Integer>();
- list.add(13);
- list.add(14);
- list.add(15);
- vo.setIds(list);
- List<Users> li=UserDaoImpl.findids(vo);
- for(Users u:li){
- System.out.println(u);
- }
- }
- }
Mybatis学习笔记之---动态sql中标签的使用的更多相关文章
- MyBatis:学习笔记(4)——动态SQL
MyBatis:学习笔记(4)——动态SQL
- Mybatis学习笔记(六) —— 动态sql
通过mybatis提供的各种标签方法实现动态拼接sql. 需求:根据性别和名字查询用户 查询sql: SELECT id, username, birthday, sex, address FROM ...
- Mybatis学习笔记14 - 动态sql之foreach标签
一.查询给定集合中员工id对应的所有员工信息 示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; import ...
- Mybatis学习笔记11 - 动态sql之trim标签
trim标签体中是整个字符串拼串后的结果.prefix="" 前缀: prefix给拼串后的整个字符串加一个前缀prefixOverrides="" 前缀覆盖: ...
- Mybatis学习笔记13 - 动态sql之set标签
示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; public interface EmployeeMapp ...
- Mybatis学习笔记12 - 动态sql之choose(when otherwise)标签
choose (when, otherwise):分支选择:带了break的swtich-case 示例代码: 接口定义: package com.mybatis.dao; import com.my ...
- 1.3(Mybatis学习笔记)动态SQL
一.<if> 使用<if>可以根据具体情况来拼接SQL语句,使其更加灵活更加适应我们的需求. <if>的标签体中是需要拼接的语句,满足条件才会将其进行拼接. < ...
- Mybatis学习笔记10 - 动态sql之if判断
示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; import java.util.List; public ...
- MyBatis:学习笔记(4)——动态SQL
MyBatis:学习笔记(4)——动态SQL 如果使用JDBC或者其他框架,很多时候需要你根据需求手动拼装SQL语句,这是一件非常麻烦的事情.MyBatis提供了对SQL语句动态的组装能力,而且他只有 ...
随机推荐
- 实战Spring4+ActiveMQ整合实现消息队列(生产者+消费者)
引言: 最近公司做了一个以信息安全为主的项目,其中有一个业务需求就是,项目定时监控操作用户的行为,对于一些违规操作严重的行为,以发送邮件(ForMail)的形式进行邮件告警,可能是多人,也可能是一个人 ...
- 【深入浅出-JVM】(6):栈帧.
代码 package com.mousycoder.mycode.happy_jvm; /** * @version 1.0 * @author: mousycoder * @date: 2019-0 ...
- Docker笔记(四):Docker镜像管理
原文地址:http://blog.jboost.cn/2019/07/16/docker-4.html 在Docker中,应用是通过容器来运行的,而容器的运行是基于镜像的,类似面向对象设计中类与对象的 ...
- requests.exceptions.ChunkedEncodingError: ('Connection broken: IncompleteRead(0 bytes read)', IncompleteRead(0 bytes read))【已解决】
问题: 跑python自动化时出现报错如下图 解决: requests请求时,后面加上参数:stream=True. 参考外国小哥:https://stackoverflow.com/questio ...
- 利用openpyxl模块处理excel表格
一.选取表格中的内容创建图表 1.openpyxl支持利用工作表中单元格的数据,创建条形图.折线图.散点图等.步骤如下: 1).从一个矩形区域选择的单元格,创建一个Reference对象. 2).通过 ...
- panic: time: missing Location in call to Time.In
docker容器发布go项目出现以下问题: panic: time: missing Location in call to Time.In COPY --from=build /usr/share/ ...
- Python登录豆瓣并爬取影评
上一篇我们讲过Cookie相关的知识,了解到Cookie是为了交互式web而诞生的,它主要用于以下三个方面: 会话状态管理(如用户登录状态.购物车.游戏分数或其它需要记录的信息) 个性化设置(如用户自 ...
- TinycoreLinux的安装使用
下载 http://www.tinycorelinux.net/7.x/x86_64/release/ distribution_files/ 05-Apr-2016 07:29 - src/ 24- ...
- [剑指offer] 34. 第一个只出现一次的字符
题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 一次遍历存储到哈希表 一次 ...
- 蓝牙Beacon广播数据包格式以及解析
目录 1. 获取原始蓝牙广播包 2. 安装WireShark软件 3. 分析Beacon广播包数据 3.1 第一个数据包格式 3.2 第二个数据包格式 3.3 Android程序开发中的蓝牙广播包 4 ...