我的第一个Mybatis程序

7 篇文章 0 订阅
3 篇文章 0 订阅

摘要:Mybatis笔记_01-2021.06.11,笔记内容均为观看B站视频@狂神说

环境:

  • JDK 1.8

  • Mysql 8.0

  • maven 3.6.1

  • idea

1.认识Mybatis

1.1 什么是Mybatis

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

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

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

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

1.2 什么是持久化

数据持久化

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

  • 内存特性:断电即失

  • 数据库(JDBC)、IO文件可以将数据持久化

1.3 什么是持久层

Dao层,Service层、Controller层

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

  • 层界限十分明显

1.4 如何获取Mybatis?

2.第一个Mybatis程序

一般性流程:搭建环境→导入Mybatis→编写代码→测试

2.1搭建环境

 

2.2 搭建数据库

 

2.3 创建一个普通Maven项目

  • File→New Project→Maven→不选择模板→Next→填写信息→Finish

  • 创建完成,导入相关依赖

     <?xml version="1.0" encoding="UTF-8"?>
     <project xmlns="http://maven.apache.org/POM/4.0.0"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
         <modelVersion>4.0.0</modelVersion>
     ​
         <!--父工程-->
         <groupId>org.example</groupId>
         <artifactId>Mybatis-study</artifactId>
         <version>1.0-SNAPSHOT</version>
     ​
         <!--导入依赖-->
         <dependencies>
             <!--mysql驱动-->
             <dependency>
                 <groupId>mysql</groupId>
                 <artifactId>mysql-connector-java</artifactId>
                 <version>8.0.17</version>
             </dependency>
             <!--Mybatis-->
             <dependency>
                 <groupId>org.mybatis</groupId>
                 <artifactId>mybatis</artifactId>
                 <version>3.5.2</version>
             </dependency>
             <!--Junit-->
             <dependency>
                 <groupId>junit</groupId>
                 <artifactId>junit</artifactId>
                 <version>4.13</version>
                 <scope>test</scope>
             </dependency>
         </dependencies>
     ​
     </project>

2.4 创建一个模块(Module)

2.4.1 idea中连接数据库

  • 第一步:
  • 第二步:
  • 第三步:
  • 连接成功

2.4.2 编写Mybatis的核心配置文件

<?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">
 ​
 <!--Mybatis-->
 <configuration>
     <environments default="development">
         <environment id="development">
             <transactionManager type="JDBC"/>
             <dataSource type="POOLED">
                 <property name="driver" value="com.mysql.jdbc.Driver"/>
                 <property name="url" value="jdbc:mysql://localhost:3306/book?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                 <property name="username" value="root"/>
                 <property name="password" value="root"/>
             </dataSource>
         </environment>
     </environments>
 ​
     <!--Here every mapper must register!-->
     <mappers>
 ​
         <mapper resource="com/riove/dao/UserMapper.xml"/>
 ​
     </mappers>
 ​
 </configuration>

2.4.3 编写Mybatis的工具类

MybatisUtils.java

package com.riove.utils;
 ​
 import org.apache.ibatis.io.Resources;
 import org.apache.ibatis.session.SqlSession;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 ​
 import java.io.IOException;
 import java.io.InputStream;
 ​
 //sqlSessionFactory -->sqlSession
 public class MybatisUtils {
 ​
     private static SqlSessionFactory sqlSessionFactory;
 ​
     //官网有相关代码,固定代码块
     static {
         try {
             //使用Mybatis第一步:1.获取sqlSessionFactory对象
             String resource = "mybatis-config.xml";
             InputStream inputStream = Resources.getResourceAsStream(resource);
             sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
         } catch (IOException e) {
             e.printStackTrace();
         } finally {
 ​
         }
     }
 ​
     /*
      *使用Mybatis第二步:2.获取sqlSessionFactory对象后,可以从中获取SqlSession的实例
      * SqlSession 完全包含了面向数据库执行SQL命令所需要的方法
      */
     public static SqlSession getSqlSession() {
         return sqlSessionFactory.openSession();
     }
 ​
 }

