Mybatis-动态SQL
2021/6/22 2:26:46
本文主要是介绍Mybatis-动态SQL,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
小技巧
<!--设置经典数据库命名(CURRENT_TIME)为驼峰命名(currentTime)--> <setting name="mapUnderscoreToCamelCase" value="true"/>
动态SQL
1.定义:增加了逻辑判断进行拼接的SQL语句
UserMapperTest.class
public class UserMapperTest { SqlSession sqlSession; UserMapper userMapper; StudentMapper studentMapper; TeacherMapper teacherMapper; public UserMapperTest() throws IOException { this.sqlSession = MybatisUtil.getSQLSession(); this.userMapper = sqlSession.getMapper(UserMapper.class); this.studentMapper = sqlSession.getMapper(StudentMapper.class); this.teacherMapper = sqlSession.getMapper(TeacherMapper.class); } //动态SLQ之if @Test public void getUserByid(){ UserPojo userPojo = new UserPojo(9000,"2000","500"); List<UserPojo> userByid = userMapper.getUserByid(userPojo); for (UserPojo user:userByid){ System.out.println(user); } } @Test public void updateUserByid2(){ UserPojo userPojo = new UserPojo(500,"9000000","500"); int i = userMapper.updateUserByid2(userPojo); System.out.println(i); } @Test public void getListUser2(){ ArrayList<Integer> list = new ArrayList<Integer>(); list.add(1000); list.add(500); list.add(5); list.add(4); list.add(3); list.add(2); List<UserPojo> listUser = userMapper.getListUser(list); for (UserPojo user:listUser) { System.out.println(user); } } }
UserMapper.class
public interface UserMapper { //查询所有用户 @Select("select id,name,password pwd from user") List<UserPojo> getListUser(); //添加用户 @Insert("insert into user values(#{id},#{name},#{pwd})") int addUser(UserPojo userPojo); //更新用户 @Update("update user set name=#{name},password=#{pwd} where id=#{id}") int updateUser(UserPojo userPojo); //查询id为500 and 如果password有值,也作为一个条件 List<UserPojo> getUserByid(UserPojo userPojo); int updateUserByid2(UserPojo userPojo); //forEach List<UserPojo> getListUser(ArrayList<Integer> list); }
UserMapper.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"> <!--namespace相当于(UserMapperImpl)实现dao层接口--> <mapper namespace="com.test.mapper.UserMapper"> <!--动态SQL之if--> <!--<select id="getUserByid" resultType="UserAliasesType"> select id,name,password pwd from user where id=#{id} <if test="pwd!=null"> and password=#{pwd} </if> </select>--> <!--含有多个if的情况 1.null不等于"" 2.test中的条件可以自定义(可以添加逻辑and or) 3.if满足之后下一个if继续判断,并不会满足前面的后面的就停止 --> <!--<select id="getUserByid" resultType="UserAliasesType"> select id,name,password pwd from user where id=#{id} <if test="pwd!=''"> and password=#{pwd} </if> <if test="name!=null"> and name=#{name} </if> </select>--> <!--动态SQL之choose,when,otherwise 有时候,我们不想使用所有的条件,而只是想从多个条件中选择一个使用。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。 1.满足when中的一个条件就返回 2.所有都不满足就返回otherwise中的值 如同(if elseif else) --> <!--<select id="getUserByid" resultType="UserAliasesType"> select id,name,password pwd from user where 1=1 <choose> <when test="id==1000"> and id=#{id} </when> <when test="id==500"> and id=#{id} </when> <otherwise> and id=1 </otherwise> </choose> </select>--> <!--动态SQL之While,trim,set where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。 如果 where 元素与你期望的不太一样,你也可以通过自定义 trim 元素来定制 where 元素的功能。 1.where不用手写了变成了自动拼接的标签 2.and可以直接全部加上mybatis会自动去掉,但是不能不写 --> <!--<select id="getUserByid" resultType="UserAliasesType"> select id,name,password pwd from user <where> <if test="id!=null"> and id=#{id} </if> <if test="name!=null"> and name=#{name} </if> </where> </select>--> <!--trim标签 prefixOverrides 属性会忽略通过管道符分隔的文本序列(注意此例中的空格是必要的)。上述例子会移除所有 prefixOverrides 属性中指定的内容,并且插入 prefix 属性中指定的内容。 prefix:前缀 prefixOverrides:前缀重写 suffix:后缀 suffixOverrides:后缀重写 --> <!--<select id="getUserByid" resultType="UserAliasesType"> select id,name,password pwd from user <trim prefix="where" prefixOverrides="and"> <if test="id!=null"> and id=#{id} </if> <if test="name!=null"> and name=#{name} </if> </trim> </select>--> <!--set 元素可以用于动态包含需要更新的列,忽略其它不更新的列。 1.同样这里的,不能不写,可以多写--> <!--<update id="updateUserByid2"> update user <set> <if test="id!=null"> id=#{id}, </if> <if test="name!=null"> name=#{name}, </if> </set> where id=#{id} </update>--> <!--trim 自定义set--> <!--<update id="updateUserByid2"> update user <trim prefix="set" suffixOverrides=","> <if test="id!=null"> id=#{id}, </if> <if test="name!=null"> name=#{name}, </if> </trim> where id=#{id} </update>--> <!--foreach 动态 SQL 的另一个常见使用场景是对集合进行遍历(尤其是在构建 IN 条件语句的时候)--> <select id="getListUser" resultType="UserAliasesType"> select * from USER where id in <foreach collection="ArrayList" item="id" index="item" open="(" separator="," close=")"> #{item} </foreach> </select> </mapper>
script和bind(有待练习)
学习【bilibili狂神说Java】
这篇关于Mybatis-动态SQL的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27消息中间件底层原理资料详解
- 2024-11-27RocketMQ底层原理资料详解:新手入门教程
- 2024-11-27MQ底层原理资料详解:新手入门教程
- 2024-11-27MQ项目开发资料入门教程
- 2024-11-27RocketMQ源码资料详解:新手入门教程
- 2024-11-27本地多文件上传简易教程
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器