Mybatis之动态SQL

简介: 样例包含了If,choose,where,set,foreach,bind. 基本覆盖了常见的动态SQL用法。

样例包含了If,choose,where,set,foreach,bind.

基本覆盖了常见的动态SQL用法。


建表语句:



CREATE TABLE tb_employee (
  ID INT(11) PRIMARY KEY AUTO_INCREMENT,
  LOGINNAME VARCHAR(18),
  PASSWORD VARCHAR(18),
  NAME VARCHAR(18) DEFAULT NULL,
  SEX CHAR(2) DEFAULT NULL,
  AGE INT(11) DEFAULT NULL,
  PHONE VARCHAR(21),
  SAL DOUBLE,
  STATE VARCHAR(18)
);

INSERT INTO tb_employee(LOGINNAME, PASSWORD, NAME, SEX, AGE, PHONE, SAL, STATE)
VALUES('jack', '123456', 'zhang', 'M', 26, '13918232123', 9800, 'active');

INSERT INTO tb_employee(LOGINNAME, PASSWORD, NAME, SEX, AGE, PHONE, SAL, STATE)
VALUES('rose', '123456', 'wen', 'F', 22, '134213232123', 7600, 'disactive');

INSERT INTO tb_employee(LOGINNAME, PASSWORD, NAME, SEX, AGE, PHONE, SAL, STATE)
VALUES('sky', '123456', 'chang', 'M', 42, '13118232123', 12800, 'active');

Employee.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.fkit.mapper.EmployeeMapper">

	<select id="selectEmployeeByIdLike" resultType="org.fkit.domain.Employee">
		SELECT * FROM tb_employee WHERE state = "ACTIVE"
		<if test="id != null">
			and id = #{id} 
		</if>
		<if test="password != null">
			and password = #{password}
		</if>
	</select>
	
	<select id="selectEmployeeChoose" parameterType="hashmap" resultType="org.fkit.domain.Employee">
		SELECT * FROM tb_employee WHERE state = "ACTIVE"
		<choose>
			<when test="id != null">
				and id = #{id}
			</when>
			<when test="loginname != null and password != null">
				and loginname = #{loginname} and password = #{password}
			</when>
			<otherwise>
				and set = "M"
			</otherwise>
		</choose>
	</select>
	
	<select id="selectEmployeeLike"  resultType="org.fkit.domain.Employee">
		SELECT * FROM tb_employee
		<where>
			<if test="id != null">
				id = #{id}
			</if>
			<if test="state != null">
				state = #{state}
			</if>

		</where>
	</select>
	
	<select id="selectEmployeeIn" resultType="org.fkit.domain.Employee">
		SELECT * 
		FROM tb_employee
		WHERE ID IN
		<foreach collection="list" index="index" item="item"
			open="(" separator="," close=")">
			#{item}
		</foreach>
	</select>
	
	<select id="selectEmployeeLikeName" resultType="org.fkit.domain.Employee">
		<bind name="pattern" value="'%' + _parameter.getName() + '%'" />
		SELECT * FROM tb_employee
		WHERE loginname LIKE #{pattern}
	</select>
	
	<select id="selectEmployeeById" parameterType="int" resultType="org.fkit.domain.Employee">
		SELECT * FROM tb_employee WHERE id = #{id}
	</select>
	
	<update id="updateEmployeeIfNecessary" parameterType="org.fkit.domain.Employee">
		UPDATE tb_employee
			<set>
				<if test="loginname != null">loginname=#{loginname},</if>
				<if test="password != null">password=#{password},</if>
				<if test="name != null">name=#{name},</if>
				<if test="sex != null">sex=#{sex},</if>
				<if test="age != null">age=#{age},</if>
				<if test="phone != null">phone=#{phone}</if>
			</set>
		WHERE id = #{id}
	</update>
	
</mapper>

DynamicSQLTest.java



package org.fkit.tst;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.fkit.domain.Employee;
import org.fkit.factory.FKSqlSessionFactory;
import org.fkit.mapper.EmployeeMapper;



public class DynamicSQLTest {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		SqlSession session = FKSqlSessionFactory.getSqlSession();
		
		DynamicSQLTest t = new DynamicSQLTest();
		t.testSelectEmployeeByIdLike(session);
		t.testSelectEmployeeChoose(session);
		t.testUpdateEmployeeIfNecessary(session);
		t.testSelectEmployeeIn(session);
		t.testSelectEmployeeLikeName(session);