2.4.4 编写代码

  • 实体类

User.java

package com.riove.pojo;
 ​
 public class User {
 ​
     private int id;
     private String username;
     private String password;
     private String email;
 ​
     public User() {
     }
 ​
     public User(int id, String username, String password, String email) {
         this.id = id;
         this.username = username;
         this.password = password;
         this.email = email;
     }
 ​
     public int getId() {
         return id;
     }
 ​
     public void setId(int id) {
         this.id = id;
     }
 ​
     public String getUsername() {
         return username;
     }
 ​
     public void setUsername(String username) {
         this.username = username;
     }
 ​
     public String getPassword() {
         return password;
     }
 ​
     public void setPassword(String password) {
         this.password = password;
     }
 ​
     public String getEmail() {
         return email;
     }
 ​
     public void setEmail(String email) {
         this.email = email;
     }
 ​
     @Override
     public String toString() {
         return "User{" +
                 "id=" + id +
                 ", username='" + username + '\'' +
                 ", password='" + password + '\'' +
                 ", email='" + email + '\'' +
                 '}';
     }
 }
  • 接口

UserMapper.java

package com.riove.dao;
 ​
 import com.riove.pojo.User;
 ​
 import java.util.List;
 ​
 public interface UserMapper {
 ​
     List<User> getUserList();
 ​
 }
 ​
  • 编写配置文件(接口实现类,由原来的的Impl实现转变成现在的UserMapper.xml文件

    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=帮定对应的Mapper接口(原理:相当于我们实现了这个接口)-->
 <mapper namespace="com.riove.dao.UserMapper">
 ​
     <!--SQL语句: id = "接口中的方法名" resultType = “全类名,返回类型” -->
     <select id="getUserList" resultType="com.riove.pojo.User">
         <!--执行SQL语句-->
         select * from book.t_user
     </select>
 ​
 </mapper>

2.4.5 编写测试

UserDaoTest.java

 package com.riove.dao;
 ​
 import com.riove.pojo.User;
 import com.riove.utils.MybatisUtils;
 import org.apache.ibatis.session.SqlSession;
 import org.junit.Test;
 ​
 import java.util.List;
 ​
 public class UserDaoTest {
 ​
     @Test
     public void test() {
 ​
         //1.获取的SqlSession对象
         SqlSession sqlSession = MybatisUtils.getSqlSession();
         //2.执行Sql,面向接口,通过获取接口实现方法
         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
         //3.实现方法
         List<User> userList = mapper.getUserList();
         //4.输出
         for (User user : userList) {
             System.out.println(user);
         }
         //5.关闭SqlSession
         sqlSession.close();
 ​
     }
 ​
 }
 ​

2.4.6 常见异常及其处理

1.初始化失败异常:java.lang.ExceptionInInitializerError

  • 根本原因,涉及Maven项目中资源过滤问题,maven中约定大于配置,导致配置文件无法导出或者生效

  • 解决方法:在pom.xml文件→build→配置resources,防止我们资源导出失败

 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <artifactId>Mybatis-study</artifactId>
         <groupId>com.riove</groupId>
         <version>1.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 ​
     <groupId>com.riove</groupId>
     <artifactId>Mybatis-study-01</artifactId>
 ​
     <!--在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>
 </project>

2.出现异常:2 字节的 UTF-8 序列的字节 2 无效,1字节的 UTF-8 序列的字节 2 无效

  • 第一种方法:把xml文件中的所有中文注释全部删除(原因:此时你的项目能默认字符集编码:GBK)

  • 第二种方法(建议):将你的项目,建议把后面所有项目的字符集编码修改成:UTF-8 即可,

    • 修改当前项目字符集编码:File→Settings→Editor→File Encodings→将所有GBK改成UTF-8即可;

    • 修改今后项目,所有项目:File→(2020版idea,Other Settings)→New Project Settings→Editor→File Encodings→将所有GBK改成UTF-8即可。

3.所有步骤已完成,出现未知异常,可尝试刷新或者重启

4.其它可自行搜索解决

3. 我的第一个Mybatis程序顺利完成

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值