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

目录
相关文章
|
16天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
20天前
|
SQL 关系型数据库 MySQL
SQL中,可以使用 `ORDER BY` 子句来实现排序功能
【10月更文挑战第26天】SQL中,可以使用 `ORDER BY` 子句来实现排序功能
48 5
|
1月前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
33 10
|
2月前
|
SQL XML Java
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
22天前
|
SQL 关系型数据库 MySQL
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
33 0
|
22天前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
31 0
|
2月前
|
存储 关系型数据库 MySQL
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
覆盖索引、前缀索引、索引下推、SQL优化、EXISTS 和 IN 的区分、建议COUNT(*)或COUNT(1)、建议SELECT(字段)而不是SELECT(*)、LIMIT 1 对优化的影响、多使用COMMIT、主键设计、自增主键的缺点、淘宝订单号的主键设计、MySQL 8.0改造UUID为有序
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
|
2月前
|
SQL 运维 程序员
一个功能丰富的SQL审核查询平台
一个功能丰富的SQL审核查询平台
|
2月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
44 1
|
3月前
|
SQL 流计算
Flink SQL 在快手实践问题之Window TVF改进窗口聚合功能如何解决
Flink SQL 在快手实践问题之Window TVF改进窗口聚合功能如何解决
30 1