关于MyBatis各种SQL操作详解

 更新时间:2023年05月17日 11:32:33   作者:夏志121  
这篇文章主要介绍了关于MyBatis各种SQL操作详解,MyBatis 是一款优秀的半自动的ORM持久层框架,它支持自定义 SQL、存储过程以及高级映射,需要的朋友可以参考下

一、查询一个实体类对象

映射方法:User getUserById(@Param("id") int id);

映射文件:

<select id="getUserById" resultType="User">
    select * from t_user where id = #{id}
</select>

二、查询一个List集合

映射方法:List<User> getAllUser();

映射文件

<select id="getAllUser" resultType="User">
    select * from t_user
</select>

注意:当查询的数据为多条时,不能使用实体类作为返回值,否则会抛出异常 TooManyResultsException;但是若查询的数据只有一条,可以使用实体类或集合作为返回值

三、查询单个数据

映射方法:int getCount();

映射文件:

<select id="getCount" resultType="java.lang.Integer">
    select count(id) from t_user
</select>

四、查询一条数据及多条数据到map集合

查询一条数据到map集合

映射方法:Map<String,Object> getUserToMap(@Param("id") int id);

映射文件:

<select id="getUserToMap" resultType="java.util.Map">
    select * from t_user where id = #{id}
</select>

注意:将一条数据查询到map集合中时,map的键是表中的字段名,map的值是表中的数据

查询多条数据到map集合

方式一:

映射方法:List<Map<String,Object>> getAllUserToMap();

映射文件:

<select id="getAllUserToMap" resultType="java.util.Map">
    select * from t_user
</select>

方式二:

映射方法:

@MapKey("id") Map<String,Object> getAllUserToMap();

映射文件:

<select id="getAllUserToMap" resultType="java.util.Map">
    select * from t_user
</select>

注意:

  • 方式一中每条查出来的数据都对应一个Map集合,然后再利用List集合将这些Map集合 组织起来
  • 方式二中每条查出来的数据都存放在一个Map集合中,但是这个Map集合的键由映射方 法上方的@MapKey注解指定,而Map集合的值又是另外一个Map集合,作为值的Map 集合中键对应表中字段名,值对应表中数据

五、模糊查询

映射方法:List<User> getUserByLike(@Param("mohu") String mohu);

映射文件:

<select id="getUserByLike" resultType="User">
    <!--方式1-->
    select * from t_user where username like '%${mohu}%'
    <!--方式2-->
    select * from t_user where username like concat("%",#{mohu},"%")
    <!--方式3-->
    select * from t_user where username like "%"#{mohu}"%"
</select>

注意:不能使用 like '%#{mohu}%' 的方式,因为#{}会被解析成?,这个问号会被当成字符串的一 部分造成参数获取失败

六、批量删除

映射方法:void deleteSomeUser(@Param("ids") String ids);

映射文件:

<delete id="deleteSomeUser">
    delete from t_user where id in(${ids})
</delete>

注意:这里获取参数的方式是${},因为#{}会自动添加引号,如果使用#{}的方式会造成SQL语句解 析成 delete from t_user where id in('ids') 从而报错

七、动态设置表名

映射方法:List<User> getUserList(@Param("table") String table);

映射文件:

<select id="getUserList" resultType="User">
    select * from ${table}
</select>

注意:这里使用${}是因为使用#{}时会自动添加引号,而表名不允许添加表名

八、执行添加功能时获取自增的主键

映射方法:void insertUser(User user);

映射文件:

<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
    insert into t_user values(null,#{username},#{password},#{age},#
{gender},#{email})
</insert>

测试方法:

@Test
public void testInsertUser(){
    SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    SpecialSQLMapper mapper = sqlSession.getMapper(SpecialSQLMapper.class);
    User user = new User(null,"老六","1234567",36,"男","laoliu@qq.com");
    mapper.insertUser(user);
    System.out.println(user);//在这一步中打印出的User对象中可以看到自增的id,如果配置文件中不使    用useGeneratedKeys和keyProperty,则id仍然是null
    }

注意:这里的useGeneratedKeys设置使用自增主键为true,keyProperty是将获取的主键值赋给实体对象中的某个属性。这样,在添加这个实体对象后,自增的主键也能在实体对象中获得,而不需要进行查询

到此这篇关于关于MyBatis各种SQL操作详解的文章就介绍到这了,更多相关MyBatis的SQL操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中的 stop the world是什么呢

    Java中的 stop the world是什么呢

    这篇文章主要介绍了Java中的stop the world是什么呢,从字面上讲,就是停止这个世界,看到这个字眼,就觉得这是可怕的事情,那到底什么是stop-the-world,本文给大家详细讲解,感兴趣的朋友跟随小编一起看看吧
    2023-05-05
  • Spring IOC和aop的原理及实例详解

    Spring IOC和aop的原理及实例详解

    这篇文章主要介绍了Spring IOC和aop的原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • PowerJobAutoConfiguration自动配置源码流程解析

    PowerJobAutoConfiguration自动配置源码流程解析

    这篇文章主要为大家介绍了PowerJobAutoConfiguration自动配置源码流程解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Spring注解@Value在controller无法获取到值的解决

    Spring注解@Value在controller无法获取到值的解决

    这篇文章主要介绍了Spring注解@Value在controller无法获取到值的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • javac final变量未赋值检测案例讲解

    javac final变量未赋值检测案例讲解

    这篇文章主要介绍了javac final变量未赋值检测案例讲解,通过本文,我们可以知道Eclipse中报如下错误:The blank final field b may not have been
    initialized. 是在Flow阶段由AssignAnalyzer检测出来的,需要的朋友可以参考下
    2022-12-12
  • Spring @ComponentScan注解使用案例详细讲解

    Spring @ComponentScan注解使用案例详细讲解

    @ComponentScan注解的作用可以简述为:将项目中所有被@Component注解直接或者间接标记的类---->组装成BeanDefinition---->然后以key=beanName, value=BeanDefinition的形式存储,为后续生成bean对象做准备
    2023-03-03
  • JDK1.8中的ConcurrentHashMap使用及场景分析

    JDK1.8中的ConcurrentHashMap使用及场景分析

    这篇文章主要介绍了JDK1.8中的ConcurrentHashMap使用及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • SpringBoot源码剖析之属性文件加载原理

    SpringBoot源码剖析之属性文件加载原理

    这篇文章主要给大家介绍了关于SpringBoot源码剖析之属性文件加载原理的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-02-02
  • SpringBoot依赖及其作用分析

    SpringBoot依赖及其作用分析

    这篇文章主要介绍了SpringBoot依赖及其作用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • androidQ sd卡权限使用详解

    androidQ sd卡权限使用详解

    这篇文章主要介绍了androidQ sd卡权限使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06

最新评论