精华内容
下载资源
问答
  • 为什么要用@Param

    万次阅读 多人点赞 2018-11-19 22:50:45
    @Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应,一般在2=<参数数<=5时使用最佳。 2.原始的方法 当只有一个参数时...

    目录

    1.关于@Param

    2.原始的方法

    3.使用@Param

    4.后记


    1.关于@Param

    @Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应,一般在2=<参数数<=5时使用最佳。

    2.原始的方法

    当只有一个参数时,没什么好说的,传进去一个值也只有一个参数可以匹配。当存在多个参数时,传进去的值就区分不开了,这时可以考虑用Map,例如接口

    public List<Role> findRoleByMap(Map<String, Object> parameter);

    xml文件 ---------------(1)

    <select id="findRoleByMap" parameterType="map" resultType="role">
        SELECT id,name FROM t_role
        WHERE roleName=#{roleName}
        AND note=#{note}
    <select>

    测试文件

    RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
    Map<String, Object> parameter = new HashMap<>();
    parameter.put("roleName", "剑士");
    parameter.put("note", "决战紫禁之巅");
    List<Role> roles = roleMapper.findRolesByMap(parameter);

    3.使用@Param

    很明显上面的缺点就在于可读性差,每次必须阅读他的键,才能明白其中的作用,并且不能限定其传递的数据类型,下面是使用@Param的情况,需要将接口改为

    public List<Role> findRoleByAnnotation(@Param("roleName") String roleName, @Param("note") String note);

    这样我们就可以直接传入对应的值了。

    当然也可以使用Java Bean来传递多个参数,定义一个POJO

    public class RoleParam {
        private String roleName;
        private String note;
        /*getter和setter*/
    }

    此时接口就变为

    public List<Role> findRoleByBean(RoleParam role);

    这样对应的xml文件与1处的区别就在于id和parameterType发生了变化,id对应的方法和parameterType对应该类的权限定名。

    而使用更多的场景可能是这样的,对应多个POJO

    public List<Role> findRoleByMix(@Param("roleP") RoleParam role, @Param("permissionP") PermissionParam permission);

    这样就可以进行如下映射

    <select id="findRoleByMix" resultType="role">
        SELECT id,name FROM t_role
        WHERE roleName=#{roleP.roleName}
        AND note=#{rolep.note}
        AND level=#{permissionP.level}
    <select>

    注意此时并不需要写出parameterType属性,Mybatis会进行自动搜索。

    4.后记

    最后也许会有小火办会问,那@Param和@RequestParam是什么关系呢?其实它们没有关系,就跟Java和JavaScript,雷锋和雷锋塔一样,拥有相似的外表,其实作用是不一样的,@Param是地处Dao层,是为了传递多个参数,解决的是可读性和直观性;而@RequestParam是位列Controller层,作用是为获取前端参数,解决的是前后端参数不一致的问题。所以它们没有关系!

    展开全文
  • context-param和init-param区别

    千次阅读 2018-09-29 20:45:00
    context-param context-param是应用范围内的参数,存放在ServletContext中 web.xml中的配置 &lt;context-param&gt; &lt;param-name&gt;context/param&lt;/param-name&gt; &lt;...

     

    context-param

    context-param是应用范围内的参数,存放在ServletContext中

    web.xml中的配置

     <context-param>
               <param-name>context/param</param-name>
               <param-value>avalible during application</param-value>
      </context-param>

      参数获取:通过ServletContext对象

    Stringvalue=(String)servletContext.getAttribute("name");

     注:当服务器启动时,服务器会为每一个WEB应用创建一个唯一的ServletContext对象代表WEB应用。

    每一个web应用中的servlet共享一个ServletContext,所以Servlet之间就可以通过该对象来实现数据通信。

             ContextServlet的生命周期:Servlet的生命周期是最长的,当服务器启动时被创建,服务器关闭或web应用被移出服务器时被销毁。

            

    (1)调用ServletConfig类的getServletContext()方法 在init(ServletConfigconfig)方法中,使用ServletContextcontext=config.getServletContext();

    (2)调用GenericServlet类的getServletContext()方法 其实这种方式也是调用ServletConfig类的getServletContext()方法,因为GenericServlet类实现了ServletConfig接口;

    (3)调用HttpSession类的getServletContext()方法: HttpSession也是一个接口,我们会在后面讲这个接口,它有一个方法可以获取到ServletContext对象;

    (4)调用ServletContextEvent类的getServletContext()方法 ServletContextEvent类只有一个方法,就是getServletContext(),这个类我们后面也会讲到。

            配置作用:

    1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param>

    2.紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文.

    3.容器将<context-param></context-param>转化为键值对,并交给ServletContext.

    4.容器创建<listener></listener>中的类实例,即创建监听.

    5.在监听中会有contextInitialized(ServletContextEvent args)初始化方法,在这个方法中获得ServletContext = ServletContextEvent.getServletContext();

    6.得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早.
    换句话说,这个时候,你对<context-param>中的键值做的操作,将在你的WEB项目完全启动之前被执行.

    7.举例.你可能想在项目启动之前就打开数据库.
    那么这里就可以在<context-param>中设置数据库的连接方式,在监听类中初始化数据库的连接.

    8.这个监听是自己写的一个类,除了初始化方法,它还有销毁方法.用于关闭应用前释放资源.比如说数据库连接的关闭.

    init-param

    init-param是Servlet范围内的参数,只能在Sercvlet的init()的方法中取得

    web.xml中的配置

     <servlet>
        <servlet-name>MainServlet</servlet-name>
        <servlet-class>com.wes.controller.MainServlet</servlet-class>
        <init-param>
           <param-name>param1</param-name>
           <param-value>avalible in servlet init()</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
     </servlet>

    获取:参数只能在servlet的init()方法中通过this.getInitParameter("param1")取得.

    init-param配置用途:初始化的数据,系统路径,url过滤等等,主要是一些静态常量,写死的 

    展开全文
  • @Param

    千次阅读 2019-06-20 20:00:11
    Mapper.class中有个接口方法 public User getUserByIdandName(Integer id,String name); Mapper.xml <select id="getUserByIdandName" resultType=...select * from user where id=#{param0} and name=#{p...

    Mapper.class中有个接口方法

    public User getUserByIdandName(Integer id,String name);

    Mapper.xml

    <select id="getUserByIdandName"  resultType="user">

     select * from user where id=#{param0} and name=#{param1}

    </select>

    接下来展示@Param的功效

    Mapper.class中有个接口方法

    public User getUserByIdandName(@Param("id")Integer id,@Param("name")String name);

    Mapper.xml

    <select id="getUserByIdandName"  resultType="user">

     select * from user where id=#{id} and name=#{name}

    </select>

    展开全文
  • 方法一:(设置下标) UserMapping.xml select * from login where name=#{0} and password=#{1} ...public Login selectByCondition(@param("name")String username,@param("pwd")String p...

    方法一:(设置下标)

    UserMapping.xml

    select * from login where name=#{0} and password=#{1}  
    

     

    方法二:(定义别名)

    UserDao.java

    public Login selectByCondition(@param("name")String username,@param("pwd")String password);

    name、pwd 是别名对应UserMapping.xml里面的

    select * from login where name=#{name} and password=#{pwd}   

     

     

    展开全文
  • @Param注解的用法解析

    万次阅读 多人点赞 2017-02-08 11:31:52
    实例一 @Param注解单一属性 dao层示例 Public User selectUser(@param(“userName”) String name,@param(“userpassword”) String password); xml映射对应示例 select id=" selectUser" resultMap=...
  • python中param函数的使用方法发布时间:2020-12-07 11:06:41来源:亿速云阅读:128作者:小新小编给大家分享一下python中param函数的使用方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!...
  • @Param注解

    千次阅读 2019-09-15 21:55:31
    使用Param注解情况 1.传递单个参数,不使用 @Param 注解 2.传递单个参数,使用@Param注解 3.传递多个参数,使用 @Param 注解 4.传递多个参数,不使用 @Param 注解 官方文档:...
  • 标题取自:function name([param[, param[, ... param]]]) { statements } 标题这组参数是什么意思? 一个索引里嵌套了另一个数组?
  • 浅谈init-param与context-param区别

    千次阅读 2017-12-24 12:21:39
    近日查看init-param与context-param区别,费了很大劲才弄懂,分享一下: init-param与context-param都是在web.xml里以键值对形式定义的变量,不同的是init-param是定义在servlet标签里,而context-param是定义在web...
  • 方法1:顺序传参法 1.不使用@param注解传递多个参数的情况 注: 使用jdk1.7得到的是: [1, 0, param1, param2] 使用1.8得到的则是: [arg1, arg0, param1, param2] #{}里面的数字代表你传入参数的顺序。 这种方法...
  • MybatisPlus #{param}和${param}的用法

    千次阅读 2020-04-21 11:12:33
    mybatis-plus接口mapper方法中的注解(如@Select)或者xml(如)传入的参数是通过#{param}或者${param}来获取值。 区别 1.解析方式: #{param}:会进行预编译,而且进行类型匹配,最后进行变量替换,括号中可以添加...
  • MybatisPlus #{param}和${param}的用法详解

    千次阅读 2020-09-08 14:33:30
    mybatis-plus接口mapper方法中的注解(如@Select)或者xml(如)传入的参数是通过#{param}或者${param}来获取值。 区别 1.解析方式: #{param}:会进行预编译,而且进行类型匹配,最后进行变量替换,括号中可以添加...
  • spring中@param和mybatis中@param使用区别

    万次阅读 多人点赞 2015-03-14 11:51:09
    spring中@param /** * 查询指定用户和企业关联有没有配置角色 * @param businessId memberId * @return */ int selectRoleCount(@Param("businessId") Integer businessId,@Param("memberId") Long me
  • param参数服务器

    千次阅读 2019-02-27 17:28:15
    声明:本文主要内容来自: MOOC ...零.param介绍 0.0 param有什么用 0.1参数类型 二.如何使用----三种维护方式 2.1命令行维护 2.2.launch文件 2.2.1 yaml文件 2.3node源码 三.命名空间对param的影响 零....
  • <param-name>contextConfigLocation</param-name> <param-value> classpath:spring/applicationContext.xml </param-value> </context-param> <context-param> <param-name>contextInitializerClasses</...
  • 注解@Param引用不到,ibatis.annotations.Param 标红需要引入什么包呢? 我在使用 MyBatis Generator 插件生成文件的时候,发现 @Param 报错,引入的 import org.apache.ibatis.annotations.Param; 红色报错,找不到...
  • Available parameters are [0, 1, param1, param2] 原因是 在mapper 映射的函数参数没有加 @param(“book”)错误的: List<Book> selectBySchool(Page<Book> page, BookExample exampl
  • Available parameters are [param, param1] 移除Mapper接口中的 @Param(“param”) List<Map<String,Object>> findEntityAll(@Param("param") Map<String, Object> param); 改为 List<Map<...
  • @Param注解的作用

    万次阅读 多人点赞 2019-06-18 11:44:15
    Mybatis的@Param注解的作用,我个人感觉就俩作用:1.便于传多个参数;2.类似于别名之类的功能 1.便于传多个参数 dao层示例: Public User selectUser(@param(“userName”) String name, @param(“userpassword”...
  • 一、变量 这个是放在servlet里面的,只有此servlet可以访问 <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>...init-param> <param-name>a
  • mysql中 ${param}与#{param}区别

    千次阅读 2019-03-15 15:11:42
    ${param}传递的参数会被当成sql语句中的一部分,比如传递表名,字段名 例子:(传入值为id) order by ${param} 则解析成的sql为: order by id #{parm}传入的数据都当成一个字符串,会对自动传入的数据加一个双引号 ...
  • 关于Mybatis的@Param注解

    万次阅读 多人点赞 2018-03-11 21:29:18
    关于 @param 这个注解的使用,作者这里整理了一些笔记。 关于Mybatis @Param 注解,官方文档: http://www.mybatis.org/mybatis-3/zh/java-api.html 其中关于 @param部分的说明是: @Param Par...
  • 刚到公司,读代码的时候遇到了这个@param,[这个和@requestparam是不一回事哈] 首先解释一下为毛要用这个东西 当在查询的时候,一个参数的时候,在直接在入参中写入就可以了,但是当两个参数的时候,怎么办? ...
  • JavaScript的@param注解

    千次阅读 2020-12-07 22:27:13
    @param是对函数参数进行解释作用,大型项目所用 /** //大括号写类型 @param{number}a 第一个参数是数字类型 @param{number}a 第二个参数是数字类型 @returns 返回俩个参数的和 */ function add(a,b){ return a+b; }...
  • Parameter 'id' not found. Available parameters are [0, 1, 2, param3, param1, param2]
  • 问题描述:抛出org.apache.ibatis.binding....百度解决方法都是说 多参数时必须加上@Param 但是明明加了注解,找了好久才发现是@Param的包导错了 正确导包 : import org.apache.ibatis.annotations.Param; ...
  • 在mybatis的Map类中,方法参数为多个时,前面一般需要加上@Param注解,例如 User getUser(@Param(“userId”)String userId,@Param(“password”)String password); @Param注解分为spring的和mybatis的: org.spring...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 197,085
精华内容 78,834
关键字:

param