Mybatis一些细节

一个小技巧:如果在写代码时发现,Maven下的如:clear和plugins爆红可以去它后边的路径去Maven仓库找到删除掉已下载的重新下载,因为可能由于网络原因没下全。

主配置文件(mybatis -config.xml)

/*

登录对应的dao层的方法

需要两个参数:username,password

两种策略:

1、传入User对象,传入一个参数。

场景:User类中的属性非常多,id,username,password,realname,profile,gender.....

User user = new User(null,"admin","123456",null,null,null,null)

2、传入username,password两个参数,规范要求,如果需要传入多个参数,参数个数不要超过3个
*
*

当我们的mapper接口传入多个参数的时候,尽量保证类型的统一。

参数的类型要么是java内置的数据类型,包装器类型或者是String,要么是集合
*

正例:

Integer ,String

String String

String List
*

反例:

User Student

User List

Integer Student
*

1、如果传入的是User对象,在mapper.xml映射文件中,就必须和对象的属性名匹配

2、如果传入的是java内置的数据类型的参数,String,Integer..,如果只传一个参数,直接使用#{参数名},#{param1},#{xxx}

3、如果传入的是java内置的数据类型的参数,String,Integer..,如果传入多个参数,必须使用#{paramN}.#{arg0},不能用#{参数名}
*

原理:

Mybatis在封装参数的时候,封装成了一个Map集合,

如果传入的是User对象,value:{“username”:"admin","password":"123456","id":"1"}

【"username":"admin"】,【"password":"123456"】

如果传入的是一个内置类型的参数,字面量 【"xxxx":"admin"】

如果从传入的是多个参数,【"param1":"admin"】,【"param2":"123456"】

底层封装的map集合,arg0和arg1。起了个默认的别名叫param1,param2

如果传入的是集合,【"param1":"{1,2,3,4,5}"】

需要掌握:mybatis传入参数的策略,封装成了一个map集合
*

使用注解来给参数命名@Param("命名")
*

结论:如果需要传入多个参数,我们希望在mapper.xml中和传入对象一样使用参数的名直接赋值,#{username},使用@Param注解起名

我们还是希望通过传入对象来解决问题!!!!
*

*/

package com.jsoft.dao;

import com.jsoft.entity.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface UserMapper {

   
    User selectUserByUsernameAndPassword(@Param("username") String username,@Param("password") String password);

    List<User> selectUserByIds(@Param("ids") List<Integer> ids);

    int updateUserSet(User user);

    List<User> selectUsersTrim(User user);


    List<User> selectUsersChoose(User user);

    List<User> selectUsersIF(User user);

    List<User> findAllUsersByUsername(String username);

    List<User> findAllUsersByPage(Integer pageNum);

    List<User> findAllUsers();

    User selectUserById(Integer id);

    int deleteUserById(Integer id);

    int updateUser(User user);

    int saveUser(User user);

}

    <select id="selectUserById" resultType="com.jsoft.entity.User">
        select id,username,password from user where id = #{id}
    </select>

    <select id="findAllUsers" resultType="com.jsoft.entity.User">
        select id,username,password from user
    </select>

    <select id="findAllUsersByPage" resultType="com.jsoft.entity.User">
        select id,username,password from user limit #{pageNum},8
    </select>

    <select id="findAllUsersByUsername" resultType="com.jsoft.entity.User">
        select id,username,password from user where username like #{asdasdasd}
    </select>
resultType:结果集的自动映射,必须写,对象属性名和查询结果的列名必须对应上
parameterType:参数类型,可以自动解析,可以写不写,如果是我们自定义的引用数据类型,建议写上全类名
posted @   清欢qing  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
点击右上角即可分享
微信分享提示