模糊查询,不确定结果数量
使用 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