2.MyBatis 获取参数

一.增删改

1、新增
<!--int insertUser();-->
<insert id="insertUser">
  insert into t_user values(null,'admin','123456',23,'男')
</insert>
2、删除
<!--int deleteUser();-->
<delete id="deleteUser">
	delete from t_user where id = 7
</delete>
3、修改
<!--int updateUser();-->
<update id="updateUser">
	update t_user set username='ybc',password='123' where id = 6
</update>

二.查询功能

select标签必须设置属性resultType或resultMap,用于设置实体类和数据库表的映射关系

  • resultType:自动映射,用于属性名和表中字段名一致的情况
  • resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况
1、查询单行单列
/**
* 查询用户的总记录数
* @return
* 在MyBatis中,对于Java中常用的类型都设置了类型别名
* 例如: java.lang.Integer-->int|integer
* 例如: int-->_int|_integer
* 例如: Map-->map,List-->list
*/
int getCount();
<!--Integer getCount();-->
<select id="getCount" resultType="_integer">
  select count(*) from t_user
</select>
2、查询一个实体对象

查询出的数据只有一条,可以通过实体类对象或者集合接收

<!--User selectUserById(@Param("id") Integer id);-->
<select id="selectUserById" resultType="User">
  select * from t_user where id = #{id}
</select>
3、查询一个List集合

当查询的数据为多条时,不能使用实体类作为返回值,否则会抛出异常 TooManyResultsException;

但是若查询的数据只有一条,可以使用实体类或集合作为返回值

<!--List<User> selectAllUser();-->
<select id="selectAllUser" resultType="list">
  select * from t_user
</select>
4、查询一条数据为Map
<!--Map<String,Object> getUserByIdToMamp(@Param("id") Integer id);-->
<select id="getUserByIdToMamp" resultType="map">
  select * from t_user where id = #{id}
</select>
5、查询多条数据为Map

5.1 将表中的数据以map集合的方式查询,一条数据对应一个map;

若有多条数据,就会产生多个map集合将这些map放在一个list集合中获取

<!--List<Map<String, Object>> getAllUserToMap();--> 
<select id="getAllUserToMap" resultType="map"> 
  select * from t_user 
</select>

5.2 通过@MapKey注解设置map集合的键,值是每条数据所对应的map集合

<!--Map<String, Object> getAllUserToMap();-->
<!--
  {
    1={password=123456, sex=男, id=1, age=23, username=admin},
    2={password=123456, sex=男, id=2, age=23, username=张三},
    3={password=123456, sex=男, id=3, age=23, username=张三}
  }
-->
<select id="getAllUserToMap" resultType="map">
	select * from t_user
</select>

二.获取参数

${}:本质是字符串拼接。使用字符串拼接的方式拼接SQL,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号

#{}:本质是占位符赋值。使用占位符赋值的方式拼接SQL,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号

1、单个字面量类型的参数

方法参数为单个的字面量类型,此时可以通过${}和#{}以任意的字符串获取参数值。

<select id="getUserByUsername" resultType="User">
  select * from t_user where username = #{username}
</select>

<select id="getUserByUsername" resultType="User">  
  select * from t_user where username = '${username}'  
</select>
2、多个字面量类型的参数

mapper接口方法的参数为多个时,此时MyBatis会将这些参数放在一个map集合中,以两种方式进行存储,通过#{},${}以键的方式访问值即可.

  • 第一种:以arg0,arg1...为键,以参数为值
  • 第二种:以param1,param2...为键,以参数为值
<!--User checkLogin(String username,String password);-->
<select id="checkLogin" resultType="User">  
  select * from t_user where username = #{arg0} and password = #{arg1}  
</select>

<!--User checkLogin(String username,String password);-->
<select id="checkLogin" resultType="User">
  select * from t_user where username = '${param1}' and password = '${param2}'
</select>
3、实体类对象参数

mapper接口方法的参数是实体类对象的参数

通过#{},${}直接访问实体类对象中的属性名获取属性值

@Test
public void insertUser() {
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
    User user = new User(null,"Tom","123456",12,"男","123@321.com");
    mapper.insertUser(user);
}
<!--int insertUser(User user);-->
<insert id="insertUser">
  insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})
</insert>
4、Map集合类型的参数

若mapper接口方法的参数有多个时,可以手动将这些参数放入到一个map中存储。

只需要通过#{},${}以键的方式访问我们自己定义的key即可。

@Test
public void checkLoginByMap() {
    SqlSession sqlSession = SqlSessionUtils.getSqlSession();
    ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
    Map<String,Object> map = new HashMap<>();
    map.put("usermane","admin");
    map.put("password","123456");
    User user = mapper.checkLoginByMap(map);
    System.out.println(user);
}
<!--User checkLoginByMap(Map<String,Object> map);-->
<select id="checkLoginByMap" resultType="User">
  select * from t_user where username = #{username} and password = #{password}
</select>
5、List集合类型的参数

如果传入的参数是List集合类型, 默认的获取参数有三种,

  • 第一种:以arg0 为键,以集合为值。
  • 第二种:以collection为键,以集合为值。
  • 第三种:以list为键,以集合为值。
6、@Param注解

使用@Param注解标识mapper接口中的方法参数,MyBatis将数据放入Map集合中,以两种方式进行存储:

  • 以Param注解的value值为键,以参数为值
  • 以param1,param2...为键,以参数为值

通过#{},${}以键的方式访问值即可

public interface ParameterMapper {
    User checkLoginByParam(@Param("username") String username, 
                           @Param("password") String password);
}
<select id="checkLoginByParam" resultType="User">
  select * from t_user where username = #{username} 
           And password = #{password}
</select>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值