Mybatis(二):实现“增删改查”

这篇具有很好参考价值的文章主要介绍了Mybatis(二):实现“增删改查”。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。



前言

本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!

一、MyBatis的增删改查

1、添加

UserMapper接口:

     /**
     *添加用户信息
     */
    int insertUser();

UserMapper.xml

<!--int insertUser();-->
          <insert id="insertUser">
                insert into t_user values(null,'张三','123',23,'女')
          </insert>

2、修改

UserMapper接口:

     /**
     * 修改用户信息
     */
    void updateUser();

UserMapper.xml

        <!-- void updateUser();-->
        <update id = "updateUser">
             update t_user set username = '张三' where id = 4
        </update>

3、删除

UserMapper接口:

    /**
     * 删除用户信息
     */
    void deleteUser();

UserMapper.xml

        <!-- void deleteUser();-->
        <delete id="deleteUser">
             delete from t_user where id = 5
        </delete>

4、查询

4.1 查询一个实体

UserMapper接口:

    /**
     * 查询用户信息
     */
    User getUserId();
UserMapper.xml
      <!--User getUserById();-->
        <!--
            查询功能的标签必须设置resultType或resultMap
            resultType:设置默认的映射关系
            resultMap:设置自定义的映射关系
        -->
    <select id="getUserById" resultType="com.ir.mybaits.pojo.User">
          select * from t_user where id = 3
     </select>
     

4.1 查询集合

UserMapper接口:

    /**
     * 查询用户信息
     */
    List<User> getAllUser();

UserMapper.xml

      <!--List<User> getAllUser();-->
    <select id="getAllUser" resultType="User">
        select * from t_user
    </select>

注意:

⭕ 查询的标签select必须设置属性resultTyperesultMap,用于设置实体类和数据库表的映射关系
resultType:自动映射,用于属性名和表中字段名一致的情况
resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况

⭕当查询的数据为多条时,不能使用实体类作为返回值,只能使用集合,否则会抛出异常TooManyResultsException,但是若查询的数据只有一条,可以使用实体类或集合作为返回值

二、MyBatis获取参数值的两种方式(重点)

MyBatis获取参数值的两种方式:${}#{}

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

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

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

⭕ 若mapper接口中的方法参数为单个的字面量类型,此时可以使用${}#{}以任意的名称获取参数的值,但是需要注意${}的单引号问题

⭕ 代码演示:

UserMapper

/**
     * @description:查询用户信息
     * @author: Hey
     * @date: 2022/7/3 16:53
     * @param: [username]
     * @return: com.ir.mybatis.pojo.User
     **/
    User getUserByUsername(String username);

UserMapper.xml

 <!--User getUserByUsername(String username);-->
    <select id="getUserByUsername" resultType="user">
         <!--此时只注重传递过来的值,{username}中的usernsme可以替换为任意字母,结果都不会改变-->
          <!--select * from t_user where username = '${username}';-->
          select * from t_user where username = #{username};
    </select>

UserMapperTest

   /**
    * @description:
    * @author: Hey
    * @date: 2022/7/3 15:29
    * @param: []
    * @return: void
    **/
    @Test
    public void getUserByUsername(){
        UserMapper userMapper = SqlSessionUtils.getSqlSession().getMapper(UserMapper.class);
        System.out.println(userMapper.getUserByUsername("张三"));
    }

2、多个字面量类型的参数

mapper接口方法的参数为多个时,此时MyBatis会将这些参数放在一个map集合中,以两种方式进行存储

  1. arg0,arg1…为键,以参数为值
  2. param1,param2…为键,以参数为值

因此只需要通过${}#{}访问map集合的键就可以获取相对应的 值,但是需要注意${}的单引号问题。

⭕ 代码演示:

UserMapper

    /**
     * @description:检查用户登录信息
     * @author: Hey
     * @date: 2022/7/3 15:46
     * @param: [username, password]
     * @return: com.ir.mybatis.pojo.User
     **/
    User checkLoginByParameter(String username,String password);

UserMapper.xml

  <!--User checkLoginByParameter(String username,String password);-->
    <select id="checkLoginByParameter" resultType="user">
        select * from t_user where username=#{arg0} and password=#{arg1};
    </select>

UserMapperTest

 /**
     * @description:
     * @author: Hey
     * @date: 2022/7/3 15:30
     * @param: []
     * @return: void
     **/
    @Test
    public void checkLoginByParam(){
         UserMapper userMapper = SqlSessionUtils.getSqlSession().getMapper(UserMapper.class);
         User user = userMapper.checkLoginByParameter("张三","123");
        System.out.println(user);
    }

3、map集合类型的参数

