小工具      在线工具  汉语词典  css  js  c++  java

mybatis实现数据库的增删查改

# MyBatis,mybatis,javaweb,xml,java-ee 额外说明

收录于:152天前

mybatis框架封装了jdbc的各种操作,极大的简化了对数据库的操纵。接下来用具体案例实现数据库的增删查改。项目及配置可以看我之前的文章mybatis基础知识映射器代理开发

项目结构及配置文件

建立如下的目录结构,并将xml配置好,可以看我之前的文章参考。新建数据库并创建表。
在这里插入图片描述
建立如下的配置文件
在这里插入图片描述
如上图两个映射类对应数据库表的两个表
在这里插入图片描述
xml的文件:(两个都要配置namespace,id,resultType,sql语句做修改)

<?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="mapper.UserMapper">    <!--不用mapper代理为路径不能随便命名-->

    <select id="selectAll" resultType="pojo.User">
        select * from tb_user;
    </select>

</mapper>

需要注意的三点:使用mapper代理时不能随便命名namespace。必须根据映射类所在的路径来命名。例如,UserMapper类位于mapper下,因此命名为mapper.UserMapper。 resultType是返回的数据类型,即javabean类。同样的原则也适用于其他映射类。

映射接口内容:(两个映射接口)

package mapper;

import pojo.User;

import java.util.List;

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

}

有三点需要注意。默认修饰符是public,注意返回值的数据类型,查询中一行的数据类型是列表元素,selectAll()是配置文件的id,也是调用的方法xml中配置的sql。陈述。其他映射类也是如此。

还要创建pojo的软件包用于编写,两个数据库表的javabean对象。
在这里插入图片描述

最后就是配置mybatis-config.xml可以看我之前的文章。要注意的最后的mappers标签要加载所有的映射对象的xml配置文件(注意路径在mapper下)。放在resources中和mapper同级。也可以直接把包加载进来
在这里插入图片描述

还有pom.xml,见上一篇文章。

mybatis增加数据

