MyBatis中的动态SQL,实现不确定条件的CRUD-----使用Map来传递查询的参数
2016-12-18 15:02
1081 查看
1、MyBatis中的动态SQL,实现不确定条件的CRUD的实现
将查询条件封装到map里面,通过 if 和 where 标签的使用,实现sql的动态性
2、动态SQL,实现不确定条件的查询
2.1 不确定条件查询的案列
2.2 不确定条件查询的实现
2.2.1 mapper接口
2.2.2 mapper.xml <where>
和 <if> 标签的用法
2.2.3 测试代码
3、动态SQL,实现不确定条件的更新
3.1 不确定条件更新的案列
3.2 不确定条件更新的实现
3.2.1 mapper接口
3.2.2 mapper.xml
3.2.3 测试代码
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();
}
将查询条件封装到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及带条件的增CRUD
- MyBatis动态SQL使用,传入参数Map中的Key判断
- Hibernate使用原生的动态sql实现带条件的查询分页功能
- 多条件查询--使用dapper命令参数动态拼接出最安全的sql语句
- 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
- MyBatis动态SQL使用,传入参数Map中的Key判断
- 使用ADF-BC 实现查询功能之四:通过代码动态设置Where条件参数
- 使用反射让linq实现动态查询, 类似拼接sql语句的where 条件
- oracle+mybatis 使用动态Sql在要insert的字段不确定的情况下实现批量insert
- oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
- 使用ADF-BC 实现查询功能之八:通过代码动态设置Criteria条件参数
- oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
- Mybatis 不确定条件查询(动态语句where和if)借助实体类封装参数
- 使用反射让linq实现动态查询, 类似拼接sql语句的where 条件
- MyBatis动态SQL使用,传入参数Map中的Key判断
- mybatis 传递多个参数 --解决mybatis查询使用多个参数方法--javabean传统方法和map方法
- MyBatis动态SQL使用,传入参数Map中的Key判断
- oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
- MyBatis动态SQL使用,传入参数Map中的Key判断
- oracle+mybatis 使用动态Sql在要insert的字段不确定的情况下实现批量insert