⭕ 若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合,将这些数据放在map中,只需要通过${}#{}访问map集合的键就可以获取相对应的值,但是需要注意${}的单引号问题

⭕ 代码演示:

UserMapper

    /**
     * @description:通过自定义Map来验证登录
     * @author: Hey
     * @date: 2022/7/3 15:45
     * @param:
     * @return:
     **/
    User checkLoginByMap(Map<String, Object> map);

UserMapper.xml

 <!--User checkLoginByMap(Map<String, Object> map);-->
    <select id="checkLoginByMap" resultType="user">
        select * from t_user where username=#{username} and password=#{password};
    </select>

UserMapperTest

     /**
     * @description:测试通过自定义Map验证登录
     * @author: Hey
     * @date: 2022/7/3 15:55
     * @param: []
     * @return: void
     **/
    @Test
    public void checkLoginByMap(){
        UserMapper userMapper = SqlSessionUtils.getSqlSession().getMapper(UserMapper.class);
        Map<String,Object> map = new HashMap<>();
        map.put("username","张三");
        map.put("password","123");
        User user = userMapper.checkLoginByMap(map);
        System.out.println(user);
    }

4、实体类类型的参数

⭕ 若mapper接口中的方法参数为实体类对象时,此时可以使用${}#{},通过访问实体类对象中的属性名获取属性值,但是需要注意${}的单引号问题

⭕ 代码演示:

UserMapper

 /**
     * @description:添加用户
     * @author: Hey 
     * @date: 2022/7/3 16:11
     * @param: [user]
     * @return: int
     **/
    Integer insertUser(User user);

UserMapper.xml

<!--int insertUser(User user);-->
    <select id="insertUser" >
        insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})
    </select>

UserMapperTest

     /**
     * @description:添加用户  
     * @author: Hey
     * @date: 2022/7/3 16:24
     * @param: []
     * @return: void
     **/
    @Test
    public void insertUser(){
        UserMapper userMapper = SqlSessionUtils.getSqlSession().getMapper(UserMapper.class);
        Integer result = userMapper.insertUser(new User(null,"喜羊羊","123456",18,"男","123123@qq.com"));
        System.out.println(result);
    }

5、使用@Param标识参数

⭕ 可以通过@Param注解标识mapper接口中的方法参数,此时,会将这些参数放在map集合中,以如下两种方式来取值访问:

  1. @Param注解的value属性值为键,以参数为值;
  2. param1,param2…为键,以参数为值;

只需要通过${}#{}访问map集合的键就可以获取相对应的值,但是需要注意${}的单引号问题

⭕ 代码演示:

UserMapper

 /**
     * @description:通过参数注解验证登录
     * @author: Hey 
     * @date: 2022/7/3 16:59
     * @param: [username, password]
     * @return: com.ir.mybatis.pojo.User
     **/
    User checkLoginByParam(@Param("username") String username, @Param("password") String password);

UserMapper.xml

    <!--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>

UserMapperTest

 /**
     * @description:通过注解方式验证登录
     * @author: Hey
     * @date: 2022/7/3 16:57
     * @param: []
     * @return: void
     **/
    @Test
    public void testCheckLoginByParam(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.checkLoginByParam("admin", "123456");
        System.out.println(user);
    }

6、结论

将以上五种情况分为两类情况
⭕ 情况一:参数为实体类型
⭕ 情况二:参数都用@Param来修饰

三、MyBatis的各种查询功能

1、查询一个实体类对象

SelectMapper

    /**
     * @description:通过id查询用户
     * @author: Hey
     * @date: 2022/7/3 17:54
     * @param: [id]
     * @return: com.ir.mybatis.pojo.User
     **/
    User getUserById(@Param("id") Integer id);

SelectMapper.xml

<select id="getUserById" resultType="user">
         select * from t_user where id= #{id};
    </select>

SelectMapperTest

/**
     * @description:通过id查询用户
     * @author: Hey
     * @date: 2022/7/3 17:58
     * @param: []
     * @return: void
     **/
    @Test
    public void getUserById(){
        SelectMapper selectMapper = SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class);
        User user = selectMapper.getUserById(3);
        System.out.println(user);
    }

2、查询一个list集合

SelectMapper

/**
     * @description:获取多个用户
     * @author: Hey
     * @date: 2022/7/3 17:56
     * @param: []
     * @return: java.util.List<com.ir.mybatis.pojo.User>
     **/
    List<User> getAllUser();

SelectMapper.xml

<select id="getAllUser" resultType="user">
        select * from t_user;
    </select>

SelectMapperTest

