• Spring Boot整合MyBatis进行数据库的操作


    1、MyBatis简介

    MyBatis的前身是Apache社区的一个开源项目iBatis,于2010年更名为MyBatis。MyBatis是支持定制化SQL、存储过程和高级映射的优秀持久层框架。它避免了几乎所有的JDBC代码、手动设置参数和获取结果集的操作,使得开发人员更加关注SQL本身和业务逻辑,不用再花费时间关注整个复杂的JDBC操作过程。

    MyBatis的结构图。

     MyBatis的优点如下所示。

    ①封装了JDBC大部分操作,减少了开发人员的工作量

    ②半自动化的操对于编写SQL语句灵活度更高

    ③Java代码与SQL语句分离,降低维护难度

    ④自动映射结果集,减少重复的编码工作⑤开源社区十分活跃,文档齐全,学习成本低

    2、添加依赖

    <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.2.2</version>
            </dependency>
                  

    这样,MyBatis的场景启动器和相关依赖就整合进Spring Boot项目中了

    idea新建:

     

    3、application.properties的配置

    # mybatis config
    mybatis.mapper-locations=classpath:mapper/*Mapper.xml

    mybatis.mapper-locations:配置Mapper文件对应的XML文件路径。

    4、启动类增加Mapper扫描

    在启动类中添加对Mapper包的扫描@MapperScan,Spring Boot在启动的时候会自动加载包路径下的Mapper接口。代码如下所示:

    package com.example.sp0217b;
    
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @MapperScan("com.example.sp0217b.dao")
    @SpringBootApplication
    public class Sp0217bApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(Sp0217bApplication.class, args);
        }
    
    }

    5、在MySQL中先创建一张表

    /*
    Navicat MySQL Data Transfer
    
    Source Server         : localhost
    Source Server Version : 100137
    Source Host           : localhost:3306
    Source Database       : newbee_mall_db
    
    Target Server Type    : MYSQL
    Target Server Version : 100137
    File Encoding         : 65001
    
    Date: 2022-02-17 16:36:13
    */
    
    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for tb_user
    -- ----------------------------
    DROP TABLE IF EXISTS `tb_user`;
    CREATE TABLE `tb_user` (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `name` varchar(100) NOT NULL DEFAULT '' COMMENT '登录名',
      `password` varchar(100) NOT NULL DEFAULT '' COMMENT '密码',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=975964 DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of tb_user
    -- ----------------------------
    INSERT INTO `tb_user` VALUES ('1', 'Spring Boot', '123456');
    INSERT INTO `tb_user` VALUES ('2', 'java', '123456');
    INSERT INTO `tb_user` VALUES ('3', 'Mybatis', '123456');
    INSERT INTO `tb_user` VALUES ('4', 'Thymeleaf', '123456');

    6、新建实体类和Mapper接口

    新建entity包并在entity包下新建User类,将tb_user中的字段映射到该实体类中,代码如下所示:

    package com.example.sp0217b.entity;
    
    public class User {
        private Integer id;
        private String name;
        private String password;
    
        public void setId(Integer id){
            this.id =id;
        }
        public  String getName (){
            return  name;
        }
        public void setName(String name){
            this.name = name;
        }
        public String getPassword(){
            return password;
        }
        public void setPassword(String password){
            this.password = password;
        }
    }

    新建dao包并在dao包中新建UserDao接口,并定义增、删、改、查四个方法,代码如下所示:

    package com.example.sp0217b.dao;
    import com.example.sp0217b.entity.User;
    import java.util.List;
    public interface UserDao {
        /**
         * 返回数据列表
         */
        List<User> findAllUsers();
    
        /**
         * 添加
         * @param User
         * @return
         */
        int insertUser(User User);
    
        /**
         * 修改
         * @param User
         * @return
         */
        int updUser(User User);
    
        /**
         * 删除
         * @param id
         * @return
         */
        int delUser(Integer id);
    }

    7、创建Mapper接口的映射文件

    在resources目录下新建mapper目录,并在mapper目录下新建Mapper接口的映射文件UserMapper.xml,再进行映射文件的编写。

    首先,定义映射文件与Mapper接口的对应关系。

    比如在该示例中,需要将UserMapper.xml文件与对应的UserDao接口类之间的关系定义出来:

    <mapper namespace="com.example.sp0217b.dao.UserDao">

    然后,配置表结构和实体类的对应关系:

    <resultMap type="com.example.sp0217b.entity.User" id="UserResult">
            <result property="id" column="id"></result>
            <result property="name" column="name"></result>
            <result property="password" column="password"></result>
        </resultMap>

    最后,按照对应的接口方法,编写增、删、改、查方法的具体SQL语句,最终的UserMapper.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.example.sp0217b.dao.UserDao">
        <resultMap type="com.example.sp0217b.entity.User" id="UserResult">
            <result property="id" column="id"></result>
            <result property="name" column="name"></result>
            <result property="password" column="password"></result>
        </resultMap>
        <select id="findAllUsers" resultMap="UserResult">
            select id,name,password from tb_user order by id desc
        </select>
        <insert id="insertUser" parameterType="com.example.sp0217b.entity.User">
            insert into tb_user (id,name,password)
            values (#{id},#{name},#{password})
        </insert>
        <update id="updUser" parameterType="com.example.sp0217b.entity.User">
            update tb_user
            set
            name = #{name},password=#{password}
            where id=#{id}
        </update>
        <delete id="delUser" parameterType="int">
            delete from tb_user where id=#{id}
        </delete>
    </mapper>

    8、新建MyBatisController

    为了对MyBatis进行功能测试,在controller包下新建MyBatisController类,并新增4个方法分别接收对于tb_user表的增、删、改、查请求,代码如下所示:

    package com.example.sp0217b.controller;
    import com.example.sp0217b.dao.UserDao;
    import com.example.sp0217b.entity.User;
    import org.springframework.util.StringUtils;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import javax.annotation.Resource;
    import java.util.List;
    
    @RestController
    public class MyBatisController {
        @Resource
        UserDao userDao;
        // 查询所有记录
        @GetMapping("/user/mybatis/queryAll")
        public List<User> queryAll(){
            return userDao.findAllUsers();
        }
        // 新增
        @GetMapping("/user/mybatis/insert")
        public Boolean insert(String name,String password){
            if(StringUtils.isEmpty(name) || StringUtils.isEmpty(password)){
                return false;
            }
            User user = new User();
            int id = (int) (Math.random()*1000000);
            // user.setId(id);
            user.setName(name+"-"+id);
            user.setPassword(password+"-"+id);
            System.out.println(id);
            return userDao.insertUser(user)>0;
        }
        // 修改
        @GetMapping("/user/mybatis/update")
        public Boolean update(Integer id, String name, String password){
            if(id==null || StringUtils.isEmpty(name)||StringUtils.isEmpty(password)){
                return false;
            }
            User user = new User();
            user.setId(id);
            user.setName(name);
            user.setPassword(password);
            return userDao.updUser(user)>0;
        }
        // 删除
        @GetMapping("user/mybatis/delete")
        public Boolean delete(Integer id){
            if(id==null || id <1){
                return false;
            }
            return userDao.delUser(id)>0;
        }
    }

    在上述步骤完成后,项目的代码目录就如图

     在编码完成后启动Spring Boot项目。在启动成功后打开浏览器,对以上四个功能进行验证

    添加

    http://localhost:8080/user/mybatis/insert?name=李沙发&password=234567

     

     修改

    http://localhost:8080/user/mybatis/update?id=1&name=李沙发2&password=234567

     删除

    http://localhost:8080/user/mybatis/delete?id=1

    查询所有

    http://localhost:8080/user/mybatis/queryAll

  • 相关阅读:
    OpenGL 五
    OpenGL 四
    对UICollectionView的学习
    KVO的简单用法
    css在各浏览器中的兼容问题
    iOS学习笔记---网络请求
    UI学习笔记---第十六天XML JSON解析
    ui学习笔记---第十五天数据库
    UI学习笔记---第十四天数据持久化
    UI学习笔记---第十三天可视化设计 XIB, StoryBoard
  • 原文地址:https://www.cnblogs.com/pangchunlei/p/15905359.html
Copyright © 2020-2023  润新知