动态sql拼接
MyBatis框架的动态sql技术是一种根据特定条件动态拼接SQL语句的功能,主要用于解决拼接sql语句字符串时的痛点问题.如在使用购物网站时对商品属性进行筛选,因为商品属性有多重条件,并且可以对多条件进行灵活选择,如果使用传统的方式查询,在拼接sql的时候会造成一系列的问题.
if标签(常用于sql语句条件判断)
- 在UserMapper.xml配置文件下添加.
- 注意:在查询中 select标签下必须添加resultType="实体类路径".
if标签介绍
如果条件成立就附加<if></if>之间的[sql语句],如果条件不成立就不附加<if></if>之间的sql语句。书写格式为:<if test="表达式">sql语句</if>
复制代码
<select id="selectByMoney" resultType="demo01.entity.User">
select * from t_user
<where>
<if test="money != null and money != '' ">
and money>1000
</if>
</where>
</select>
复制代码
foreach标签
foreach介绍
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。
foreach元素的属性主要有item,index,open,separator,close。
复制代码
- item表示中每一个元素进行迭代时的别名.
- index指定一个名字,用于表示在迭代过程中,每次迭代到的位置.
- open表示该语句以什么开始.
- separator表示在每次进行迭代之间以什么符号作为分隔符.
- close表示以什么结束.
<select id="selectByUserIDs" resultType="demo01.entity.User">
select * from t_user
<where>
<foreach collection="ids" open="and id in (" item="id" separator="," close=")">
#{id}
</foreach>
</where>
</select>
复制代码
sql标签(简化sql语句重复编写问题)
mybatis的`<sql>` 标签一般是用来封装sql语句、或者复用语句的,然后用`<include>`标签来调用
复制代码
<sql id="sql_temp">
select id ,user_name, passwd, money from t_user
</sql>
复制代码
<select id="login" resultType="demo01.entity.User">
<include refid="sql_temp"></include> where user_name=#{userName} and passwd=#{passwd}
</select>
复制代码
构造器
1.QueryWrapper
继承了AbstractWrapper ,自身属性内的entity实体类可作为where条件,可以通过 new QueryWrapper().lambda() 方法获取到 LambdaQueryWrapper
实例化抽象类接口UserDao
@Autowired(required = false)
private UserDao dao;
复制代码
条件查询
/**
* 条件查询
* @return
*/
@RequestMapping("/hhhhh")
public List<User> t1(){
// 创建条件构造器对象
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// select * from t_user user_name='111'
queryWrapper.eq("user_name","Lily");
// select * from t_user where user_name='Lily' and money between 0 and 70
queryWrapper.between("money",0,70);
// 调用MyBatis自带的查询方法
List<User> users = dao.selectList(queryWrapper);
return users;
}
复制代码
模糊查询
/**
* 模糊查询
* @return
*/
@RequestMapping("/selectLike")
public List<User> nameLike(){
// 创建构造器对象
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 模糊查询 like为整体模糊查询 likeleft左模糊
queryWrapper.like("user_name","L");
List<User> list = dao.selectList(queryWrapper);
return list;
}
复制代码
排序
/**
* asc升序
* @return
*/
@RequestMapping("/orderByMoney")
public List<User> order(){
// 创建条件构造器对象
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
// select * from t_user order by money asc
queryWrapper.orderByAsc("money"); // 按money升序
List<User> list = dao.selectList(queryWrapper);
return list;
}
复制代码
子查询
/**
* 子查询
* @return
*/
@RequestMapping("/inSqlDemo")
public List<User> selectByChild(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.inSql("id","select id from t_user where money between 100 and 2000");
List<User> list = dao.selectList(queryWrapper);
return list;
}
复制代码
2.UpdateWrapper
继承了AbstractWrapper ,自身属性内的entity实体类可作为where条件,可以通过 new UpdateWrapper().lambda() 方法获取到 LambdaQueryWrapper
作者:一舟_
链接:juejin.cn/post/716648…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。