草庐IT

springboot mybatis+mapper.xml 零基础教程

xq9527 2023-03-28 原文

前言:

各位同学大家好, 有段时间没有给大家更新博客, 具体多久我就不记得了。 今天我们讲一下spingboot +mybatis+xml
零基础教程

准备工作

1安装好idea 或者eclispe +sts开发环境
2安装maven 并配置环境
怎么使用idea 这个工具一键创建springboot工程
这些在我之前的教程都讲的很清楚 这里我就不展开细说 有兴趣的同学可以去看我以前的文章】
Springboot搭建零基础教程:https://www.jianshu.com/p/c48595fdbf39

需要用到三方库

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>


        <!--java -web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--数据库依赖-->

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!--  数据库连接池      -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.4</version>
        </dependency>


        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        

        <!--mybatis依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!--gson-->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.0</version>
        </dependency>
        <!--log4j2-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <!-- 验证码 -->
        <dependency>
            <groupId>com.github.whvcse</groupId>
            <artifactId>easy-captcha</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.vaadin.external.google</groupId>
            <artifactId>android-json</artifactId>
            <version>0.0.20131108.vaadin1</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>net.minidev</groupId>
            <artifactId>json-smart</artifactId>
        </dependency>

application.ymal 的配置 如下图:

server:
  port: 8085
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/mybdtisdemo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2b8&allowPublicKeyRetrieval=true
    username: root
    password: 123456
  #配置Mapper.xml映射文件