		session.commit();
		session.close();

	}
	
	public void testSelectEmployeeByIdLike(SqlSession session) {
		EmployeeMapper em = session.getMapper(EmployeeMapper.class);
		HashMap<String, Object> params = new HashMap<String, Object>();
		params.put("id", 1);
		params.put("password", "123456");
		List<Employee> list = em.selectEmployeeByIdLike(params);
		list.forEach(employee -> System.out.println(employee.getLoginname()));
	}
	
	public void testSelectEmployeeChoose(SqlSession session) {
		EmployeeMapper em = session.getMapper(EmployeeMapper.class);
		HashMap<String, Object> params = new HashMap<String, Object>();
		params.put("id", 1);
		params.put("password", "123456");
		List<Employee> list = em.selectEmployeeChoose(params);
		list.forEach(employee -> System.out.println(employee.getLoginname()));
	}
	
	public void testUpdateEmployeeIfNecessary(SqlSession session) {
		EmployeeMapper em = session.getMapper(EmployeeMapper.class);
		Employee employee = em.selectEmployeeById(2);
		employee.setLoginname("march");
		employee.setPassword("password");
		em.updateEmployeeIfNecessary(employee);
	}
	
	public void testSelectEmployeeIn(SqlSession session) {
		EmployeeMapper em = session.getMapper(EmployeeMapper.class);
		List<Integer> ids = new ArrayList<Integer>();
		ids.add(1);
		ids.add(2);
		List<Employee> list = em.selectEmployeeIn(ids);
		list.forEach(employee -> System.out.println(employee.getLoginname()));
		
	}
	
	public void testSelectEmployeeLikeName(SqlSession session) {
		EmployeeMapper em = session.getMapper(EmployeeMapper.class);
		Employee employee = new Employee();
		employee.setName("k");
		List<Employee> list = em.selectEmployeeLikeName(employee);
		System.out.println(list);
		list.forEach(epe -> System.out.println(epe.getLoginname()));
	}
	

}

d9a65910abc4cb427aced1ab6646f03b82b73472
目录
相关文章
|
3月前
|
SQL Java 测试技术
3、Mybatis-Plus 自定义sql语句
这篇文章介绍了如何在Mybatis-Plus框架中使用自定义SQL语句进行数据库操作。内容包括文档结构、编写mapper文件、mapper.xml文件的解释说明、在mapper接口中定义方法、在mapper.xml文件中实现接口方法的SQL语句,以及如何在单元测试中测试自定义的SQL语句,并展示了测试结果。
3、Mybatis-Plus 自定义sql语句
|
16天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
1月前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
33 10
|
2月前
|
SQL XML Java
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
3月前
|
SQL Java 数据库连接
Mybatis系列之 Error parsing SQL Mapper Configuration. Could not find resource com/zyz/mybatis/mapper/
文章讲述了在使用Mybatis时遇到的资源文件找不到的问题,并提供了通过修改Maven配置来解决资源文件编译到target目录下的方法。
Mybatis系列之 Error parsing SQL Mapper Configuration. Could not find resource com/zyz/mybatis/mapper/
|
2月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
44 1
|
3月前
|
SQL Java 数据库连接
Mybatis系列之 动态SQL
文章详细介绍了Mybatis中的动态SQL用法,包括`<if>`、`<choose>`、`<when>`、`<otherwise>`、`<trim>`和`<foreach>`等元素的应用,并通过实际代码示例展示了如何根据不同条件动态生成SQL语句。
|
3月前
|
SQL Java 关系型数据库
SpringBoot 系列之 MyBatis输出SQL日志
这篇文章介绍了如何在SpringBoot项目中通过MyBatis配置输出SQL日志,具体方法是在`application.yml`或`application.properties`中设置MyBatis的日志实现为`org.apache.ibatis.logging.stdout.StdOutImpl`来直接在控制台打印SQL日志。
SpringBoot 系列之 MyBatis输出SQL日志
|
3月前
|
SQL 关系型数据库 MySQL
解决:Mybatis-plus向数据库插入数据的时候 报You have an error in your SQL syntax
该博客文章讨论了在使用Mybatis-Plus向数据库插入数据时遇到的一个常见问题:SQL语法错误。作者发现错误是由于数据库字段中使用了MySQL的关键字,导致SQL语句执行失败。解决方法是将这些关键字替换为其他字段名称,以避免语法错误。文章通过截图展示了具体的操作步骤。
|
4月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
91 3