栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis学习随笔(2)—— Mybatis增删改查以及配置解析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis学习随笔(2)—— Mybatis增删改查以及配置解析

前言

上篇文章讲述了Mybatis是什么以及简单的将Mybatis的查询流程过了一便。使用Mybatis的应用应该从导包开始,导入mybatis依赖包,后在resources资源文件夹下新增mybatis-config.xml核心配置文件,配置数据库连接等信息,然后完成实体类、接口和SQL语句文件*Mapper.xml的映射。
本篇文章主要是完成一些增删改查工作,了解有参数情况下应该怎么操作。除此之外还有了解一下配置文件标签,以及配置文件的一些优化。

Mybatis的增删改查 增

首先完成接口方法的创建

package com.mybatis.dao;
import com.mybatis.pojo.User;
import java.util.List;
public interface userMapper {
    //增加用户
    int addUser(User user);
}

第二步完成userMapper.xml的SQL语句实现

    
        insert into user (id, name , pwd) value (#{id}, #{name}, #{pwd});
    

上述代码红有两个知识点:

    parameterType所映射的是addUSer()接口方法中传进来的参数类型,因为传进来的是User类型,所以parameterType填写的是User的完全限定名。传递进来的参数在SQL语句中怎么使用呢?使用#{}包裹参数名的方式完成,注意这里的参数名必须和addUser()传递进来的参数一致才可以。此处语句中的id name pwd也要和User类中的属性名一致。
    可能有的人会觉得麻烦,因为如果项目庞大可能找不到对应的类型或参数名,这个后面的注解开发中会解决。

到此处增加的代码已经完成,接下来进行测试阶段:

    @Test
    public void addUserTest(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        userMapper mapper = sqlSession.getMapper(userMapper.class);
        User user = new User();
        user.setId(4);
        user.setName("天使");
        user.setPwd("1614700");
        mapper.addUser(user);

        sqlSession.commit();
        sqlSession.close();
    }

查看结果:

在上述测试代码中有两个知识点:

    在Mybatis中,当要完成增删改的操作时,都要执行sqlSession.commit()方法提交,否则数据库不会更新同步,会自动回滚到未操作时的状态。在完成全部操作后记得要关闭sqlSession

如果觉得每次提交都比较麻烦的话,可以在获取sqlSession的方法中做出一些改变,使其默认提交。

	public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession(true);
    }

让我们看一下其内置的方法:

    public SqlSession openSession(boolean autoCommit) {
        return this.sqlSessionFactory.openSession(autoCommit);
    }

这里的autoCommit就是提交的意思。

userMapper文件

    //修改name
    int updateNameByName(Map map);

userMapper.xml文件

    
        update user set name = '枫华' where name = #{name};
    

上述代码中可以看到我传递类型是Map,而SQL中引用参数名称是name。由此可以知道使用Map集合可以随自己的心意传递任意参数名。

测试代码

    @Test
    public void updateNameTest(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        userMapper mapper = sqlSession.getMapper(userMapper.class);
        Map map = new HashMap();
        map.put("name", "张三");
        mapper.updateNameByName(map);
        sqlSession.close();
    }

执行结果:

userMapper文件

    //根据name删除李四
    int deleteByName(String name);

userMapper.xml文件

    
        delete from user where name = #{name}
    

上述代码中可以看到我传递类型是Map,而SQL中引用参数名称是name。由此可以知道使用Map集合可以随自己的心意传递任意参数名。

测试代码

    @Test
    public void deleteByName(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        userMapper mapper = sqlSession.getMapper(userMapper.class);
        int result = mapper.deleteByName("李四");
        if (result > 0){
            System.out.println("删除成功");
        }else{
            System.out.println("删除失败");
        }
        sqlSession.close();
    }

执行结果:

细心的读者可以看到三个不同的SQL语句我传递的参数都是不一样的,但是这个不是乱写的,不同参数类型对应的写法是不一样,随文章增表一张

场景:查找出name为枫华和天使的用户全部信息
userMapper.java文件

    //查询name为枫华和天使的全部信息
    List selectByName(@Param("names")List names);

上述代码中我使用了一个注解@Param,这个注解就是传递参数的注解,它的value就是参数名,可以在SQL语句中直接使用;同时也看到了我所传递的参数是List类型的,那么在SQL中怎么应用呢?怎么遍历呢?
userMapper.xml文件

    
        select * from user;
    
包配置

包配置别名,系统会自动扫描mybatis-config.xml指定的包下面的类。使用类的非全限定名形式即可,但是建议使用全小写的形式,为了代码美观也为了区分类。
mybatis-config.xml文件

    
        
    

userMapper.xml文件

    
        select * from user;
    
映射器——mappers

映射器是Mybatis中十分重要的,其完成的是注册*Mapper.xml,使得系统能够扫描到对应的xml文件。
方式有三个:XML文件映射、class映射、package映射
映射器的映射和类型别名的映射类似,可以做练习,这里无多介绍。

总结

本篇文章内容就是这样,下一篇文章将介绍结果集映射、复杂语句时的处理以及动态SQL

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/727046.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号