MyBatis各种SQL操作及执行添加功能获取自增的主键

简介: MyBatis各种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是将获取的主键值赋给实体对象中的某个属性。这样,在添加这个实体对象后,自增的主键也能在实体对象中获得,而不需要进行查询

目录
相关文章
|
8月前
|
SQL
SQL如何在CTE中使用Order By的功能
SQL Server如何在CTE中使用Order By的功能
|
12月前
|
SQL Java 数据库连接
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
|
7月前
|
SQL XML Java
通过MyBatis的XML配置实现灵活的动态SQL查询
总结而言,通过MyBatis的XML配置实现灵活的动态SQL查询,可以让开发者以声明式的方式构建SQL语句,既保证了SQL操作的灵活性,又简化了代码的复杂度。这种方式可以显著提高数据库操作的效率和代码的可维护性。
445 18
|
11月前
|
SQL Java 数据库连接
MyBatis动态SQL字符串空值判断,这个细节99%的程序员都踩过坑!
本文深入探讨了MyBatis动态SQL中字符串参数判空的常见问题。通过具体案例分析,对比了`name != null and name != &#39;&#39;`与`name != null and name != &#39; &#39;`两种写法的差异,指出后者可能引发逻辑混乱。为避免此类问题,建议在后端对参数进行预处理(如trim去空格),简化MyBatis判断逻辑,提升代码健壮性与可维护性。细节决定成败,严谨处理参数判空是写出高质量代码的关键。
1473 0
|
7月前
|
SQL Java 数据库连接
SSM相关问题-1--#{}和${}有什么区别吗?--Mybatis都有哪些动态sql?能简述一下动 态sql的执行原理吗?--Spring支持的几种bean的作用域 Scope
在MyBatis中,`#{}`是预处理占位符,可防止SQL注入,适用于大多数参数传递场景;而`${}`是直接字符串替换,不安全,仅用于动态表名、列名等特殊场景。二者在安全性、性能及使用场景上有显著区别。
228 0
|
10月前
|
SQL Java 数据安全/隐私保护
发现问题:Mybatis-plus的分页总数为0,分页功能失效,以及多租户插件的使用。
总的来说,使用 Mybatis-plus 确实可以极大地方便我们的开发,但也需要我们理解其工作原理,掌握如何合适地使用各种插件。分页插件和多租户插件是其中典型,它们的运用可以让我们的代码更为简洁、高效,理解和掌握好它们的用法对我们的开发过程有着极其重要的意义。
930 15
|
10月前
|
SQL XML Java
菜鸟之路Day35一一Mybatis之XML映射与动态SQL
本文介绍了MyBatis框架中XML映射与动态SQL的使用方法,作者通过实例详细解析了XML映射文件的配置规范,包括namespace、id和resultType的设置。文章还对比了注解与XML映射的优缺点,强调复杂SQL更适合XML方式。在动态SQL部分,重点讲解了`&lt;if&gt;`、`&lt;where&gt;`、`&lt;set&gt;`、`&lt;foreach&gt;`等标签的应用场景,如条件查询、动态更新和批量删除,并通过代码示例展示了其灵活性与实用性。最后,通过`&lt;sql&gt;`和`&lt;include&gt;`实现代码复用,优化维护效率。
989 5
|
12月前
|
SQL Java 数据库连接
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
|
SQL 分布式计算 资源调度
Dataphin功能Tips系列(48)-如何根据Hive SQL/Spark SQL的任务优先级指定YARN资源队列
如何根据Hive SQL/Spark SQL的任务优先级指定YARN资源队列
450 4
|
SQL 缓存 Java
框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性
本文详细解构了MyBatis的工作机制,包括解析配置、创建连接、执行SQL、结果封装和关闭连接等步骤。文章还介绍了MyBatis的五大核心功能特性:支持动态SQL、缓存机制(一级和二级缓存)、插件扩展、延迟加载和SQL注解,帮助读者深入了解其高效灵活的设计理念。