首页 > 数据库 >mybatis之特殊SQL的执行

mybatis之特殊SQL的执行

时间:2024-06-14 22:57:28浏览次数:13  
标签:mohu 特殊 List void tableName user SQL mybatis select

1.1模糊查询

尝试:

//模糊查询用户
List<User> getUserByLike(@Param("mohu") String mohu);

<select id="getUserByLike" resultType="user">
    select * from user where username like '%#{mohu}%'
</select>

@Test
public void testGetUserByLike(){
    List<User> users = mapper.getUserByLike("q");
    users.forEach(System.out::println);
}

结果:

Could not set parameters for mapping: ParameterMapping{property='mohu', mode=IN, javaType=class java.lang.Object, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}.

解决:

法1:看到上方报错结果没有单引号,所以采用$模式

select * from user where username like '%${mohu}%'

法2:concat是MySQL自己的语句,未来可移植性差

select * from user where username like concat ('%',#{mohu},'%')

法3:自己拼接(更常用)

select * from user where username like "%"#{mohu}"%"

 1.2批量删除

尝试:

/**
 * 批量删除
 * @param ids
 */
void delectMoreUser(@Param("ids") String ids);

<delete id="delectMoreUser">
    delete from user where id in(#{ids})
</delete>

@Test
public void testDelectMoreUser(){
    mapper.delectMoreUser("7,8");
}

结果:

解决:(使用$)

 delete from user where id in(${ids})

1.3动态设置表名

(1)写死动态表名进行测试

/**
 * 动态设置表名,查询表信息
 * @param tableName
 * @return
 */
List<User> getUserList(@Param("tableName") String tableName);

<select id="getUserList" resultType="user">
    select * from #{tableName}
</select>

@Test
public void testGetUserList(){
    List<User> users =  mapper.getUserList("user");
    users.forEach(System.out::println);
}

结果:

解决:

select * from ${tableName}

(2)改造成实现动态的写法

List<Object> getList(@Param("tableName") String tableName);

<select id="getList" resultType="object">
    select * from ${tableName}
</select>

@Test
public void testGetList(){
    List<Object> objects =  mapper.getList("user");
    objects.forEach(System.out::println);
}

结果:只显示了第一列id的内容

解决如下:

List<Map<String,Object>> getList(@Param("tableName") String tableName);

@Test
    public void testGetList(){
        List<Map<String,Object>> users = mapper.getList("user");
        users.forEach(System.out::println);
    }

1.4添加功能获取自增的主键

useGeneratedKeys:表示当前添加功能实用自增的主键

keyProperty:将添加的数据的自增主键作为试题类类型的属性赋值

/**
 * 添加用户信息并获取自增的主键
 * @param user
 */
void insertUser(User user);

<!--
    useGeneratedKeys:表示当前添加功能实用自增的主键
    keyProperty:将添加的数据的自增主键作为试题类类型的属性赋值
-->
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
    insert into user values(null,#{username},#{password},#{age},#{sex},#{email})
</insert>

public void testInsertUser(){
    User user = new User(null,"kk","1248",46,"男","[email protected]");
    mapper.insertUser(user);
    //插入完成后需要知道id值
    System.out.println(user);
}

最终数据添加成功

标签:mohu,特殊,List,void,tableName,user,SQL,mybatis,select
From: https://blog.csdn.net/2301_79659699/article/details/139687892

相关文章

  • 成为MySQL DBA后,再看ORACLE数据库(九、用户与权限)
    数据库的用户和权限的管理是DBA日常运维工作中的重要组成部分,不同数据库的用户权限体系及管理方式也会有差别,本文将对ORACLE的用户权限体系和常用操作进行一个总结。一、用户管理ORACLE中创建用户语句和mysql一样,不同的是mysql可以在用户后面加ip以实现ip层面的访问控制。在ORAC......
  • MySQL的连接工具navicat报argument out of range解决办法
    MySQL5.7.22查询时候报错argumentoutofrange报错代码原因sql_mode模式导致参考sql_mode默认配置showvariableslike'sql_mode';ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO......
  • 【SQL Server】SQL server复制表结构和复制表数据
    From: https://blog.csdn.net/qq_36636312/article/details/987623941,复制表结构select*into新表名称from旧表名称;1这个SQL语句可以将表的数据也复制过来注意:像主键,外键这种属性是无法复制过来的补充:当新表名称已经在数据库中存在的时候,使用此语句操作则会报错法2:也可以......
  • Java与数据库连接技术JDBC关键核心之PreparedStatement以及SQL注入演示解决和原理
    PreparedStatementSQL注入执行预编译的SQL对象这样也能登录成功模拟SQL注入是这个原因现在基本上不存在SQL注入的问题解决SQL注入就是传一些语句导致原来的SQL语句改变了修改代码通过设置参数的方式就能防止SQL注入实际上我们进行了一个转化将字符和关......
  • MySQL数据库管理
    目录1.MySQL数据库管理1.1常用的数据类型​编辑1.2char和varchar区别2.增删改查命令操作2.1查看数据库结构2.2SQL语言2.3创建及删除数据库和表2.4 管理表中的数据记录2.5修改表名和表结构3.MySQL的6大约束属性1.MySQL数据库管理1.1常用的数据类型1.2c......
  • 数据库SQL优化
    数据库SQL优化通常涉及以下方面:1.查询优化:确保使用正确的索引来优化查询。2.避免全表扫描:避免不必要的全表扫描,使用索引就是为了避免全表扫描。3.使用EXPLAIN分析查询:检查SQL查询的执行计划,判断sql语句存在的问题。4.使用JOIN代替子查询:适当情况下,使用JOIN来合并表。5.使用视......
  • springboot+vue+mybatis基于java的物资综合管理系统的设计与实现+PPT+论文+讲解+售后
    如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统物资综合管理系统信息管理难度大,容错率低,管理人员处理数据费工费时,所以专门为解决这个难题开发了一个物资综合管理系......
  • 数据库之SQL语法大全
    DISTINCTcolumn_name去除字段的重复WHERE条件筛选操作AND、OR用于where条件后的多条件连接如果第一个条件和第二个条件都成立,则用AND运算符连接这两个条件。如果第一个条件和第二个条件中只要有一个成立,则用OR运算符连接这两个条件。如:SELECT*FROMWebsitesWHER......
  • 数据库之理解SQL
    初识SQL结构化查询语言(StructuredQueryLanguage)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库管理系统(RelationalDatabaseManagementSystem:RDBMS)的语言,和我们所熟悉的Java、php、python等程序语言一样,也是......
  • 在 Microsoft SQL Server 2012 中,修改密码的方法与 SQL Server 2000 相比有所变化,但基
    在MicrosoftSQLServer2012中,修改密码的方法与SQLServer2000相比有所变化,但基本思路是相似的。以下是几种常见的方法:使用SQLServerManagementStudio(SSMS):这仍然是最常见和推荐的方法。通过打开SQLServerManagementStudio,连接到相应的SQLServer实例,然后......