SpringBoot实现Mybaits全注解开发,省略xml文件,开发更高效

package com.demo.dao;

import com.demo.bean.User;
import org.apache.ibatis.annotations.*;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.jdbc.core.SqlProvider;
import org.springframework.stereotype.Repository;
import sun.security.krb5.internal.PAForUserEnc;

import java.util.List;
import java.util.Map;

/**
 * 全注解开发Mybatis,省略mapper.xml配置文件,开发更高效
 *在properties中添加以下配置,在执行查询后,可以将数据库的NN_NN格式字段,在java结果集对象中自动转换成驼峰命名参数
 * mybatis.configuration.mapUnderscoreToCamelCase=true
 * @Repository :声明这是一个持久层的接口实例
 * @Param:在方法参数的前面写上@Param("参数名"),表示给参数命名,名称就是括号中的内容,#{}取的就是它
 */

@Repository
public interface UserDao{

    /**
     * 添加
     * @param user
     */
    @Insert("insert into user(name,age) values (#{name},#{age})")
    @Options(useGeneratedKeys = true)
    public void insert(User user);

    /**
     * 查询
     * @param id
     * @return
     */
    @Select("select * from user where id = #{id}")
    public User findById(Integer id);

    /**
     * 更新
     * @param name
     * @param id
     */
    @Update("update user set name = #{name} where id #{id}")
    public void update(@Param("name")String name,@Param("id")Integer id);

    /**
     * 动态sql查询
     * @SelectProvider注解用于生成查询用的sql语句,有别于@Select注解,@SelectProvide指定一个Class及其方法,并且通过调用Class上的这个方法来获得sql语句
     * @param index
     * @param offset
     * @param age
     * @return
     */
    @SelectProvider(type =SqlProvider.class,method = "getList")
    public List<User> getPage(@Param("index")int index,@Param("offset")int offset,@Param("age")Integer age);

    /**
     * 动态sql生成的内部类
     */
    class SqlProvider{
        public static String getList(Map<String,Object> map){
            StringBuffer sql =new StringBuffer();
            Integer index =Integer.valueOf(map.get("index").toString());
            Integer offset =Integer.valueOf(map.get("offset").toString());
            Integer age =Integer.valueOf(map.get("age").toString());

            sql.append(" select * from user where 1=1 ");
            if (age.intValue() != 0){
                sql.append(" and age ="+age+" ");
            }
            sql.append(" limit "+index+" , "+offset);
            return sql.toString();
        }

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值