MyBatis中的动态SQL,实现不确定条件的CRUD-----使用Map来传递查询的参数
来源:互联网 发布:学校校园铃声软件 编辑:程序博客网 时间:2024/05/21 10:17
1、MyBatis中的动态SQL,实现不确定条件的CRUD的实现
将查询条件封装到map里面,通过 if 和 where 标签的使用,实现sql的动态性
2、动态SQL,实现不确定条件的查询
2.1 不确定条件查询的案列
2.2 不确定条件查询的实现
2.2.1 mapper接口
public interface UserMapper { // 动态查询用户 public List<User> findUserByIdDongTaiSql(Map<String, Object> map); }
2.2.2 mapper.xml <where> 和 <if> 标签的用法
<!-- 利用动态sql的查询 --> <select id="findUserByIdDongTaiSql" parameterType="map" resultType="user"> select * from user <where> <if test="id!=null"> and id = #{id} </if> <if test="username!=null"> and username like '%${username}%' </if> </where> </select>
2.2.3 测试代码
public class Mybatis_Four_Test { // 会话工厂 private SqlSessionFactory sqlSessionFactory; @Before public void createSqlSessionFactory() throws IOException { // 配置文件 String resource = "SqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); // 使用SqlSessionFactoryBuilder从xml配置文件中创建SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } // one list foreach @Test public void testfindAll() { // 获取session SqlSession session = sqlSessionFactory.openSession(); // 获取mapper接口的代理对象 UserMapper userMapper = session.getMapper(UserMapper.class); HashMap<String, Object> map = new HashMap<String, Object>(); map.put("id", 16); map.put("username", "小明"); List<User> users = userMapper.findUserByIdDongTaiSql(map); for (int i = 0; i < users.size(); i++) { System.out.println(users.get(i)); } // 关闭session session.close(); } }
3、动态SQL,实现不确定条件的更新
3.1 不确定条件更新的案列
3.2 不确定条件更新的实现
3.2.1 mapper接口
// 动态更新用户 public void updateUserDongTaiSql(Map<String, Object> map);
3.2.2 mapper.xml
<!-- 利用动态sql的更新 --> <update id="updateUserDongTaiSql" parameterType="map"> update user <!--set标签,会自动判断哪个是最后一个字段,并去除逗号 --> <set> <if test="id!=null"> username = #{username}, </if> <if test="username!=null"> address = #{address}, </if> </set> where id = #{id} </update>
3.2.3 测试代码
public void testupdateUserDongTaiSql() { // 获取session SqlSession session = sqlSessionFactory.openSession(); // 获取mapper接口的代理对象 UserMapper userMapper = session.getMapper(UserMapper.class); HashMap<String, Object> map = new HashMap<String, Object>(); map.put("id", 29); map.put("username", "张小三"); map.put("address", "浙江省"); userMapper.updateUserDongTaiSql(map); session.commit(); // 关闭session session.close();
4、动态SQL,实现不确定条件的删除
4.1 不确定条件删除的案列
4.2 不确定条件删除的实现
4.2.1 Array形式的实现
4.2.1.1 mapper接口
// 动态删除,Array的形式 public void deleteUserDongTaiSqlArray(int[] ids);
4.2.1.2 mapper.xml
<!--利用动态sql的删除 --> <!--根据User的id,删除用户 delete from user where id in(1,2,3) --> <!--Array的形式 --> <delete id="deleteUserDongTaiSqlArray" parameterType="map"> delete from user where id in <foreach collection="array" open="(" close=")" separator="," item="id"> #{id} </foreach> </delete>
4.2.1.3 测试代码
// 数组的形式 @Test public void testdeleteUserDongTaiSqlArray() { // 获取session SqlSession session = sqlSessionFactory.openSession(); // 获取mapper接口的代理对象 UserMapper userMapper = session.getMapper(UserMapper.class); int ids[] = { 26, 29 }; session.commit(); userMapper.deleteUserDongTaiSqlArray(ids); // 提交 session.commit(); // 关闭session session.close(); }
4.2.2 AList形式 的实现
4.2.2.1 mapper接口
// 动态删除用户,List的形式 public void deleteUserDongTaiSqlList(List<Integer> ids);
4.2.2.2 mapper.xml
<!--list的形式 --> <delete id="deleteUserDongTaiSqlList" parameterType="java.util.List"> delete from user where id in <foreach collection="list" open="(" close=")" separator="," item="id"> #{id} </foreach> </delete>
4.2.2.3 测试代码
// list的形式 @Test public void testdeleteUserDongTaiSqlList() { // 获取session SqlSession session = sqlSessionFactory.openSession(); // 获取mapper接口的代理对象 UserMapper userMapper = session.getMapper(UserMapper.class); List<Integer> list = Arrays.asList(34, 35, 36); userMapper.deleteUserDongTaiSqlList(list); session.commit(); // 关闭session session.close(); }
5、动态SQL,实现不确定条件的插入
5.1 不确定条件查询的案列
5.2 不确定条件查询的实现
5.2.1 mapper接口
// 动态插入用户 public void insertUserDongTaiSql(User user);
5.2.2 mapper.xml
<!-- sql片段,对应字段名称,id属性值任意 --> <sql id="key"> <trim suffixOverrides=","> <if test="username!=null"> username, </if> <if test="sex!=null"> sex, </if> </trim> </sql> <!-- sql片段,对用?,id属性值任意 --> <sql id="value"> <trim suffixOverrides=","> <if test="username!=null"> #{username}, </if> <if test="sex!=null"> #{sex}, </if> </trim> </sql> <!-- 动态sql的插入 --> <insert id="insertUserDongTaiSql" parameterType="user"> insert into user( <include refid="key" /> ) values( <include refid="value" /> ) </insert>
5.2.3 测试代码
public void testinsertUserDongTaiSqlList() { // 获取session SqlSession session = sqlSessionFactory.openSession(); // 获取mapper接口的代理对象 UserMapper userMapper = session.getMapper(UserMapper.class); User user = new User(); user.setAddress("广东釜山"); user.setSex("1"); user.setUsername("李小三"); userMapper.insertUserDongTaiSql(user); session.commit(); // 关闭session session.close(); }
- MyBatis中的动态SQL,实现不确定条件的CRUD-----使用Map来传递查询的参数
- mybatis实战之路,疯狂的数据库操作框架、动态sql实现CRUD及带条件的增CRUD
- mybatis动态查询不确定的表
- oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
- oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
- MyBatis动态SQL使用,传入参数Map中的Key判断
- MyBatis动态SQL使用,传入参数Map中的Key判断
- Mybatis 不确定条件查询(动态语句where和if)借助实体类封装参数
- oracle+mybatis 使用动态Sql在要insert的字段不确定的情况下实现批量insert
- mybatis的动态条件查询
- MyBatis动态语句及利用Map类来传递参数
- mybatis的多条件查询案例(动态sql)
- mybatis的动态CRUD
- 动态SQL文中where条件是IN,而导入的参数个数不确定的情况(亲自实践)
- Mybatis中查询的参数为Map条件中是in 数据组参数
- 多条件查询--使用dapper命令参数动态拼接出最安全的sql语句
- 基于mybatis的动态条件查询
- 使用criteria来实现动态的查询
- 简单工厂模式
- 入门动态规划问题
- Mysql查询语句正则匹配
- JAVA.io包,输入输出流整理
- mysql分组查询并只显示每组数据的前N条数据
- MyBatis中的动态SQL,实现不确定条件的CRUD-----使用Map来传递查询的参数
- Android菜鸟练习第二十五课 TweenedAnimation的基本使用
- spring-mybatis分页插件
- 【OI做题记录】【BZOJ】【SCOI2009】生日快乐
- 罗辑思维,古典:“超级个体” 观后随笔
- 输入输出重定向
- java 中关于数组,对象,字符串分别占多少字节的问题
- MFC笔记:主窗口与副窗口
- 文件包含