Dos formas de que MyBatis obtenga los valores de los parámetros: #{} y ${}

#{}${}diferencia con

  • #{}La esencia es la asignación de marcador de posición, ${}la esencia es la concatenación de cadenas

  • ${}Use el empalme de cadenas para empalmar sql, si asigna un valor a un tipo de cadena o campo de tipo de fecha, debe agregar manualmente comillas simples

  • #{}Use la asignación de marcador de posición para empalmar sql. Al asignar un valor a un campo de tipo de cadena o tipo de fecha, puede agregar automáticamente comillas simples

Cómo usar ${}y #{}obtener valores de parámetros

Obtener un parámetro de un solo tipo literal

  • En este momento, puede usar #{}y ${}obtener el valor del parámetro con cualquier nombre (es mejor ver el nombre), tenga en cuenta que ${}debe agregar manualmente comillas simples

  • Escriba la interfaz del mapeador:

public class UserMapper {
    //通过id查询用户信息
    User getUserById(Integer id);
}
复制代码
  • Escriba el archivo de mapeo:
<select id="getUserById" resultType="com.mybatis.pojo.User">
    SELECT * FROM user WHERE `id` = #{id}
</select>
复制代码

o

<select id="getUserById" resultType="com.mybatis.pojo.User">
    SELECT * FROM user WHERE id = '${id}'
</select>
复制代码

Parámetros de varios tipos de literales

  • Si hay varios parámetros de método en la interfaz del mapeador, MyBatis colocará automáticamente estos parámetros en una colección de mapas

    1. Tome arg0, arg1... como claves y parámetros como valores;
    2. Tome param1, param2... como clave y el parámetro como valor;
  • Por lo tanto, solo necesita pasar ${}y #{}acceder a la clave de la colección de mapas para obtener el valor correspondiente. Tenga en cuenta que ${}debe agregar manualmente comillas simples.

  • Puede usar arg o param. Cabe señalar que arg comienza desde arg0 y param comienza desde param1

  • Escriba la interfaz del mapeador:

public class UserMapper {
    //通过姓名和年龄查询用户信息
    User getUserByNameAndAge(String name, Integer age);
}
复制代码
  • Escriba el archivo de mapeo:
<select id="getUserByNameAndAge" resultType="com.mybatis.pojo.User"> 
    SELECT * FROM user WHERE name = #{arg0} AND age = #{arg1}  
</select>
复制代码

o

<!--User checkLogin(String username,String password);-->
<select id="getUserByNameAndAge" resultType="com.mybatis.pojo.User">
    SELECT * FROM user WHERE name = '${param1}' AND age = '${param2}'
</select>
复制代码

Parámetros del tipo de colección de mapas

  • Si el método en la interfaz del mapeador requiere más de un parámetro, puede crear manualmente una colección de mapas en este momento. Para poner estos datos en el mapa, solo necesita pasar ${}y #{}acceder a la clave de la colección de mapas para obtener el valor correspondiente. Tenga en cuenta que ${}debe agregar manualmente el apóstrofe

  • Escriba la interfaz del mapeador:

public class UserMapper {
    //通过Map集合获取用户信息
    User getUserByMap(Map<String,Object> map);
}
复制代码
  • Escriba el archivo de mapeo:
<!--User checkLoginByMap(Map<String,Object> map);-->
<select id="getUserByMap" resultType="com.mybatis.pojo.User">
    SELECT * FROM user WHERE name = #{name} AND password = #{password}
</select>
复制代码

o

<!--User checkLoginByMap(Map<String,Object> map);-->
<select id="getUserByMap" resultType="com.mybatis.pojo.User">
    SELECT * FROM user WHERE name = '${name}' AND password = '${password}'
</select>
复制代码
  • Escribe la clase de prueba:
@Test
public void test() {
    SqlSession sqlSession = new SqlSessionFactoryBuilder
            .build(Resources.getResourceAsStream("mybatis-config.xml"))
            .openSession(true);
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    
    Map<String,Object> map = new HashMap<>();
    map.put("name","张三");
    map.put("password","123456");
    User user = mapper.getUserByMap(map);
    System.out.println(user);
}
复制代码

Parámetro de tipo de clase de entidad

  • Si el parámetro de método en la interfaz del mapeador es un objeto de clase de entidad y se puede usar en este momento , ${}y #{}el valor del atributo se puede obtener accediendo al nombre del atributo en el objeto de clase de entidad. Tenga en cuenta que ${}las comillas simples deben agregarse manualmente .

  • Escriba la interfaz del mapeador:

public class User {
    //通过实体类新增用户信息
    void addUser(User user);
}
复制代码
<insert id="addUser">
    INSERT INTO user VALUES(null, #{name}, #{age}, #{sex}, #{account}, #{password})
</insert>
复制代码

o

<insert id="addUser">
    INSERT INTO user VALUES(null, '${name}', '${age}', '${sex}', '${account}', '${password}')
</insert>
复制代码
  • Escribe la clase de prueba:
@Test
public void test() {
    SqlSession sqlSession = new SqlSessionFactoryBuilder
            .build(Resources.getResourceAsStream("mybatis-config.xml"))
            .openSession(true);
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = new User(null, "小李", 23, "女", "1965325425", "222222");
    mapper.addUser(user);
}
复制代码

使用@Param标识参数

  • 可以通过@Param注解标识mapper接口中的方法参数,此时,会将这些参数放在map集合中

    1. 以@Param注解的value属性值为键,以参数为值;
    2. 以param1,param2...为键,以参数为值;
  • 只需要通过${}#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号

  • 编写mapper接口:

public class User {
    User getUserByParam(@Param("name") String name, @Param("password") String password);
}
复制代码
  • 编写映射文件:
    <select id="getUserByParam" resultType="com.mybatis.pojo.User">
          SELECT * FROM user WHERE name = #{name} AND password = #{password}
    </select>
复制代码

    <select id="getUserByParam" resultType="com.mybatis.pojo.User">
          SELECT * FROM user WHERE name = '${name}' AND password = '${password}'
    </select>
复制代码
  • 编写测试类:
@Test
public void test() {
    SqlSession sqlSession = new SqlSessionFactoryBuilder
            .build(Resources.getResourceAsStream("mybatis-config.xml"))
            .openSession(true);
            
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    mapper.getUserByParam("张三", "123456");
}
复制代码

总结

  • 建议分成两种情况进行处理:

    1. 实体类类型的参数
    2. 使用@Param标识参数

Supongo que te gusta

Origin juejin.im/post/7083816686888943629
Recomendado
Clasificación