mybatis注解使用 与 Param参数

1. mybatis注解使用

mybatis集成了xml映射 和 注解的方式提供给程序猿操作数据库,对于写一个简单、没技术含量、查询来说xml显得有点鸡肋。而使用注解可以弥补这一短板。

  1. 注解在mybatis-config.xml配置文件,注意xml 和 注解的mapper区别。

    xml映射mapper
    <mappers>
    	<mapper resource="com/ljq/dao/UserMapper.xml"/>
    </mappers>
    
    
    注解的方式mapper
    <mappers>
    	<mapper class="com.ljq.dao.UserMapper"/>
    </mappers>
    
  2. 简单的注解CRUD,使用注解时需要传入SQL参数可以通过@Param注解来传递参数。

    UserMapper.java接口

    package com.ljq.dao;
    
    import com.ljq.pojo.User;
    import org.apache.ibatis.annotations.*;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public interface UserMapper {
        @Select("select *from user")
        List<User> getUserList();
    
    
        @Select("select *from user where id = #{userid}")
        User getUserById(@Param("userid") int id);
    
    
        @Insert("insert into user (name, pwd) values (#{username}, #{password}")
        int addUser(@Param("username") String name, @Param("password") String pwd);
    
    
        @Update("update user set name = #{newname} where name = #{oldname}")
        int updUser(@Param("newname") String newname, @Param("oldname") String oldname);
    
    
        @Delete("delete from user where name = #{username}")
        int delUser(@Param("username") String name);
        
    }
    

    测试方法

    @Test
    public void annotation_Test(){
        SqlSession session = mybatisUtil.getSqlsession();
        UserMapper mapper = session.getMapper(UserMapper.class);
    
        //1. select *from user;
        List<User> list = mapper.getUserList();
        for (User user : list) {
            System.out.println(user.toString());
        }
    
        //2. select *from user where id = #{userid}
        User user = mapper.getUserById(1);
        System.out.println(user.toString());
    
    
        //3. insert into user (name, pwd) values ("username", "password")
        int i = mapper.addUser("admin","123456");
        session.commit();                   //CUD需要事务手动提交
    
    
        //4. update user set name = #{newname} where name = #{oldname}
        int j = mapper.updUser("hello", "admin");
        session.commit();
    
        //5. delete from user where name = #{username}
        int k = mapper.delUser("hello");
        session.commit();
    
        session.close();
    }
    

2. Param参数注解

mybatis使用注解进行操作数据库时,避免不了传入参数。那么Param又是如何使用的呢?需要注意什么?首先来看一下Param注解的底层源码

package org.apache.ibatis.annotations;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface Param {
    String value();
}

可以看到Param使用了五大元注解(Retention生命周期、Target目标、Inherted继承、Repeatable重复标记、Documented JavaDoc文档)中的三个。限制了该注解只能使用在参数上,生命周期是运行时间(保证程序运行时JVM能够顺利反射加载)。

  1. Param使用注意事项一:如果只有一个基本类型的话可以忽略,但是一般不会这么干,都会写的明明白白。下面两种写法都对。

    @Select("select *from user where id = #{id}")
    User getUserById(@Param("id") int id);
    
    @Select("select *from user where id = #{id}")
    User getUserById(int id);
    
  2. Param使用注意事项二:一个Param注解对应一个参数,多个参数需要多个Param

    @Update("update user set name = #{newname} where name = #{oldname}")
    int updUser(@Param("newname") String newname, @Param("oldname") String oldname);
    
  3. Param使用注意事项三:使用@Param(“xxx(取我)”),SQL 取值时是取 xxx,而不是形参

    @Insert("insert into user (name, pwd) values (#{username}, #{password}")
    int addUser(@Param("username") String name, @Param("password") String pwd);
    
  4. Param使用注意事项四:如果传入的参数是一个引用类型(类、集合)可以不加Param。但是要注意取值时要对应POJO实体类的字段名。

    @Select("select *from user where id = #{id} and name = #{name}")
    public User test(User u);
    
  5. Param使用小技巧:似乎并没有办法在注解中使用map指定传参,其实注解也能做使用map传参,一定要注意参数名的匹配。

    @Insert("insert into user (name, pwd) values (#{username}, #{password})")
    int add(HashMap<String,Object> map);
    
    
    HashMap<String,Object> map = new HashMap<>();
    map.put("username", "admin");
    map.put("password","123456");
    mapper.add(map);
    

注解开发对简单的SQL操作比较友好,不需要手动多写一个xml配置文件。但是局限性也挺大,对于复杂的SQL尽量使用XML来配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值