首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Mybatis 框架学习(二)—— 简单CRUD的实现

Mybatis 框架学习(二)—— 简单CRUD的实现

作者头像
RAIN7
发布于 2022-06-12 06:04:45
发布于 2022-06-12 06:04:45
41200
代码可运行
举报
运行总次数:0
代码可运行

Mybatis 框架学习(二)—— 简单CRUD的实现

文章目录

一、Mybatis CRUD

以上面建立的user表为例,我们来实现使用mybatis操作数据库的增删改查操作

通过这个CRUD的操作,我们能很明确的感觉到mybatis操作数据库比 JDBC操作数据库的简洁明了

1.接口中定义方法

在上面的查询功能完成之后,在UserMapper 接口中定义增删改的方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.bit.mapper;

import com.bit.pojo.User;

import java.util.List;

public interface UserMapper {
    // 查询所有用户
    List<User> getUserList();

    // 查询一个指定id的用户
    User getUserbyId(int id);

    // 增加一个用户
    int insertUser(User user);

    // 根据id删除一个用户
    int deleteUser(int id);

    //修改一个用户的所有信息
    int UpdateUser(User user);
}

2.xml 实现方法

在UserMapper定义了方法之后,就需要在 UserMappper.xml文件中实现对应的方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bit.mapper.UserMapper">


<!--    -->
    <select id="getUserList" resultType="com.bit.pojo.User">
        select * from mybatis.user
    </select>

<!--  对应UserMapper接口中的getUserById方法,返回类型是 user全限定名,参数类型parameterType为 int-->
    <select id="getUserbyId" resultType="com.bit.pojo.User" parameterType="int">
        select * from user where id=#{id}
    </select>

