springboot mybatis+mapper.xml 零基础教程

前言:

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

准备工作

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

需要用到三方库

    
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        


        
        
            org.springframework.boot
            spring-boot-starter-web
        
        

        
            mysql
            mysql-connector-java
            runtime
        

        
        
            com.alibaba
            druid
            1.2.4
        


        
            org.projectlombok
            lombok
        
        

        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            1.1.1
        
        
        
            com.google.code.gson
            gson
            2.8.0
        
        
        
            org.springframework.boot
            spring-boot-starter-log4j2
        
        
        
            com.github.whvcse
            easy-captcha
            1.6.2
        
        
            org.mybatis
            mybatis
            3.4.1
        
        
            com.vaadin.external.google
            android-json
            0.0.20131108.vaadin1
            compile
        
        
            net.minidev
            json-smart
        

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 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 ListgetallUserlimit(@Param("curPage") Integer curPage,@Param("pageSize") Integer pageSize);
    public ListgetallUserLike(@Param("name") String name);
    ListgetUserbyNameAndsex(@Param("name") String name, @Param("sex")String sex);
    ListgetUserByNameAndAge(@Param("name") String name ,@Param("newname")String newname,
                                  @Param("age")String age);
}

  • 3 UserMapper.xml




     
    
    
    
    
    
        delete from user where id=#{id}
    
    
    
        insert into user(name, password,age,sex) values (#{name},#{passwrod},#{age},#{sex})
    

  • 3创建service 层

package com.example.mybatisxmldmeo.service;


import com.example.mybatisxmldmeo.bean.User;

import java.util.List;

public interface UserService {
    public List 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 ListgetallUserlimit(Integer curPage,Integer pageSize);
    public ListgetallUserLike( String name);
    ListgetUserbyNameAndsex(String name,String sex);
    ListgetUserByNameAndAge( 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 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 getallUserlimit(Integer curPage, Integer pageSize) {
        return userDao.getallUserlimit(curPage,pageSize);
    }
    /**
     * @param name
     * @return
     * 模糊查询
     *
     */
    @Override
    public List getallUserLike(String name) {
        return userDao.getallUserLike(name);
    }
    /**
     * @param name
     * @param sex
     * @return
     *  多条件查询  需要传入 name sex等字段变量
     *
     */
    @Override
    public List getUserbyNameAndsex(String name, String sex) {
        return userDao.getUserbyNameAndsex(name,sex);
    }
    /***
     *
     *
     * @param name
     * @param newname
     * @param age
     * @return
     */
    @Override
    public List getUserByNameAndAge(String name, String newname, String age) {
        return userDao.getUserByNameAndAge(name,newname,age);
    }
}

controller 层具体业务逻辑实现:

  • 查询所有数据

   @RequestMapping("/getalluser")
    public  Object getAllUser(){
        Listdata=userservice.getallUser();
        Mapmap=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);
        Mapmap=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){
        Mapmap=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 零基础教程)