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

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

posted @ 2020-12-07 16:15  CherrieLin  阅读(295)  评论(0编辑  收藏  举报