mybatis:
  type-aliases-package: com.example.mybatisxmldmeo   #   别名
  mapper-locations: classpath:/mybatis/*.xml   #   xml文件

准备按设置了utf-8编码和 serverTimezone=UTC 和时区 以及数据库账号和密码 jdbc 驱动 这些都配置好以后我们启动一下


image.png

我们测试启动

image.png

我们看到有数据返回了

具体实现

  • 1创建bean类(数据模型)

package com.example.mybatisxmldmeo.bean;



public class User {
    private Integer id;
    private String name;
    private String password;
    private String age;
    private String sex;

    public Integer getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}
  • 2创建 Mapper类

package com.example.mybatisxmldmeo.dao;

import com.example.mybatisxmldmeo.bean.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository   // 将userdao交由spring容齐管理
public interface UserDao {

    public List<User> getallUser();
    public User getuserbyId(Integer id);
    int addUser(User user);
    public User getuserbyname(String name);
    public  int  upDatePassword(@Param("name") String name,
                                @Param("password") String password);
    int  deleteUser(@Param("id")Integer id);
     public List<User>getallUserlimit(@Param("curPage") Integer curPage,@Param("pageSize") Integer pageSize);
    public List<User>getallUserLike(@Param("name") String name);
    List<User>getUserbyNameAndsex(@Param("name") String name, @Param("sex")String sex);
    List<User>getUserByNameAndAge(@Param("name") String name ,@Param("newname")String newname,
                                  @Param("age")String age);
}

  • 3 UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatisxmldmeo.dao.UserDao">
     <!--查询整个表-->
    <select id="getallUser"  resultType="com.example.mybatisxmldmeo.bean.User">
        select * from  user;
    </select>
    <!--根据头id 查询-->
    <select id="getuserbyId" parameterType="int" resultType="com.example.mybatisxmldmeo.bean.User">
        select * from user where  id=#{id}
    </select>
    <!--删除数据-->
    <delete id="deleteUser" parameterType="int">
        delete from user where id=#{id}
    </delete>
    <!--插入数据-->
    <insert id="addUser" parameterType="com.example.mybatisxmldmeo.bean.User">
        insert into user(name, password,age,sex) values (#{name},#{passwrod},#{age},#{sex})
    </insert>
</mapper>
  • 3创建service 层

package com.example.mybatisxmldmeo.service;


import com.example.mybatisxmldmeo.bean.User;

import java.util.List;

public interface UserService {
    public List<User> getallUser();
    public User getuserbyId(Integer id);
    int addUser(User user);
    public User getuserbyname(String name);
    public  String  upDatePassword(String name, String password, String newpsw);
    int  deleteUser(Integer id);
    public List<User>getallUserlimit(Integer curPage,Integer pageSize);
    public List<User>getallUserLike( String name);
    List<User>getUserbyNameAndsex(String name,String sex);
    List<User>getUserByNameAndAge( String name ,String newname,
                                 String age);
}
  • 4处理service 层 实现层 impl层

package com.example.mybatisxmldmeo.service.impl;

import com.example.mybatisxmldmeo.bean.User;
import com.example.mybatisxmldmeo.dao.UserDao;
import com.example.mybatisxmldmeo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;


@Service(value = "userService")
public class UserServiceimpl implements UserService {

    @Autowired
    UserDao userDao;

    @Override
    public List<User> getallUser() {
        return userDao.getallUser();
    }


    /**
     * @param id
     * @return
     * 通过头id查询数据
     *
     *
     */
    @Override
    public User getuserbyId(Integer id) {
        return userDao.getuserbyId(id);
    }


    /**
     * @param user
     * @return
     * 添加数据
     */
    @Override
    public int addUser(User user) {
        return userDao.addUser(user);
    }


    //通过用户名查询数据
    @Override
    public User getuserbyname(String name) {
        return null;
    }


    /**
     * @param name
     * @param password
     * @return
     * 更新数据
     *
     */
    @Override
    public String upDatePassword(String name, String password, String newpsw) {
          User user=userDao.getuserbyname(name);
          if(user!=null){
            if(user.getPassword().equals(password)){
                  userDao.upDatePassword(name,newpsw);
                return "success";
              }else{
                  return "defeated";
              }
          }else{
              return  "fail";
          }
    }

    @Override
    public int deleteUser(Integer id) {
        return userDao.deleteUser(id);
    }
    /**
     *
     * @param curPage
     * @param pageSize
     * @return
     * 分页查询
     *
     */
    @Override
    public List<User> getallUserlimit(Integer curPage, Integer pageSize) {
        return userDao.getallUserlimit(curPage,pageSize);
    }
    /**
     * @param name
     * @return
     * 模糊查询
     *
     */
    @Override
    public List<User> getallUserLike(String name) {
        return userDao.getallUserLike(name);
    }
    /**
     * @param name
     * @param sex
     * @return
     *  多条件查询  需要传入 name sex等字段变量
     *
     */
    @Override
    public List<User> getUserbyNameAndsex(String name, String sex) {
        return userDao.getUserbyNameAndsex(name,sex);
    }
    /***
     *
     *
     * @param name
     * @param newname
     * @param age
     * @return
     */
    @Override
    public List<User> getUserByNameAndAge(String name, String newname, String age) {
        return userDao.getUserByNameAndAge(name,newname,age);
    }
}

controller 层具体业务逻辑实现:

  • 查询所有数据

   @RequestMapping("/getalluser")
    public  Object getAllUser(){
        List<User>data=userservice.getallUser();
        Map<String,Object>map=new HashMap<>();
        if(data!=null&&data.size()>0){
            map.put("code",200);
            map.put("msg","获取数据成功");
            map.put("data",data);
        }else{
            map.put("code",100);
            map.put("msg","暂时没有数据");
        }
        return  map;

    }

我们打开postman测试请求一下


image.png

2.2查询单条数据 根据头id区查询数据

    @RequestMapping("/getusetbyid")
    public  Object getUserById(@RequestParam(value = "id") Integer id){
        User user=userservice.getuserbyId(id);
        Map<String,Object>map=new HashMap<>();
        if(user!=null){
            map.put("code",200);
            map.put("msg","获取数据成功");
            map.put("user",user);
        }else{
            map.put("code",100);
            map.put("msg","暂时没有数据");
        }
        return  map;
    }
image.png

删除单条数据 根据头id区删除数据