/**
     * @description:查询所有用户
     * @author: Hey
     * @date: 2022/7/3 18:00
     * @param: []
     * @return: void
     **/
    @Test
    public void getAllUser(){
        SelectMapper selectMapper = SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class);
        List<User> list =  selectMapper.getAllUser();
        for (User user:list
             ) {
            System.out.println(user);
        }
    }

3、查询单个数据

MyBatis中,对于Java中常用的类型都设置了类型别名

Alias Mapped Type
_byte byte
_char (since 3.5.10) char
_character (since 3.5.10) char
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
string String
byte Byte
char (since 3.5.10) Character
character (since 3.5.10) Character
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal
biginteger BigInteger
object Object
date[] Date[]
decimal[] BigDecimal[]
bigdecimal[] BigDecimal[]
biginteger[] BigInteger[]
object[] Object[]
map Map
hashmap HashMap
list List
arraylist ArrayList
collection Collection
iterator Iterator

SelectMapper

    /**
     * @description:查询用户信息的总记录数
     * @author: Hey
     * @date: 2022/7/3 20:40
     * @param: []
     * @return: java.lang.Integer
     **/
    Integer getCount();

SelectMapper.xml

 <select id="getCount" resultType="int">
        select count(1) from t_user;
    </select>

SelectMapperTest

/**
     * @description:查询用户信息的总记录数
     * @author: Hey 
     * @date: 2022/7/3 20:45
     * @param: []
     * @return: void
     **/
    @Test
    public void getCount(){
        SelectMapper selectMapper = SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class);
        int result = selectMapper.getCount();
        System.out.println(result);
    }

4、查询一条数据为map集合

SelectMapper

/**
     * @description:根据id查询用户信息为一个map集合
     * @author: Hey
     * @date: 2022/7/3 20:59
     * @param: [id]
     * @return: java.util.Map<java.lang.String,java.lang.Object>
     **/
    Map<String,Object> getUserByIdToMap(@Param"id"Integer id);

SelectMapper.xml

<select id="getUserByIdToMap" resultType="map">
        select * from t_user where id=#{id}
</select>

SelectMapperTest

/**
     * @description:根据id查询用户信息为一个map集合
     * @author: Hey
     * @date: 2022/7/3 21:03
     * @param: []
     * @return: void
     **/
    @Test
    public void getUserByIdToMap(){
        SelectMapper selectMapper = SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class);
        System.out.println(selectMapper.getUserByIdToMap(5));
        //{password=123456, sex=男, id=5, age=18, email=123123@qq.com, username=喜羊羊}
    }

5、查询多条数据为map集合

方式一:
SelectMapper

/**
     * @description:查询所有用户信息为Map集合
     * 
     * 将表中的数据以map集合的方式查询,一条数据对应一个map;
     * 若有多条数据,就会产生多个map集合,此时可以将这些map放在一个list集合中获取
     * 
     * @author: Hey
     * @date: 2022/7/3 21:15
     * @param: []
     * @return: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     **/
    List<Map<String, Object>> getAllUserToMap();    

SelectMapper.xml

 <select id="getAllUserToMap" resultType="map">
         select * from t_user
    </select>

SelectMapperTest

/**
     * @description:查询所有用户信息为Map集合
     * @author: Hey
     * @date: 2022/7/3 21:17
     * @param: []
     * @return: void
     **/
@Test
    public void testGetAllUserToMap(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        System.out.println(mapper.getAllUserToMap());
        /**
         * [{password=123, sex=女, id=1, age=23, email=12345@qq.com, username=张三},
         * {password=123456, sex=男, id=2, age=18, email=123123@qq.com, username=喜羊羊}]
        */
    }

方式二:
SelectMapper

/**
     * @description:查询所有用户信息为Map集合
     * 
     * 将表中的数据以map集合的方式查询,一条数据对应一个map;
     * 若有多条数据,就会产生个map集合,并且最终要以一个map的方式返回数据,此时需要通过@MapKey注解设置map集合的键,值是每条数据所对应的map集合
     * 
     * @author: Hey
     * @date: 2022/7/3 21:15
     * @param: []
     * @return: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     **/
   @MapKey("id")
    Map<String, Object> getAllUserToMap();    

SelectMapper.xml

 <select id="getAllUserToMap" resultType="map">
         select * from t_user
    </select>

SelectMapperTest

 /**
     * @description:查询所有用户信息为Map集合
     * @author: Hey
     * @date: 2022/7/3 21:17
     * @param: []
     * @return: void
     **/
    @Test
    public void testGetAllUserToMap(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        System.out.println(mapper.getAllUserToMap());
        /**
         * {
         * 1={password=123, sex=女, id=1, age=23, email=12345@qq.com, username=张三}, 
         * 2={password=123456, sex=男, id=2, age=18, email=123123@qq.com, username=喜羊羊}
         * }
        */
    }