写入对应映射对象的配置文件xml中。标签的语法与sql一致。

 <!--添加语句,主键返回添加时一般无法获取当前添加的id需要设置 useGeneratedKeys="true" keyProperty="id"这两个属性就可以获取当前id了-->
    <insert id="addOneColumn" useGeneratedKeys="true" keyProperty="id" parameterType="pojo.Brand">
        insert into tb_brand(brand_name,company_name,ordered,description,status)
        values (#{brand_name},#{company_name},#{ordered},#{description},#{status})
    </insert>

#{}是一个占位符,用于替换参数,参数来自addOneColumn方法。与映射类中的List selectAll()在同一个接口;如下


void addOneColumn(Brand brand);  //数据库添加一行数据

这里传递的参数是一个javabean对象。需要在xml的insert标签中添加parameterType属性。它的值是javabean所在的路径。也可以是其他类型,比如列表、地图等,具体可以查看官网。

mybatis删除数据

xml配置

  <!--删除-->
    <delete id="deleteById">
        delete from tb_brand where id=#{id}
    </delete>

映射类方法

    //删除操作
    void deleteById(int id);

mybatis查找数据

   <select id="selectById" resultType="pojo.Brand">
        select * from tb_brand where id=#{id};
    </select>
 //根据id查询
    List<Brand> selectById(int id);

mybatis修改数据

    <!--修改-->

    <update id="updateOne">
        update tb_brand
        set
            brand_name=#{brand_name},
            company_name=#{company_name},
            ordered=#{ordered},
            description=#{description},
            status=#{status}
        where id=#{id}
    </update>
   //修改操作
    void updateOne(Brand brand);

动态sql

对于上面的操作,如果想要针对某个字段而不是全部,则需要适配mybatis提供的内置标签而不是关键字。如果修改是只修改某个字段,其他不变:

    <!--某一字段的修改动态更新不用set关键字,1是容易出现多一个逗号,2是没有数据set多余,用mybatis提供的<set>标签-->
    <update id="updateTwo">
        update tb_brand
        <set>
        <if test="brand_name!=null and brand_name!='' ">brand_name=#{brand_name},</if>

        <if test="company_name!=null and company_name!=''">company_name=#{company_name},</if>

        <if test="ordered!=null and ordered !='' ">ordered=#{ordered},</if>

        <if test="ordered !=null and ordered !='' ">description=#{description},</if>

        <if test="status !=null ">status=#{status}</if>
        </set>

        where id=#{id}
    </update>

用标签替换了原本的set关键字,用标签进行判断选择要修改的字段。详情可见mybatis官网:mybatis动态sql

调用增删查改函数

上面已经编辑和配置了函数和文件。接下来编写测试类MybatisDemo。

package mybatis;

import mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import pojo.User;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MybatisDemo {
    public static void main(String[] args) throws IOException{
        //从 XML 文件中构建 SqlSessionFactory 的实例
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;

        inputStream = Resources.getResourceAsStream(resource);

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //从 SqlSessionFactory 中获取 SqlSession
        SqlSession session = sqlSessionFactory.openSession();


        //执行sql
        //List<User> users=session.selectList("test.selectAll");
        //System.out.println(users);

        //后者不用直接执行sql而使用mapper代理开发
            //获取UserMapper接口的代理对象

        UserMapper userMapper=session.getMapper(UserMapper.class);   //获取映射对象的类
        
 
        
		//调用方法实现增删改查(处了查,其他都没有返回值,可以自定义boolean类型判断,这里没有返回值)
		
		//增(增加的一整行,所以传递的一个javabean对象,先封装对象){ordered},#{description},#{status})
		Brand brand =new Brand();
		brand.setBrand_name("淘宝");
		brand.setCompany_name("阿里巴巴");
		brand.setOrdered("30");
		brand.setDescription("阿里巴巴已由一家电子商务公司彻底蜕变为以技术驱动,包含数字商业、金融科技、智慧物流、云计算、人地关系文化娱乐等场景的平台,服务数以亿计的消费者和数千万的中小企业。");
		brand.setStatus(0);
		void userMapper.addOneColumn(brand);

		//删(删除的sql是传递id删除一整行)
		void userMapper.deleteById(3);

		//查(sql语句写的是根据id查所有,有返回值用List存储)
		  List<Brand>  users =userMapper.selectById(1);
		  System.out.println(users);

		//改(上面sql语句是根据id将一行所有数据修改,也封装在对象中)
		Brand brand1 =new Brand()
		brand.setBrand_name("淘宝");
		brand.setCompany_name("阿里巴巴");
		brand.setOrdered("30");
		brand.setDescription("阿里巴巴已由一家电子商务公司彻底蜕变为以技术驱动,包含数字商业、金融科技、智慧物流、云计算、人地关系文化娱乐等场景的平台,服务数以亿计的消费者和数千万的中小企业。");
		brand.setStatus(1);
		brand.setId(1);
		void userMapper.updateOne(brand1);
		
        //释放资源
        session.close();


    }
}

注意增删改查都要提交:session.commit();

mybatis的参数传递:
多个不同类型的参数:将参数封装为map集合,并通过param注解更改key的名称,其值就是参数的值。当只有一个参数时就不用了。

POJO参数类型:可以直接使用,只要对象的属性名和参数占位符一致即可

Map集合:Map的key与参数占位符一致,可以直接使用。

必须添加数组和列表作为数据类型。

上面的都是在xml中配置sql语句通过mapper调用或通过id调用,下面时通过注解定义sql语句,注解比配置文件更简单,不用配置任何xml文件,但是注解只能完成一些简单的sql语句,复杂的任要用xml配置文件
增删改查
@Insert
@Delete
@Update
@Select

//在mapper下的类中定义注解的sql
@Select(“select * from tb_brand where id = #{id}”)
List selet_by_id(int id);

//测试类中调用:
//获取参数
int id=3;
List user1=brandMapper.selet_by_id(id);
System.out.println(user1);
list要加上泛型,<> 中间是javabean对象,由于显示不出来,上面的就都没有。

. . .

相关推荐

额外说明

通过IIS文件上传机制将文件上传到文件服务器

对于需要经常上传文件的站点,为了保证文件安全性,不会把文件上传到站点下,而是把文件上传到指定的文件服务器,这里主要讲一下通过http协议上传文件。 http协议的文件上传,我目前接触到的又有两种方式:一是IIS文件上传机制,二是跨域文件上传。 本文主要讲

额外说明

万能密码破解工具:Hashcat密码破解攻略

来源 https://www.freebuf.com/sectool/164507.html   Hashcat密码破解 hashcat号称世界上最快的密码破解,世界上第一个和唯一的基于GPGPU规则引擎,免费多GPU(高达128个GPU),多哈希,多操

额外说明

Shiro学习之Shiro简介

Shiro学习之Shiro简介 1.Shiro简介 1.1 什么是shiro? 1.2 有哪些功能 1.3 Shiro架构(外部)架构原理 1.4 Shiro架构(内部) 1.4 为什么要用 Shiro 1.5 Shiro 与 SpringSecurit

额外说明

Unity与 DLL文件 | Mac中使用 Xcode项目使用C++生成 .dylib文件

- 博客主页:https://xiaoy.blog.csdn.net - 本文由 呆呆敲代码的小Y 原创 - - 学习专栏推荐:Unity系统学习专栏 - 游戏制作专栏推荐:游戏制作 -Unity实战100例专栏推荐:Unity 实战100例 教程 -

额外说明

JavaWeb+JSP+路径问题+跳转(HTML|Servlet|JSP)|这一篇就够了(超详细)

-作者简介:练习时长两年半的Java up主 -个人主页:老茶icon - ps:点赞-是免费的,却可以让写博客的作者开兴好久好久- -系列专栏:Java全栈,计算机系列(火速更新中) - 格言:种一棵树最好的时间是十年前,其次是现在 -动动小手,点个关

额外说明

Linux系统部署Go语言开发运行环境

在Linux系统上部署Go语言开发运行环境需要执行以下步骤: 下载Go语言安装包:打开Go官方网站(https://golang.org),在下载页面选择合适的安装包。根据系统架构选择相应的安装包(如Linux 64位),下载并保存到本地。 安装Go语言

额外说明

AWS RedShift实战应用SQL大全及经验分享[持续更新]

文章目录 前言 - 关于RedShift 一、数据维护篇 1.1 表结构操作 1.2 数据添加与查询 1.3 数据修改与删除 1.4 事物操作 二、SQL结构篇 2.1 使用with封装代码 2.2 条件判断 三、常用的函数篇 3.1 类型转化 3.2

额外说明

Greenplum【集群搭建 01】局域网 CentOS 7.9.2009 环境 GreenPlum 6.13.0 集群规划+配置+安装+内核参数调整(应用实例分享)

1.部署环境 局域网已配置ip、ntp时间同步、yum源,服务器版本为CentOS Linux release 7.9.2009 (Core),安装文件为greenplum-db-6.13.0-rhel7-x86_64.rpm。 2.集群规划 IP 主机

额外说明

Windows系统丢失tquery.dll文件导致程序异常问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个tquery.dll文件(挑

额外说明

【24种设计模式】责任链模式

责任链模式是一种行为设计模式,允许您沿着处理链传递请求,直到处理程序能够处理该请求。此模式将请求的发送者和接收者解耦,使多个对象有机会处理请求。 责任链模式的结构 责任链模型由以下角色组成: 抽象处理程序(Handler):定义处理请求的接口,并维护下一

ads via 小工具