• SpringBoot+Maven+MyBaties+Mysql快速搭建一个项目


    一.写在前面

    为了避免重复造轮子,项目创建的全过程可以参考如下链接
    https://blog.csdn.net/weixin_44586943/article/details/107433966

    二、启动报错

    参考如上链接的时候,报了两个错,一个是Whitelabel Error Page,一个是SQL的错误,解决方法的参考网址如下
    https://blog.csdn.net/drose29/article/details/89351919
    https://blog.csdn.net/qq_43285534/article/details/108792823

    三、Mybatis的原理

    Mybaties其实就是对JDBC进行了封装,所以了解Mybaties原理,必须要先了解JDBC原理

    3.1 JDBC的原理 (mybatis是对JDBC的封装)
    1.注册和加载数据库驱动

    
     class.forName(com.mysql.jdbc.Driver")
    

    2.获取数据库连接 :

    3.获取语句执行对象,然后执行SQL语句 获取执行结果,最后释放资源
    既可以通过createStatement()方法来获取Statement对象
    也可以调用prepareStatement()方法获得PrepareStatement,这个可以防止数据库注入

    4.四个核心的对象
    (1)DriverManager,用于注册数据库连接
    (2)Connection,与数据库连接对象
    (3)Statement/PrepareStatement,操作数据库SQL语句的对象
    (4)ResultSet,结果集或一张虚拟表

    3.2 Mybatis的工作原理
    一句话描述:先封装SQL,接着调用JDBC操作数据库,最后把数据库返回的表结果封装成Java类。
    四大核心对象:
    (1)SqlSession对象,该对象中包含了执行SQL语句的所有方法。类似于JDBC里面的Connection。
    (2)Executor接口,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。类似于JDBC里面的Statement/PrepareStatement。
    (3)MappedStatement对象,该对象是对映射SQL的封装,用于存储要映射的SQL语句的id、参数等信息。
    (4)ResultHandler对象,用于对返回的结果进行处理,最终得到自己想要的数据格式或类型。可以自定义返回类型。

    上面中流程就是MyBatis内部核心流程,每一步流程的详细说明如下文所述:

    (1)读取MyBatis的配置文件。mybatis-config.xml为MyBatis的全局配置文件,用于配置数据库连接信息。

    (2)加载映射文件。映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,需要在MyBatis配置文件mybatis-config.xml中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一张表。

    (3)构造会话工厂。通过MyBatis的环境配置信息构建会话工厂SqlSessionFactory。

    (4)创建会话对象。由会话工厂创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。

    (5)Executor执行器。MyBatis底层定义了一个Executor接口来操作数据库,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。

    (6)MappedStatement对象。在Executor接口的执行方法中有一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等信息。

    (7)输入参数映射。输入参数类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输入参数映射过程类似于JDBC对preparedStatement对象设置参数的过程。

    (8)输出结果映射。输出结果类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输出结果映射过程类似于JDBC对结果集的解析过程。

    
    UserMapper.xml中的注意点
    <namespace>这里填写的是UserMapper接口的位置</namespace>
    <select  id =”方法的名字 ”   resultType=”返回的类型”  parameterType=”入参的格式”>
    Bean的字段少于数据库的字段时,bean中没有的字段返回结果就不展示
    Bean的字段大于数据库字段时,bean中多出来的字段返回结果不展示
    当bean中的字段的名字和数据库一致,但是类型不一致的时候,解析结果会报错,类型不匹配
    

    参考链接:

    四 SpringBoot + mybaties搭建一个项目,创建的过长不再赘述,参考上面的链接

    目录结构

    每个类的代码
    UserController.java

    
    @RestController
    public class UserController {
        @Autowired
        private UserService userMapper;
    
        @RequestMapping("test")
        public String findAll() {
            return "xlm:" + JSONArray.toJSONString(userMapper.findAll());
        }
    
        @RequestMapping("test2")
        public String findAll2() {
            return "注解:" + JSONArray.toJSONString(userMapper.findAll2());
        }
    }
    
    

    UserMapper.java

    
    @Mapper
    @Repository
    public interface UserMapper {
        /**
         * xml映射方式
         *
         * @return user
         */
        List<User> findAll();
    
        /**
         * 注解方式
         *
         * @return user
         */
        @Select("select * from user")
        List<User> findAll2();
    }
    
    

    User.java

    
    public class User {
        public int age;
    
        public String name;
    
        public String password;
    
        public String address;
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    }
    

    UserService.java

    
    public interface UserService {
    
        List<User> findAll();
    
        List<User> findAll2();
    }
    

    UserServiceImpl.java

    
    @Service
    public class UserServiceImpl implements UserService {
        @Autowired
        UserMapper userMapper;
    
        @Override
        public List<User> findAll() {
            return userMapper.findAll();
        }
    
        @Override
        public List<User> findAll2() {
            return userMapper.findAll2();
        }
    }
    

    BootApplication.java

    
    @SpringBootApplication
    public class BootApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(BootApplication.class, args);
        }
    
    }
    

    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.linxi.boot.mapper.UserMapper">
        <select id="findAll" resultType="com.linxi.boot.model.User" parameterType="java.lang.Integer">
            select * from user
        </select>
    </mapper>
    

    Application.yaml

    
    server:
      port: 8888
    spring:
      datasource:
    #    url: jdbc:mysql://localhost:3306/java_study1?serverTimezone=UTC
        url: jdbc:mysql://localhost:3306/java_study1?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
        username: root
        password: 123456
        driver-class-name: com.mysql.cj.jdbc.Driver
    mybatis:
    mapper-locations: classpath*:mapper/*.xml
    

    点击启动类进行启动,并在浏览器访问

  • 相关阅读:
    技术人员的找工之路(1
    技术人员的找工之路(3)
    Endian的由来
    android平台开发笔记1Spinner不能在sub activity中使用
    谈谈Groupon的成功
    线程安全的同步读写类的模板设计
    项目管理文件package.json
    10个每个开发人员都应该知道的强大JavaScript 解构技术
    绿色下载站上线了(MVC +Telerik开源控件)
    我开发的新浪微博应用“微词典”通过审核,欢迎朋友们试用,多多建议!
  • 原文地址:https://www.cnblogs.com/cherrie-lin/p/14097617.html
Copyright © 2020-2023  润新知