mybatis 第四天 参数传递绑定以及基本的增删改查案例

1: 参数类型绑定

单个参数传递
    <insert id="insertUser">
        insert into t_user(id,name,age,user_address)
        value(
           #{id},
           #{name},
           #{age},
           #{address}
        )
    </insert>
    serivice 接口
    Integer insertUser(String id,String name,Integer age,String address);
    实现类
    public Integer insertUser(String id, String name, Integer age, String address) {
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        return userMapper.insertUser(id,name,age,address);
    }
    
    Mapper中添加
    Integer insertUser(String id, String name, Integer age, String address);
    测试类
    public class UserTest03 {
    @Test
    public void testInsert(){
        UserService userService = new UserServiceImpl();
        userService.insertUser(UUID.randomUUID().toString(),"杨幂",30,"北京");
    }
}
测试结果如下: 报参数匹配不上的错误
### The error occurred while setting parameters
### SQL: insert into t_user(id,name,age,user_address)         value(            ?,            ?,            ?,            ?         )
### Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [arg3, arg2, arg1, arg0, param3, param4, param1, param2]

将mapper中的sql 进行修改
    <insert id="insertUser">
        insert into t_user(id,name,age,user_address)
        value(
        #{param1},
        #{param2},
        #{param3},
        #{param4}
        )
    </insert>
    或者
        <insert id="insertUser">
        insert into t_user(id,name,age,user_address)
        value(
        #{arg0},
        #{arg1},
        #{arg2},
        #{arg3}
        )
    </insert>
    之后发现sql 执行正常了 但是我们还是没法很准确的知道参数怎么和
    sql #{} 中的值对应上,mybatis 还提供了另外的方式帮助我们解决这个问题
    修改 Mapper 接口中的  Integer insertUser(String id, String name, Integer age, String address);
    为Integer insertUser(@Param("id") String id, @Param("name") String name, @Param("age") Integer age, @Param("address") String address);
    
    然后修改sql 为
        <insert id="insertUser">
        insert into t_user(id,name,age,user_address)
        value(
           #{id},
           #{name},
           #{age},
           #{address}
        )
    </insert>
    再次执行sql就可以正常的根绝我们自己的需要映射绑定数据了

2 : 使用map的方式传递参数

    @Test
    public void testInsertByMap(){
        UserService userService = new UserServiceImpl();
        Map<String,Object> param = new HashMap<>();
        param.put("id",UUID.randomUUID().toString());
        param.put("name","嫦娥");
        param.put("age",2000);
        param.put("address","皇宫");
        userService.insertUserByMap(param);
    }
     service 中添加
     void insertUserByMap(Map<String, Object> param);
     实现类中添加
         public void insertUserByMap(Map<String, Object> param) {
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        Integer count = userMapper.insertUserByMap(param);
        sqlSession.commit();
        sqlSession.close();
        logger.info("insert {} success",count);
    }
    
    Mapper 接口中添加
     Integer insertUserByMap(Map<String, Object> param);
     无需使用@Pram()指定
    mapper.xml 中添加
        <insert id="insertUserByMap" parameterType="map">
        insert into t_user(id,name,age,user_address)
        value(
        #{id},
        #{name},
        #{age},
        #{address}
        )
    </insert>      

3 : 使用pojo 的方式传递参数

    @Test
    public void testInsertByPojo() {
        UserService userService = new UserServiceImpl();
        User user = new User();
        user.setId(UUID.randomUUID().toString());
        user.setName("如花");
        user.setAge(100);
        user.setUserAddress("guang周");
        userService.insertUserByPojo(user);
    }
    
    service 接口
     void insertUserByPojo(User user);
     
   实现类
     @Override
    public void insertUserByPojo(User user) {
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        Integer count = userMapper.insertUserByPojo(user);
        sqlSession.commit();
        sqlSession.close();
        logger.info("insert {} success",count);
    }   
    
    mapper 接口
     Integer insertUserByPojo(User user);
   mapper.xml
       <insert id="insertUserByPojo" parameterType="org.wl.pojo.User">
        insert into t_user(id,name,age,user_address)
        value(
        #{id},
        #{name},
        #{age},
        #{userAddress}
        )
    </insert>  

4: 修改

    @Test
    public void testYUpdateByPojo() {
        UserService userService = new UserServiceImpl();
        User user = new User();
        user.setId("88a18dca-7ed9-49ab-a192-147d0720daec");
        user.setUserAddress("小西天");
        userService.updateUserByPojo(user);
    }
    service 接口
     void updateUserByPojo(User user);
     实现类
        @Override
    public void updateUserByPojo(User user) {
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        Integer count = userMapper.updateUserByPojo(user);
        sqlSession.commit();
        sqlSession.close();
        logger.info("insert {} success",count);
    } 
    Mapper 接口
     Integer updateUserByPojo(User user);
     mapper.xml
    <update id="updateUserByPojo" parameterType="org.wl.pojo.User">
        update t_user set user_address= #{userAddress} where id=#{id}
    </update> 
    其他根据map 或者根据单值的查询其实传递参数的方式和 insert 是一样的这里不做更多的演示了

5: 删除

删除一个
 @Test
    public void testDeleteOne(){
        UserService userService = new UserServiceImpl();
        userService.delById("88a18dca-7ed9-49ab-a192-147d0720daec");
    }
     接口
     void delById(String id);
     实现类
     public void delById(String id) {
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        Integer count = userMapper.delById(id);
        sqlSession.commit();
        sqlSession.close();
        logger.info("insert {} success",count);
    }
    Mapper
      Integer delById(@Param("id") String id);
    mapper.xml
    <delete id="delById">
        delete from t_user where id = #{id}
    </delete>  
     
删除多个使用or的方式
    @Test
    public void testDeleteByOr(){
        List<String> params = new ArrayList<>();
        params.add("d8360c20-5e47-41b6-9fe8-6cda391cde6d");
        params.add("8c0ef264-bcfd-45b6-8a68-a4b20bc00e4e");
        UserService userService = new UserServiceImpl();
        userService.delByListOr(params);
    }
    接口 :
    void delByListOr(List<String> params);
    实现类
    public void delByListOr(List<String> params) {
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        Integer count = userMapper.delByListOr(params);
        sqlSession.commit();
        sqlSession.close();
        logger.info("delete {} success",count);
    }
    mapper 接口
    Integer delByListOr(@Param("params") List<String> params);
    mapper.xml
    <delete id="delByListOr" parameterType="java.util.List">
        delete from t_user where
        <foreach collection="params" item="item" separator="or" open="(" close=")">
            id = #{item}
        </foreach>
    </delete>
    
删除多个使用in的方式
    @Test
    public void testDeleteByIn(){
        List<String> params = new ArrayList<>();
        params.add("43384a19-4cc9-4ce3-b4d5-ce9474627778");
        params.add("1e9d6465-c9c7-4eed-8a26-b52b1e0101c5");
        UserService userService = new UserServiceImpl();
        userService.delByListIn(params);
    }
    
    void delByListIn(List<String> params);
    public void delByListIn(List<String> params) {
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        Integer count = userMapper.delByListIn(params);
        sqlSession.commit();
        sqlSession.close();
        logger.info("delete {} success",count);
    }
    <delete id="delByListIn" parameterType="java.util.List">
        delete from t_user where id in
        <foreach collection="params" item="item" separator="," open="(" close=")">
           #{item}
        </foreach>
    </delete>
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值