本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出1便就懂!b站搜索狂神说即可

https://space.bilibili.com/95256449?spm_id_from=333.788.b_765f7570696e666f.2

MyBatis中的基本CRUD

接上一篇博客:https://www.cnblogs.com/renzhongpei/p/12559788.html

修改图中的类

Mapper接口

package com.rzp.dao;

import com.rzp.pojo.User;

import java.util.List;

public interface UserMapper {
   List<User> getUserList();

   //根据ID查询用户
   User getUserById (int id);

   //insert 一个用户
   void addUser(User user);

   //update 一个用户
   void updateUser(User user);

   //delete 一个用户
   void deleteUser(int id);
}

Mapper.xml

<?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.rzp.dao.UserMapper">
   <select id="getUserList" resultType="com.rzp.pojo.User">
   select * from mybatis.user
   </select>
   
   <!--id是对应的方法名字,parameterType是输入参数的类型-->
   <select id="getUserById" resultType="com.rzp.pojo.User" parameterType="int">
   <!-- #{id}是实体类的属性,只要属性名字一样就能完成-->
   select * from mybatis.user t where t.id = #{id}
   </select>

   <insert id="addUser" parameterType="com.rzp.pojo.User" >
       insert into mybatis.user (id,name,pwd) value (#{id},#{name},#{pwd});
   </insert>

   <update id="updateUser" parameterType="com.rzp.pojo.User">
       update mybatis.user set name = #{name}, pwd = #{pwd} where  id = #{id};
   </update>

   <delete id="deleteUser"  parameterType="int">
       delete from mybatis.user where id = #{id};
   </delete>


</mapper>

测试程序UserDaoTest

按方法测试即可

    
   //按ID查询
   @Test
   public void getUserById(){
       SqlSession sqlSession = MybatisUtils.getSqlSession();
       try {
           UserMapper mapper = sqlSession.getMapper(UserMapper.class);
           User user = mapper.getUserById(1);
           System.out.println(user);
      }catch (Exception e){
           e.printStackTrace();
      }finally {
           sqlSession.close();
      }
  }

   //增删改需要提交事务
   //增加
   @Test
   public void addUser(){
       SqlSession sqlSession = MybatisUtils.getSqlSession();
       try {
           UserMapper mapper = sqlSession.getMapper(UserMapper.class);
           User user = new User(6,"rzp3","312");
           mapper.addUser(user);
           int x = 1/0;

           //提交事务
           sqlSession.commit();
      }catch (Exception e){
           e.printStackTrace();
           //错误则回滚,其实不需要,程序已经封装好会回滚
           sqlSession.rollback();
      }finally {
           sqlSession.close();
      }
  }
   
   //更新
   @Test
   public void updateUser(){
       SqlSession sqlSession = MybatisUtils.getSqlSession();
       try {
           UserMapper mapper = sqlSession.getMapper(UserMapper.class);
           User user = new User(3,"cys","31112");
           mapper.updateUser(user);

           //提交事务
           sqlSession.commit();
      }catch (Exception e){
           e.printStackTrace();
           //错误则回滚,其实不需要,程序已经封装好会回滚
           sqlSession.rollback();
      }finally {
           sqlSession.close();
      }

  }
   
   //删除
   @Test
   public void deleteUser(){
       SqlSession sqlSession = MybatisUtils.getSqlSession();
       try {
           UserMapper mapper = sqlSession.getMapper(UserMapper.class);
           mapper.deleteUser(5);

           //提交事务
           sqlSession.commit();
      }catch (Exception e){
           e.printStackTrace();
           //错误则回滚,其实不需要,程序已经封装好会回滚
           sqlSession.rollback();
      }finally {
           sqlSession.close();
      }

  }
 

注意:Mapper.xml配置错误(比如类名、方法名写错了)也会导致sqlSession生成的时候就报错!这个时候IDEA提示的错误会链接向sqlSession生成那一行。

使用Map来简化传参的操作

  • 数据库字段多的时候,如果只是修改其中一个两个字段,但是如果用上文的UPDATE,就要new一个实体类,操作比较麻烦。这时候可以使用map。

UserMapper接口

    //万能的map
   void addUser2(Map<String,Object> map);

UserMapper.xml

    <insert id="addUser2" parameterType="map" >
       <!--传入参数是map,用#{}取参数的时候就是按照map的key值来获取-->
       insert into mybatis.user (id,name,pwd) value (#{userid},#{username},#{password});
   </insert>

测试类

    //更新
   @Test
   public void updateUser2(){
       SqlSession sqlSession = MybatisUtils.getSqlSession();
       try{
           UserMapper mapper = sqlSession.getMapper(UserMapper.class);
           Map map = new HashMap();
           map.put("userid",5);
           map.put("username","cyy2");
           map.put("password","3212");
           mapper.addUser2(map);
           sqlSession.commit();
      }catch (Exception e){

      }finally {
           sqlSession.close();
      }
  }
  • 这里虽然使用insert作为例子,而且传了所有参数,但是显然改成update并且只传ID和要修改的参数也是可以的。

  • 同理,也可以用在select中,传多个参数查询

Mybatis中的Like查询

  • 模糊查询的两种写法

  1. 在执行的时候传递通配符

    User user = mapper.getUserById("%1%");
  1. 在xml文件中使用通配符

    select * from mybatis.user t where t.id like "%"#{id}"%"

MyBatis(二):基础CRUD的更多相关文章

  1. mybatis(二)执行CRUD操作的两种方式配置和注解

    一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...

  2. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...

  3. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...

  4. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    一.使用MyBatis对表执行CRUD操作--基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: 1 <?xml version="1.0&q ...

  5. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...

  6. 【转】MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    [转]MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据, ...

  7. Mybatis的学习总结二:使用Mybatis对表进行CRUD操作【参考】

    一.使用Mybatis对表进行CRUD操作------基于XML的实现 1.定义SQL的映射文件 2.在conf.xml中进行注册. 2.创建测试类 [具体过程参考:Mybatis的学习总结一] 二. ...

  8. MyBatis学习笔记(二)——使用MyBatis对表执行CRUD操作

    转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4262895.html 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用My ...

  9. 二:MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...

  10. 【Mybatis】MyBatis对表执行CRUD操作(三)

    本例在[Mybatis]MyBatis配置文件的使用(二)基础上继续学习对表执行CRUD操作 使用MyBatis对表执行CRUD操作 1.定义sql映射xml文件(EmployeeMapper.xml ...

随机推荐

  1. flask连接数据库的URI书写格式

    1. MySQL mysql://username:password@hostname/database 2. PostgreSQL postgresql://username:password@ho ...

  2. SpringCloud之Hystrix服务降级入门全攻略

    理论知识 Hystrix是什么? Hystrix是由Netflix开源的一个服务隔离组件,通过服务隔离来避免由于依赖延迟.异常,引起资源耗尽导致系统不可用的解决方案.这说的有点儿太官方了,它的功能主要 ...

  3. java-3个例子(新手)

    //创建的一个包名. package ri0318; //创建的一个类. public class Li3 { //公共静态的主方法. public static void main(String[] ...

  4. golang socket编程 net.Conn IO.EOF解读

    结论 首先,先定义下我的理解,当在Read时,收到一个IO.EOF,代表的就是对端已经关闭了发送的通道,通常来说是发起了FIN. 那么根据自己的实际业务,就可以进行判断,这里的IO.EOF到底该怎么利 ...

  5. pandas 的常用方法

    pandas的常用方法: 1.数据输入 2.数据查看 3.数据清洗 4.数据处理 5.数据提取 6.数据筛选 7.数据汇总 8.数据统计 9.数据输出 详情见: https://blog.csdn.n ...

  6. 【原创】(六)Linux进程调度-实时调度器

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  7. swift 网络请求中含有特殊字符的解决方案

    在网络请求时,URL出现中文或特殊字符时会造成请求失败,通常可使用  addingPercentEncoding(withAllowedCharacters: CharacterSet) 方法进行解决 ...

  8. Linux - 文件的三种时间之atime、ctime、mtime的区别和简单用法

    在Linux中,文件或者目录中有三个时间属性 atime ctime mtime 简名 全名 中文 作用 atime Access Time 访问时间 最后一次访问文件(读取或执行)的时间 ctime ...

  9. 多GPU使用详解

    目录: 介绍 记录设备状态 手动分配状态 允许GPU内存增长 在多GPU系统是使用单个GPU 使用多个 GPU 一.介绍 在一个典型的系统中,有多个计算设备.在 TensorFlow 中支持的设备类型 ...

  10. HIT软件构造课程3.2总结(Designing Specificaton)

    本节转向“方法/函数/操作”如何定义 上一节是名词 这一节是动词 1.编程语言中的函数和方法 方法 使用者不需要知道方法内部如何实现,这叫做“抽象”. 参数 参数类型是否匹配,在静态检查时完成. 返回 ...