<!-- 对应UserMapper接口中的insertUser方法,参数类型是parameterType为 User全限定名   -->
    <insert id="insertUser" parameterType="com.bit.pojo.User">
        insert into user values(#{id},#{name},#{pwd})
    </insert>

<!--对应UserMapper接口中的deleteUser方法,参数parameterType设置成int    -->
    <delete id="deleteUser" parameterType="int" >
        delete from user where id =#{id}
    </delete>


<!--    对应UserMapper接口中的 UpdateUser方法,参数parameterType使用全限定名-->
    <update id="UpdateUser" parameterType="com.bit.pojo.User">
        update user set name=#{name},pwd=#{pwd} where id=#{id}
    </update>
</mapper>

3.#{} 的使用

#{} ,{}里面对应的是我们传入的参数,所以写到里面的时候要和形参保持一致,顺序一致,名字一致。

接口定义方法,xml文件实现方法。

4.测试接口

我们都写完之后,在上一个过程中我们已经把mapper.xml注册到 mybatis-config.xml 核心配置文件中了,所以可以直接测试各个接口的功能是否正常

测试的过程很重要,因为我们刚开始学,会犯各种低级的错误,sql编写错误,接口写错了,返回类型写错了,参数类型写错了等等等,所以没写完一个接口之后,一定要到Test目录下,进行test测试

测试过程说一下

安装junit依赖,在test目录下建立一样的文件结构,然后建一个类,在这个类中编写测试方法,加上@Test注解,然后就可以运行了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.bit.mapper;

import com.bit.pojo.User;
import com.bit.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.*;
import java.util.List;

public class UserMapperTest {

    @Test
    public void selectAll(){

        SqlSession sqlSession = MybatisUtil.getSqlSession();
  
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        
        List<User> user = userMapper.getUserList();
        for (User user1:user) {
            System.out.println(user1);
        }
        // 记得关闭 资源
        sqlSession.close();
    }

    @Test
    public void getUserbyId(){
    
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        
        User user = userMapper.getUserbyId(1);
        
        System.out.println(user);
        sqlSession.close();
    }

    @Test
    public void insertUser(){
        SqlSession sqlSession =  MybatisUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        userMapper.insertUser(new User(0,"唐三藏","1111"));

        // 增删改都要手动提交事务,JDBC是默认自动提交实务的,或者在创建sqlSession设置参数为true就可以自动提交事务了
//        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void deleteUser(){
        SqlSession sqlSession =MybatisUtil.getSqlSession();
        UserMapper userMapper  = sqlSession.getMapper(UserMapper.class);
        userMapper.deleteUser(1);
        sqlSession.close();
    }

    @Test
    public void updateUser(){
        // 先拿到sqlSession对象
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        userMapper.UpdateUser(new User(2,"java","0000000"));

        sqlSession.close();
    }


}

5.提交事务

1.sqlSession.commit()

还有一点非常重要,增删改都需要提交事务才能正常的在数据库中执行命令,mybatis建立sqlSession时默认没有开启自动提交事务,所以我们可以手动的提交事务

在执行了UserMapper接口的方法之后,调用SqlSession.commit() 提交事务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sqlSession.commit()

提交完事务之后记得关闭 sqlSession 资源

2.在建立sqlSession的时候写入参数true,开启自动提交事务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SqlSession sqlSession = SqlSessionFactory.openSession(true);

二、万能Map

在上面的CRUD中传参,还有另外一种方式,用map传参

map传参,我们不需要按照传入对象的属性名字 实现方法了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <insert id="insertUser" parameterType="com.bit.pojo.User">
        insert into user values(#{id},#{name},#{pwd})
    </insert>

这里传入的是user类型的参数,所以具体的参数只能和User对象中的属性对应,名字得一致

但是使用map就无所谓了,我们可以自定义参数的名字

还是拿insert举例子,我们用map进行传参

1.接口中的 insert2 传入 map参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 int insertUser2(Map<String,Object> map);

2.在测试方法里面自定义map的键值对

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Test
    public void insertUser2(){
        SqlSession sqlSession =  MybatisUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        Map<String ,Object> map = new HashMap<String, Object>();
        map.put("userid",0);
        map.put("username","孙悟空");
        map.put("password",27451314);

        userMapper.insertUser2(map);
        sqlSession.close();

    }

给这个map 传入 键值对,键可以自定义名称,值也是填入对应的值

然后将map传入到 方法里

3.xml 配置方法参数

xml对应的标签里面,根据传入的map,参数填map的键名称(自定义的),最后就相当于传入的是 对应的值。

这就和user对象的属性名字不一样了,可以自定义参数的名字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   <insert id="insertUser2" parameterType="map">
        insert into user values(#{userid},#{username},#{password})
    </insert>

4.执行测试方法

执行test方法,查看操作数据库是否成功。

map在工作当中还是很常用的,所以要好好掌握。

5.传参总结

如果对象传递参数,那么sql 取的是 对象的属性

如果map传递参数,那么sql取的是 map的key

三、Mybatis 模糊查询

1.Java代码在传参的时候就把 通配符 % 给传递进去

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  List<Student> list = studentMappper.getStudentLike("%陈%");

2.在xml文件中的sql语句中拼接通配符

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  List<Student> list = studentMappper.getStudentLike("陈");
  
  <select id="getStudentLike" resultType="pojo.Student">
        select * from student where name like "%"#{value}"%"
    </select>                                                     
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Mybatis—CURD以及模糊查询
配置文件中namespace中的名称为对应Mapper接口或者Dao接口的完整包名,必须一致!
Albert_xiong
2021/06/21
5450
Mybatis—CURD以及模糊查询
MyBatis 从入门到精通:CRUD操作详解
在 MyBatis 中,namespace 的包名要和 DAO/Mapper 接口的包名一致!
默 语
2024/11/20
1310
MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
一、使用MyBatis对表执行CRUD操作——基于XML的实现 1、定义sql映射xml文件 userMapper.xml文件的内容如下: 1 <?xml version="1.0" encodi
一枝花算不算浪漫
2018/05/18
7040
Mybatis第二篇| CRUD,这才是程序员入门第一课
增删改查(CRUD)是程序员必会的技能,我们大部分的时间也都是消耗在增删改查上,当然我们不能只做一个只会CRUD的程序员,当我们掌握并且熟练了CRUD后,我们可以对CRUD进行进一步的优化。这篇文章主要讲解的是如何通过Mybatis来实现CRUD。
Python进击者
2020/04/02
7230
使用MyBatis对表执行CRUD操作
  需要说明的是,我们不需要针对UserMapperI接口去编写具体的实现类代码,这个具体的实现类由MyBatis帮我们动态构建出来,我们只需要直接拿来使用即可。
Isaac Zhang
2019/09/11
4600
Mybatis-02 CRUD
创建一个新user,id:1、name:李、pwd:1456,通过sql操作,加入数据库。
张小驰出没
2021/04/15
3670
Mybatis-02  CRUD
Mybatis学习笔记(二)Mapper的配置问题
学到今天发现Maper主要有两种一种是mapper.xml还有一种就是mapper.interface 大多数用的都是mapper.xml来进行操作 第一种mapper.xml文件中首先要定义的就是该mapper的namespace属性,类似于id一样,就是标识他唯一,之后就可以定义其中的许多标签比如select,delete等等, 一般普通的都具有id,parameterType等属性id就是一般的标识唯一,parameterType就是标识的参数类型 但是当是select标签的时候就会有返回类型,这之后又有两种了,一种是resultType就是简单的可以直接写出来的对象,另一种就是resultMap,这种返回的其实也是一个对象,但是可以对其进行映射 第二种mapper.interface,这就是一个接口,实现起来比mapper.xml要简单一些,只需要重载该接口中的insert,delete等方法即可 接下来就是两者在conf.xml文件中的配置了,也是今天困扰我很久的一个问题 如果是interface文件,配置起来就如下:
萌萌哒的瓤瓤
2020/08/26
4360
Mybatis框架学习(一)——我的第一个Mybatis程序
刚开始接触一定要跟着Mybatis的官方文档入门学习,同时先不要想mybatis 和 spring的整合啥的,咱就先把mybatis单独拿出来,学习他的使用。
RAIN7
2022/06/12
3870
Mybatis框架学习(一)——我的第一个Mybatis程序
SSM-Mybatis(1)[通俗易懂]
注意 maven中的约定的事/src/main/resources中的配置文件会被导出,但是我们写的实现类xml文件在/src/main/java下,maven默认是不会导出的,所以需要手动配置
全栈程序员站长
2022/09/21
2710
SSM-Mybatis(1)[通俗易懂]
4、如何利用注解进行 MyBatis 开发
之前的实例中,利用 MyBatis 进行开发时,一旦添加新的方法,则每次都需要在 XML 配置文件中进行映射。而现在随着注解开发的大肆流行,MyBatis 3 也提供了基于注解的配置。但是通过注解的方式表达力和灵活性有限,必要时要是需要通过 mapper 配置文件来进行构建,常用的注解主要用如下几个:
村雨遥
2022/06/16
2970
4、如何利用注解进行 MyBatis 开发
【Mybatis 入门指北】2、Mybatis 入门实例及 CRUD
上一篇文章中我们讲了什么是持久化以及 Mybatis 的相关简介,今天就来看看如何创建一个 Mybatis 入门实例以及如何利用 Mybatis 进行 CRUD。
村雨遥
2022/06/16
3770
【Mybatis 入门指北】2、Mybatis 入门实例及 CRUD
用注解实现 MyBatis 开发
之前的实例中,利用 MyBatis 进行开发时,一旦添加新的方法,则每次都需要在 XML 配置文件中进行映射。而现在随着注解开发的大肆流行,MyBatis 3 也提供了基于注解的配置。但是通过注解的方式表达力和灵活性有限,必要时要是需要通过 mapper 配置文件来进行构建,常用的注解主要用如下几个:
村雨遥
2020/07/21
3830
SSM之Mybatis的学习
官方中文文档:https://mybatis.org/mybatis-3/zh/configuration.html#typeAliases
Rochester
2020/09/01
6590
SSM之Mybatis的学习
Mybatis 框架学习(四)——如果世界真的那么简单就好了
就是说我们在java代码中要写一个pojo类,与数据库表的字段相对应,必须名字相同。
RAIN7
2022/06/15
3100
Mybatis 框架学习(四)——如果世界真的那么简单就好了
Mybatis系列第四讲 Mybatis使用详解(2)
SqlSession相当于一个连接,可以使用这个对象对db执行增删改查操作,操作完毕之后需要关闭,使用步骤:
易兮科技
2020/09/26
6940
java之mybatis之使用mybatis实现crud操作
目录结构: 1.封装 mybatis 的工具类: MybatisUtil.java public class MybatisUtil { private static SqlSessionFa
Vincent-yuan
2019/09/11
4350
java之mybatis之使用mybatis实现crud操作
mybatis 实现增删改
reyeye
2023/10/13
2090
mybatis 实现增删改
MyBatis 实现数据的增删改查
1. 查询操作 select 1.1 根据各属性来查询用户 在 UserDao 中添加对应方法: /** * @param name 用户名 * @return 对应用户名的用户对象 * @description 根据用户名获取用户 * @date 2020/7/14 14:52 * @author cunyu1943 * @version 1.0 */ User getUserByName(String name); /** * @param password 密码 * @return 对应密码的用户对
村雨遥
2020/07/21
6680
Mybatis学习笔记
单个参数:不会做特殊处理,不管写什么直接映射进去,可用基本类型,也可传pojo 多个参数时:会特殊处理,将多参数处理成map,#{}就是从map集合中获取指定的key,所以获取的时候会有提示 `Parameter 'id' not found. Available parameters are [arg1, arg0, param1, param2]` 默认--即参数可写arg1,arg2,arg3.....,或者param1,param2,param3....,现在的版本已经不用索引了,看版本把 map封装--在传参的时候明确写出参数名字,因为mybatis对参数是做map封装处理的 @param注解--key:@param注解来指定的值,#{指定的key},取出参数值,注解放在接口的方法的形参中 使用TO--来封装传输对象 pojo封装--属性是在pojo内部所有的 注意:如果传参是Collection、List或者数组,则不能用arg1,param1,使用的时候需要#{list[0]}、#{array[0]},因为mybatis会自动封装,多此一举? #{}和${}, #只能用于条件参数位置中的位置,而$能用于拼接任何地方的,比如下面只能用${} SELECT * FROM ${} ;
晚上没宵夜
2020/03/10
4730
MyBatis系列第3篇:Mybatis使用详解(1)
Mybatis系列目标:从入门开始开始掌握一个高级开发所需要的Mybatis技能。
路人甲Java
2019/12/10
6840
MyBatis系列第3篇:Mybatis使用详解(1)
推荐阅读
相关推荐
Mybatis—CURD以及模糊查询
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档