首页 > 数据库 >尚硅谷MyBatis9_特殊sql的执行

尚硅谷MyBatis9_特殊sql的执行

时间:2023-03-20 21:12:30浏览次数:40  
标签:username MyBatis9 添加 user sql 硅谷 where id

模糊查询

在进行模糊查询的时候,如果使用 #{},那么得到的 sql 语句就会拼接错误。比如:

select * from t_user where username like '%#{username}%'

执行 sql 语句转换后会变成:

select * from t_user where username like '%?%'

也就是说使用 #{} 之后,它被当成匹配的字符串的一部分了。也就是说模糊查询不要使用 #{}#{} 会自动添加上单引号。

那么怎么做模糊查询才对呢?

  • 使用 ${},比如:

    select * from t_user where username like '%${username}%'
    
  • 使用拼接函数 +#{}

    <select id="getUserByLike" resultType="User">
        select *
        from t_user
        where username like concat('%', #{username}, '%')
    </select>
    

    但是这里两个百分号之间的单引号是怎么取消的没听懂

批量删除

由于 #{} 会自动添加上单引号,所以无法转换成正确的 sql 语句,需要使用 ${} 才可以正确使用

<!--int deleteMore(@Param("ids") String ids);-->
<delete id="deleteMore">
    delete
    from t_user
    where id in (${ids})
</delete>

动态设置表名

使用 @Param() 指定表名,用 ${} 获取,因为这个不会添加单引号

<!--List<User> getAllUser(@Param("tableName") String tableName);-->
<select id="getAllUser" resultType="User">
    select *
    from ${tableName}
</select>

添加功能获取自增的主键

t_clazz(clazz_id,clazz_name)

t_student(student_id,student_name,clazz_id) ​

  1. 添加班级信息
  2. 获取新添加的班级的 id
  3. 为班级分配学生,即将某学的班级 id 修改为新添加的班级的 id
<!--int insertUser(User user);-->
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
    insert into t_user
    values (null, #{username}, #{password}, #{age}, #{sex}, #{email})
</insert>

注意,我们在创建对象的时候并没有提供 id,当进行添加操作之后,就会将自增得到的 id 添加进 user 对象中。

  • useGeneratedKeys:设置当前标签中的 sql 语句使用了自增的主键
  • keyProperty:将自增的主键值赋给「参数的提供者」,这里的提供者是 User 类的实例

增删改具有固定的返回值,即改变的行数,所以并不能通过返回值的方式得到主键。只能将自增的主键作为对象的某一个属性值

@Test
public void testAdd() {
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    SQLMapper mapper = sqlSession.getMapper(SQLMapper.class);
    User user = new User(null, "nihao", "123456", 66, "男", "[email protected]");
    int i = mapper.insertUser(user);
    System.out.println(user.getId());
}
---
6

标签:username,MyBatis9,添加,user,sql,硅谷,where,id
From: https://www.cnblogs.com/ShaunY/p/17237809.html

相关文章

  • 整合SSH的时候显示SQL配置
    applicationContext.xml-------------------------------<propertyname="hibernateProperties"><props><propkey="hibernate.dialect"......
  • SQL语句查询
    MySQL  SELECT使用“*”查询表的所有字段SELECT可以使用“*”查找表中所有字段的数据,语法格式如下:SELECT*FROM表名;查询表中的某一个字段的语法格式为:SELECT<......
  • Android Studio通过jdbc连接MySQL
    1、下载MySQL-connector-jave.jar包地址如下:https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.46 2、将jar包移到如图所示的位置,然后右键addasl......
  • mysql索引、优化、sql性能分析
    为什么InnoDB存储引擎选择使用B+tree索引结构?相对于二叉树,层级更少,搜索效率高对于B-tree,无论是叶子节点还是非叶子节点,都会保存数据,这样导致一页中存储的键值减少,指针......
  • 软件工程日报——SQL语句查询不能应用在jsp文件
    今天上课我们在课堂上讲解了如何搞对象,然后再后两节课我和我的伙伴进行了对地铁系统中初始站台和终点站台查询功能的研究。在这个过程中,我们发现一个问题:能够实现web页面查......
  • mybatis 功能 beetl 实现 beetlsql
    beetlsql是使用beetl来完成mybatis功能。同时具有Hibernate优点&Mybatis优点功能,适用于承认以SQL为中心,同时又需求工具能自动能生成大量常用的SQL的应用。S......
  • 尚硅谷MyBatis8_各种查询功能
    查询一个实体类对象查询出的数据只有一条,可以通过「实体类对象」or「集合」or「map」接收/***根据用户id查询用户信息*@paramid*@return*/UsergetUserById(@Pa......
  • PostgreSQL的递归查询(with recursive)
    [color=red][b]示例[/b][/color]withRECURSIVEcteas(selecta.*fromtb_sm_moduleawheremodule_id=0unionallselectk.*fromtb_sm_mod......
  • Oracle/Mysql/SqlServer 常用函数区别
    1.类型转换   --Oracle  select to_number('123') from dual;  --123;   select to_char(33) from dual;       --33;  select to_date('......
  • postgresql 分组取前5条记录
    select*from(selectid,name,state,amount_total,row_number()over(partitionbystateorderbyamount_total)asrow_numfromsale_order)asa......