mybatis sql 实用

1.动态sql

<!--
        Mybatis:动态sql语法 根据业务条件,动态拼接Sql
        语法:
              1. if标签: 如果判断为真 则拼接sql
              2. where标签: 去除where后边多余1个and/or
    -->
    <select id="findUser" resultType="User">
        select * from demo_user
            <where>
                <if test="id !=null">id = #{id}</if>
                <if test="name !=null">and name = #{name}</if>
                <if test="age !=null">and age = #{age}</if>
                <if test="sex !=null">and sex = #{sex}</if>
            </where>
    </select>
	
	<!--
        使用动态sql:根据对象中不为null的属性当做set条件
        标签说明: set标签在修改操作中去除1个多余的,-->
    <update id="updateUser">
        update demo_user
            <set>
                <if test="name !=null">name=#{name},</if>
                <if test="age !=null">age=#{age},</if>
                <if test="sex !=null">sex=#{sex}</if>
            </set>
            where id=#{id}
    </update>
	
	
	<!-- 说明: 如果不想使用所有的条件可以使用choose 类似于java中的switch 语法
		 如果name有值,则按照name查询, if
		 如果age有值,则按照age查询, else-if
		 否则按照sex查询数据. else 
	-->
    <select id="findUserChoose" resultType="User">
        select * from demo_user where
            <choose>
                <when test="name !=null">name=#{name}</when>
                <when test="age  !=null">age=#{age}</when>
                <otherwise>sex = #{sex}</otherwise>
            </choose>
    </select>

2.查询今天,昨天,近七天,本月,上月的记录

	1、查询今天的所有记录:
	select * from visitors where to_days(createtime) = to_days(now());  

	2、查询昨天的所有记录
	select * from visitors where to_days(now()) = 1 + to_days(createtime);

	3、近7天的信息记录:
	select * from visitors where date_sub(curdate(), INTERVAL 7 DAY) < date(createtime);

	4、近30天的信息记录:
	select * from visitors where date_sub(curdate(), INTERVAL 30 DAY) < date(createtime);

	5、查询本月的记录:
	select * from visitors where date_format(createtime, '%Y%m') = date_format(curdate() , '%Y%m');

	6、上一个月的记录:
	select * from visitors where period_diff(date_format(now() , '%Y%m') , date_format(createtime, '%Y%m')) =1;

3.排序

	sql:select *  from tablename  order by filename1 desc;
	解释:意思是根据”filename1字段“排序,倒叙输出tablename表中的数据。
	备注:asc是表示升序,desc表示降序
	
	//先按照sort排序,再按照createtime排序
	Order  by sort  desc ,createtime desc 

4.去重

	//distinct:去重
	select distinct tel from visitors  where c_id=2
	
	select * ,count(distinct tel)  from visitors  where c_id=2  group by tel

5.case when 用法

	//根据quarters分组,查询reasons为学生的记录分别有多少条:
	select c.quarters,sum(case when v.reasons="学生" then 1 else 0 end)
		from visitors v left join h_community c on v.c_id=c.id  group by c.quarters
	update  employee
    set    e_wage =
    case
    when   job_level = '1'    then e_wage*1.97
    when   job_level = '2'   then e_wage*1.07
    when   job_level = '3'   then e_wage*1.06
    else     e_wage*1.05
    end

6.mybatis中大于小于等于

	大于:&gt;
	小于:&lt;
	大于等于:&gt;=
	小于等于:&lt;=

7.指定查询(第几条开始,查询多少行) limit

	//学生是重庆的前五条数据,0:从第一条开始(不包括0),5:5条数据
	select * from student where region="重庆"  limit 0 , 5

8.mysql字段内容后添加数据

	//mysql字段内容后添加数据
	UPDATE USER SET username= CONCAT(username,',xxx')  WHERE id= 1

效果图:
在这里插入图片描述

9.mysql新增一条数据后返回主键id

	/**
	 * parameterType:对应实体类
	 * useGeneratedKeys="true"属性设置该insert语句返回主键值 
	 * keyProperty:实体类对应的id
	 * keyColumn:数据库对应的主键id
	 */
	<insert id="aaa"  parameterType="User" useGeneratedKeys="true"  keyProperty="uId"  keyColumn="u_id">
        insert into user(name,tel,sex)  value(#{name},#{tel},#{sex}) 
    </insert>

10.查询id=1,2,3,4的数据

List集合方法:
controller层

    @RequestMapping("/tsetin")
    public List<User> findUserByIn(){
        Integer[] array = {1,2,3,4};
        List<User> list = userMapper.findUserByIn(array);
        return list;
    }

mapper层

List<User> findUserByIn(Integer[] array);

xml文件

<!--
        Mybatis集合操作
            1."集合"的类型: array/list/Map集合
            2. 目的:从集合中获取其中的数据. 一个一个取值
            3. 方案: Mybatis提供了循环遍历的方式
            4. 语法:
                    4.1collection需要遍历的数据
                        数组:     collection="array"
                        List集合: collection="list"
                        Map<key,array/list>集合:  collection="map中的key"
                    4.2 open/close  开始和接收标签
                    4.3 item: 定义取值的变量  通过#{xx}获取数据
                    4.4 separator: 分割符
    -->
    <select id="findUserByIn" resultType="User">
        select * from user where id in
        <foreach collection="array" open="(" close=")"
                 item="id" separator=",">
            #{id}
        </foreach>
    </select>

Map集合方法:
controller层

@RequestMapping("/tsetmap")
    public List<User> findUserByInMap(){
        Integer[] array = {1,2,3,4};
        Map map = new HashMap();
        map.put("ids",array);
        List<User> list = userMapper.findUserByInMap(map);
        return list;
    }

mapper层

 List<User> findUserByInMap(Map map);

xml文件

<!--Map数据封装array集合的写法 -->
    <select id="findUserByInMap" resultType="User">
        select * from user where id in (
        <foreach collection="ids" item="id" separator=",">
            #{id}
        </foreach>
        )
    </select>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值