@RequestMapping("/deleteuser")
    public  Object deleteUser(@RequestParam(value = "id")Integer id){
        Map<String,Object>map=new HashMap<>();
        User user=userservice.getuserbyId(id);
        if(user!=null){
            int deletecode=userservice.deleteUser(id);
            if(deletecode==1){
                map.put("code",200);
                map.put("msg","删除数据成功");
            }else {
                map.put("code",100);
                map.put("msg","删除数据失败");
            }
        }else{
            map.put("code",101);
            map.put("msg","不存在该条数据");
        }
        return map;
    }

查询删除之前数据

image.png

查看删除效果

image.png

查询删除之后的数据

image.png

最后总结

mybatis相对于过去 java web jsp和简单的SpringDataJPA 框架算是一个折中的方案 之前有讲到用注解方式访问数据库 现在这边改成xml形式来编写sql 语句 然后配合springboot+ mybatis 来访问数据库
当然你也可以用mybatis 逆向工程xml的形势来写业务逻辑的sql语句 这里篇幅有限我就不展开讲了,我们后期会讲到, 有兴趣的同学可以底下留言, 最后希望我的文章能帮助到各位解决问题 ,以后我还会贡献更多有用的代码分享给大家。各位同学如果觉得文章还不错 ,麻烦给关注和star,小弟在这里谢过啦

有关springboot mybatis+mapper.xml 零基础教程的更多相关文章

  1. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  2. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  3. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  4. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  5. ruby - 在 RUBY 上的 PADRINO 框架上使用 RSPEC 进行测试的教程 - 2

    我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa

  6. ruby-on-rails - 如何在 Rails 3 中禁用 XML 解析 - 2

    我想禁用HTTP参数的自动XML解析。但我发现命令仅适用于Rails2.x,它们都不适用于3.0:config.action_controller.param_parsers.deleteMime::XML(application.rb)ActionController::Base.param_parsers.deleteMime::XMLRails3.0中的等价物是什么? 最佳答案 根据CVE-2013-0156的最新安全公告你可以将它用于Rails3.0。3.1和3.2ActionDispatch::ParamsParser::

  7. ruby - 如何使用 Nokogiri::XML::Builder 生成动态标签? - 2

    我正在遍历数组中的一组标签名称,我想使用构建器打印每个标签名称,而不是求助于“我认为:builder=Nokogiri::XML::Builder.newdo|xml|fortagintagsxml.tag!tag,somevalendend会这样做,但它只是创建名称为“tag”的标签,并将标签变量作为元素的文本值。有人可以帮忙吗?这个看起来应该比较简单,我刚刚在搜索引擎上找不到答案。我可能没有以正确的方式提问。 最佳答案 尝试以下操作。如果我没记错的话,我添加了一个根节点,因为Nokogiri需要一个。builder=Nokogi

  8. ruby - 如何让 Nokogiri 解析并返回 XML 文档? - 2

    这是一些奇怪的例子:#!/usr/bin/rubyrequire'rubygems'require'open-uri'require'nokogiri'print"withoutread:",Nokogiri(open('http://weblog.rubyonrails.org/')).class,"\n"print"withread:",Nokogiri(open('http://weblog.rubyonrails.org/').read).class,"\n"运行此返回:withoutread:Nokogiri::XML::Documentwithread:Nokogiri::

  9. 区块链入门教程(6)--WeBASE-Front节点前置服务安装 - 2

    文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定

  10. ruby - 模式加载时出现 Nokogiri::XML::Schema SyntaxError - 2

    我正在尝试加载SAML协议(protocol)架构(具体来说:https://www.oasis-open.org/committees/download.php/3407/oasis-sstc-saml-schema-protocol-1.1.xsd),但在执行此操作之后:schema=Nokogiri::XML::Schema(File.read('saml11_schema.xsd'))我得到这个输出:Nokogiri::XML::SyntaxErrorException:Element'{http://www.w3.org/2001/XMLSchema}element',att

随机推荐