6、结论

MyBatis的各种查询功能:

⭕ 若查询出的数据只有一条
● 可以通过实体类对象接收
● 可以通过list集合接收
● 可以通过map集合接收
结果:
{password=123456, sex=男, id=3, age=23, email=12345@qq.com, username=admin}

⭕ 若查询出的数据有多条
● 可以通过实体类类型的list集合接收
● 可以通过map类型的list集合接收
●可以在mapper接口的方法上添加@MapKey注解,此时就可以将每条数据转换的map集合作为值,以某个字段的值作为键,放在同一个map集合中

⭕ 注意:一定不能通过实体类对象接收,此时会抛异常TooManyResultsException文章来源地址https://www.toymoban.com/news/detail-826612.html

到了这里,关于Mybatis(二):实现“增删改查”的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis 单表的增删改查

    ✅作者简介:2022年 博客新星 第八 。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:SSM 框架从入门到精通 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:MyBatis 单表的增删

    2024年02月21日
    浏览(30)
  • Mybatis案例-商品的增删改查

    JDBC完成: https://blog.csdn.net/meini32/article/details/131981238 1. aim 要完成的功能列表清单: 1. 查询 查询所有数据 查看详情 条件查询 2. 添加 3. 修改 修改全部字段 修改动态字段 4. 删除 删除一个 批量删除 2.环境准备 数据库表tb_brand 实体类Brand 测试用例 安装MyBatis×插件 数据库表: 实

    2024年02月14日
    浏览(27)
  • springboot-mybatis的增删改查

    目录 一、准备工作 二、常用配置  三、尝试  四、增删改查 1、增加 2、删除 3、修改 4、查询 五、XML的映射方法 实施前的准备工作: 准备数据库表 创建一个新的springboot工程,选择引入对应的起步依赖(mybatis、mysql驱动、lombok) application.properties中引入数据库连接信息 创建

    2024年02月14日
    浏览(27)
  • Spring Boot入门(09):如何使用MyBatis的XML配置方式实现MySQL的增删改查操作?

            想要快速高效地开发Java Web应用程序,选择使用Spring Boot和MyBatis无疑是明智之举。本篇文章将教你使用MyBatis的XML配置方式,结合MySQL数据库,实现常见的增删改查操作,让你的应用程序更加实用和强大。跟随本文一起来探索MyBatis在Spring Boot中的力量吧!        

    2024年02月11日
    浏览(52)
  • 化繁为简,MyBatis-Plus 里面的增删改查

    在当前盛行的 SpringBoot 项目中,整合持久层这一块,目前主流的有两种:JPA 和 MyBatis-Plus。至于哪个用的更多一些,这个主要还是看每个公司的技术架构,但硬是要说一个最为常用的,我认为是 MyBatis-Plus,而在这里也是对 MyBatis-Plus 的一个使用进行演示 好了,废话不多说,直

    2024年02月04日
    浏览(28)
  • Mybatis(二):实现“增删改查”

    本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远! UserMapper 接口: UserMapper.xml : UserMapper 接口: UserMapper.xml : UserMapper 接口: UserMapper.xml : 4.1 查询

    2024年02月19日
    浏览(22)
  • Mybatis初步实现增删改查

    首先介绍idea中的一个功能,叫做单元测试 我们使用@Test来作为一个类中的一个方法的上标志,需要引入import org.junit.Test; 此时,这个方法就可以单独执行,我们就不需要每次都在main方法进行方法定义来测试方法中的代码,直接就可运行方法中的代码,还可进行debug运行。 1.查

    2023年04月08日
    浏览(24)
  • 第一个mybatis程序,实现增删改查CRUD

    mybatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache迁移到了googlecode,并且改名为MyBatis,2013年11月迁移到Github。 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 MyBatis 可

    2024年02月02日
    浏览(31)
  • Springboot整合mybatis实现增删改查(crud)

    今天我们来学习一个Springboot案例!! 那么什么是SpringBoot技术呢? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。 该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。 Spring Boot致力于在蓬

    2024年01月22日
    浏览(32)
  • MyBatis的基本入门及Idea搭建MyBatis坏境且如何一步骤实现增删改查(CRUD)---详细介绍

       首先是一个 开源的Java持久化框架 ,它可以帮助开发人员简化数据库访问的过程并提供了一种将SQL语句与Java代码进行解耦的方式,使得开发人员可以更加灵活地进行数据库操作。 MyBatis不仅是开源框架,也给我们带来了许多好处的点,如下: 1.1.1简化数据库操作    MyBa

    2024年02月12日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包