Mybatis基础(下)

67 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情

Mybatis查询功能

将单行数组存入map中

接口

Map<String,Object> getUserByIdToMap(@Param("id") int id);

配置文件

<select id="getUserByIdToMap" resultType="map">
    select * from t_user where id=#{id}
</select>

实现

public void getUserByIdToMap(){
    SqlSession sqlSession = SqlSeesionUtils.getSqlSession();
    SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    Map<String, Object> map = mapper.getUserByIdToMap(2);
    System.out.println(map);
}

将多行数组存入map中

由于是多个map并不能放到一个map中,所以这里用的是list

接口

List<Map<String ,Object>> getAllUser();

但除此外,Map可以通过@MapKey来存储键值,从而完成map中存储多条数据

@MapKey("id")
Map<String ,Object> getAllUser();

执行特殊SQL语句

模糊查询

用like关键字实现模糊查询

接口

List<User> getAllUserBySpecial(@Param("mohu") String mohu);

配置文件

有以下三种查询方式:

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

实现

这里以模糊查询username带字母"n"的为例

@Test
public void getAllUserBySpecial(){
    SqlSession sqlSession = SqlSeesionUtils.getSqlSession();
    SpecialSqlMapper mapper = sqlSession.getMapper(SpecialSqlMapper.class);
    List<User> name = mapper.getAllUserBySpecial("n");
    name.forEach(System.out::println);
}

批量删除

接口

int deleteMore(@Param("ids") String ids);
#也可以用between and 的方式,但这种方式需要两个参数start,end
int deleteMore(@Param("ids") String ids,@Param("ide")String ide);

配置文件

delete from t_user where id in (${ids})
#between
delete from t_user where id between ${ids} and ${ide}

实现

public void deleteMore(){
    SqlSession sqlSession = SqlSeesionUtils.getSqlSession();
    SpecialSqlMapper mapper = sqlSession.getMapper(SpecialSqlMapper.class);
    mapper.deleteMore("5,6");
    #mapper.deleteMore("5","6"); #between方式 
}

动态设置表名

接口

List<User> changeTableName(@Param("tablename") String tablename);

配置文件

<select id="changeTableName" resultType="User">
    select * from ${tablename}
</select>

实现

public void changeTableName(){
    SqlSession sqlSession = SqlSeesionUtils.getSqlSession();
    SpecialSqlMapper mapper = sqlSession.getMapper(SpecialSqlMapper.class);
    List<User> list = mapper.changeTableName("t_user");
    list.forEach(System.out::println);
}

获取自增的主键

这种方式主要建立于主键自增的基础上,可以通过mybatis语句,获取自增后的属性值

接口

void insertUser(User user);

配置文件

  • useGeneratedKeys:表示当前添加功能使用自增的主键
  • keyProperty:将添加的数据的自增主键为实体类类型的参数赋值
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
    insert into t_user values(null,#{username},#{password},#{age},#{gender},#{email})
</insert>

实现

public void insertUser(){
    SqlSession sqlSession = SqlSeesionUtils.getSqlSession();
    SpecialSqlMapper mapper = sqlSession.getMapper(SpecialSqlMapper.class);
    User user = new User(null, "xxx", "123456", 20, "男", "123456@qq.com");
    mapper.insertUser(user);
    System.out.println(user);
}

未设置时:

image-20220905093718701.png 设置后:

image-20220905093743259.png