首页 > 其他分享 >Mybatis

Mybatis

时间:2022-11-10 15:15:40浏览次数:60  
标签:name public mybatis pwd Mybatis id

Mybatis

1.简介

1.1什么是mybatis

  • MyBatis 是一款优秀的持久层框架

  • 它支持自定义 SQL、存储过程以及高级映射

  • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作

  • MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

 

如何获得Mybatis?

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
   <groupId>org.mybatis</groupId>
   <artifactId>mybatis</artifactId>
   <version>3.5.11</version>
</dependency>

1667982196516

1667982315169

1667982340557

1.2持久层

数据持久化

  • 持久化就是将程序的数据在持久状态和瞬时状态转化的过程

  • 内存:断电即失

  • 数据库(JDBC),io文件持久化

为什么需要持久化?

  • 有一些对象,不能让他丢掉

  • 内存太贵了

 

1.3持久层

Dao层,Service层,Controller层.........

  • 完成持久化工作的代码块

  • 层界限十分明显

 

1.4为什么需要Mybatis?

  • 帮助程序猿将数据存入到数据库中

  • 方便

  • 传统的JDBC代码太复杂了,简化,框架,自动化

  • 不要Mybatis也可以,更容易上手,技术没有高低之分

  • 优点:

    • 简单易学

    • 灵活: sql写在xml里,便于统一管理和优化,通过sql语句可以满足操作数据库的所有需求。

    • 解除sql与程序代码的耦合:sql和代码的分离,提高了可维护性。

    • 提供映射标签,支持对象与数据库的ORM字段关系映射。

    • 提供对象关系映射标签,支持对象关系组建维护。

    • 提供xml标签,支持编写动态sql。

 

2.第一个Mybatis程序

思路:搭建环境-->导入Mybatis-->编写代码-->测试

2.1搭建环境

搭建数据库

create database mybatis;
use mybatis;

create table user(
   id int(20) not null primary key ,
   name varchar(30) default null,
   pwd varchar(30) default null
)engine=innodb default charset=utf8;

insert into user (id, name, pwd) VALUES
(1,'小企鹅','123456'),
(2,'小秋','112345'),
(3,'嶙峋','133625')

新建项目

  1. 新建一个普通的maven项目

  2. 删除src目录

  3. 导入maven依赖

<!--导入依赖-->
   <dependencies>
       <!--mysql驱动-->
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>8.0.26</version>
       </dependency>
       <!--mybatis-->
       <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
       <dependency>
           <groupId>org.mybatis</groupId>
           <artifactId>mybatis</artifactId>
           <version>3.5.11</version>
       </dependency>
       <!--junit-->
       <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>4.13</version>
           <scope>test</scope>
       </dependency>
   </dependencies>

2.2创建一个模块

  • 编写mybatis的核心配置文件

    mybatis-config.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
           PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
           "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <!--configuration核心配置文件-->
    <configuration>
       <environments default="development">
           <environment id="development">
               <transactionManager type="JDBC"/>
               <dataSource type="POOLED">
                   <!--mysql-8是:com.mysql.cj.jdbc.Driver-->
                   <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                   <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"/>
                   <property name="username" value="root"/>
                   <property name="password" value="123456"/>
               </dataSource>
           </environment>
       </environments>

       <!--每一个Mapper.xml都需要在Mybatis核心配置文件中注册!-->
       <mappers>
           <mapper resource="com/QQ/dao/UserMapper.xml"/>
       </mappers>
    </configuration>

     

  • 编写mybatis工具类

    MybatisUtils.java

 private static SqlSessionFactory sqlSessionFactory;

   static {
       try {
           //使用Mybatis第一步:获取SqlSessionFactory对象

           String resource = "mybatis-config.xml";
           InputStream inputStream = Resources.getResourceAsStream(resource);
           sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      } catch (IOException e) {
           e.printStackTrace();
      }
  }
   //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
   //SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
   //你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
   public static SqlSession getSqlSession(){
       return sqlSessionFactory.openSession();
  }

 

2.3编写代码

  • 实体类

    User.java

  • package com.QQ.pojo;

    //实体类
    public class User {
       private int id;
       private String name;
       private String pwd;

       public User() {
      }

       public User(int id, String name, String pwd) {
           this.id = id;
           this.name = name;
           this.pwd = pwd;
      }

       public int getId() {
           return id;
      }

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

       public String getName() {
           return name;
      }

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

       public String getPwd() {
           return pwd;
      }

       public void setPwd(String pwd) {
           this.pwd = pwd;
      }

       @Override
       public String toString() {
           return "User{" +
                   "id=" + id +
                   ", name='" + name + '\'' +
                   ", pwd='" + pwd + '\'' +
                   '}';
      }
    }
  • Dao接口

    UserDao.java

    public interface UserDao {
      List<User> getUserList();
    }

     

  • 接口实现类由原来的UserDaoImpl转变为一个Mapper配置文件

    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">


<!--namespace=绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.QQ.dao.UserDao">
   <!--select查询语句-->
   <!--id绑定对应的方法名-->
   <!--resultType返回类型,返回一个;resultMap返回一个集合,多个.绑定对应的实体类位置-->
   <select id="getUserList" resultType="com.QQ.pojo.User">
       select * from mybatis.user
   </select>
</mapper>

2.4测试

点:

报错:org.apache.ibatis.binding.BindingException: Type interface com.QQ.dao.UserDao is not known to the MapperRegistry.

MapperRegistry是什么?

  • 一定要在mybatis-config.xml中注册MapperRegistry

junit测试:@Test

UserDaoTest.java

public class UserDaoTest {
    @Test
    public void test(){
    //第一步:获得sqlSession对象
    SqlSession sqlSession= MybatisUtils.getSqlSession();

    //方式一(推荐):getMapper
    UserDao userDao=sqlSession.getMapper(UserDao.class);
    List&lt;User&gt; userList=userDao.getUserList();

    for (User user:userList){
        System.out.println(user);
    }

    //关闭SqlSession
    sqlSession.close();
}

}

 

3.资源过滤问题:

{

java.lang.ExceptionInInitializerErrorat com.QQ.dao.UserDaoTest.test(UserDaoTest.java:15)

Caused by: org.apache.ibatis.exceptions.PersistenceException:

Error building SqlSession.

The error may exist in com/QQ/dao/UserMapper.xml

Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/QQ/dao/UserMapper.xml

}

最好在父项目和子项目中都添加,防止出现资源导出失败的问题

 <!--在build中配置resources,防止我们资源导出失败的问题-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
 

标签:name,public,mybatis,pwd,Mybatis,id
From: https://www.cnblogs.com/Ginger54/p/16877065.html

相关文章