首页 > 数据库 >Mybatis08 - 特殊SQL

Mybatis08 - 特殊SQL

时间:2023-02-13 21:11:33浏览次数:46  
标签:mohu 自增 特殊 String 主键 user Mybatis08 SQL id

模糊查询,不确定结果数量

使用 List <实体类>

public interface SpecialSQLMapper {
    //通过用户名模糊查询用户信息
    List<User> getUserByLike(@Param("mohu") String mohu);
}

映射文件

<mapper namespace="com.zzz.mybatis.mapper.SpecialSQLMapper">

    <!--List<User> getUserByLike(@Param("mohu") String mohu);-->
    <select id="getUserByLike" resultType="User">
        <!--select * from t_user where username like '%${mohu}%'-->
        <!--select * from t_user where username like concat('%',#{mohu},'%')-->
        select * from t_user where username like "%"#{mohu}"%"
    </select>
</mapper>

模糊查询 %?% 字符串拼接的三种方法

  • '%${mohu}%' 因为 ${xxx} = +'xxx'+,使用的就是字符串拼接
  • concat('%',#{mohu},'%'),#{xxx} = 'xxx',需要使用 concat方法手动拼接字符串
  • "%"#{mohu}"%",使用最多的一种方法,"%"#{xxx}"%" = %xxx%

批量删除

void deleteMoreUser(@Param("ids") String ids);

传入的 String类型的参数格式为 3,5 ,即删除记录3至记录5的三条记录

'3,5' 作为 String参数传入,使用 #{ids},直接作为占位符的值传入,则不会读取3和5,而是JDBC中的占位符 ? 直接替换为 '3,5'

SQL语句:报错

  • DELETE FROM t_user WHERE id in('3,5');
    

解决方法:使用 ${ids} String SQL = 'DELETE FROM t_user WHERE id in(' + '3,5' +');'

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

动态设置表名

表名不能使用 't_user',因此不能使用 #{tablename} 传值

SELECT * FROM ? WHERE age > 25;  ---> SELECT * FROM 't_user' WHERE age > 25; 报错

而是只能用 ${t_user} 传值,${t_user} = +'t_user' +

String SQL = 'SELECT * FROM ' + 't_user' + ' WHERE age > 25;'

添加记录时获取自增主键

场景模拟:
t_clazz(clazz_id,clazz_name)
t_student(student_id,student_name,clazz_id)
1、添加班级信息
2、获取新添加的班级的id
3、为班级分配学生,即将某学的班级id修改为新添加的班级的id

/**
* 添加用户信息
* @param user
* @return
* useGeneratedKeys:设置使用自增的主键
* keyProperty:因为增删改有统一的返回值是受影响的行数,因此只能将获取的自增的主键放在传输的参
数user对象的某个属性中
*/
int insertUser(User user);

JDBC 中封装有获取添加记录的自增主键的方法 .getGeneratedKeys()

Mybatis 封装JDBC,直接可以在映射文件中添加属性:

  • useGeneratedKeys="true" 是否使用自增主键:是

  • keyProperty="id" 结果返回实体类对象,将返回的自增主键存储到对象的指定属性中 -- 一般使用表的自增字段名

<!--int insertUser(User user);-->
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
	insert into t_user values(null,#{username},#{password},#{age},#{sex})
</insert>

测试

@Test
public void testInsertUser(){
    SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = new User(null, "aaa", "123456", 23, "男", "[email protected]");
    Integer integer = mapper.insertUser(user);

    //返回影响的行数
    System.out.println(integer);
    //执行插入语句后,user中的id字段接受到返回的自增主键值
    //User{id=7, username=......}
    System.out.println(user);
}

标签:mohu,自增,特殊,String,主键,user,Mybatis08,SQL,id
From: https://www.cnblogs.com/Ashen-/p/17117810.html

相关文章

  • SQL 快速入门
    1.Sql:跟关联式资料库管理系统(用表格做关联)沟通的语言2.KeyPrimarykey主键:唯一的表示每一笔资料(某一属性无法唯一的表示时,可以设定2个或两个以上的主键,不能为NUALL)......
  • sql 记录
    --查询‘张老师’教师,代课总课时的sql语句。selectSUM(courseHour)fromteachert,Timetablet2,coursecwheret.id=t2.teacherandc.id=t2.courseandt.namelike......
  • node mysql 增删改查 demo
    前端原生jsJquery后端Node数据库MySQL​​​http://hongbin.xyz:8080/​​​​github仓库​​​​演示视频地址​​node增删改查TODO:删除用户数据库需要触发器将......
  • 关于我忘记MySQL root 密码那件事
    登录MySQL时,忘记密码,百度一番找到合适的方法问题已解决,记录一下。该篇文章仅做学习用,方便自己下次查找。1、先把MySQL的服务为停了,可以直接按win键搜服务,找到MySQL服务,......
  • mysql查询语句case及时间操作
    1、获取系统当前时间戳SELECT unix_timestamp(now())*1000 --乘以1000,为了得到毫秒时间戳   2、时间戳转年月日SELECTFROM_UNIXTIME(1676280033000/1000,......
  • python 特殊方法
    ##跟运算符无关的特殊方法###1.实例的创建和销毁__init__解释:构造方法,可调用超类的构造器。这是实例级别的方法,发生在实例创建之后,用于初始化实例,给实例添加一些属性和......
  • sql中 exists的用法
    现有:班级表(A_CLASS) 学生表(STUDENT)注:学生表(STUDENT)的classId关联班级表(A_CLASS)的主键ID  代码:select*fromSTUDENTsWHEREexists(select1fromA_ClA......
  • mysql怎么删除重复数据并且保留其中一条
    现在有张加班表,一个人同一天只允许申请一次加班,就是加班日期和userid相同的数据应该只有一条,但是现在由于之前没有做限制,导致很多数据重复怎么通过sql删掉重复数据思路:......
  • SQL执行慢的原因分析以及调优手段
    目录开发规范※谨慎使用MySQL分区表※经常一起使用的列放到一个表中※禁止在数据库中存储文件(比如图片)这类大的二进制数据所有表必须使用InnoDB存储引擎数据库和表的字......
  • 【Oculus Interaction SDK】(八)特殊的 UI(曲面效果 & 手指点击)
    前言这篇文章是【OculusInteractionSDK】系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言。如果文章的内容已经不适用于新版本了,也可以......