mybatis笔记

 

 

Mybatis

环境:

  • JDK1.8

  • Mysql 5.7

  • maven 3.6.1

  • idea

1、简介

1、1 什么是mybatis

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

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

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

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

获得:

  • maven

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

  • 中文文档

1、2 持久化

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

  • #内存:断电即失去

  • #数据库,io文件持久化;

  • 持久化保证对象不会丢失

1、3 持久层

Dao层,Service层,Cotroller层

  • 完成持久化工作的代码

  • 层的界限十分明显

1、4 为什么

  • 简化将数据存入数据库的过程

  • 框架,自动化,方便上手

  • 优点

    • 简单灵活

    • sql和代码分离,提高可维护性

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

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

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

2、 快速入门

2、1 搭建环境

搭建数据库

CREATE DATABASE mybatis;
USE mybatis;
CREATE TABLE `use`(
id INT PRIMARY KEY NOT NULL ,
`name` VARCHAR(20) NOT NULL,
pwd VARCHAR(20) NOT NULL)ENGINE=INNODB CHARSET=utf8;
INSERT INTO `use` VALUE(1,'彭','ssssss'),
(2,'peng','44444'),
(3,'xiaoe','1s1s11s');

创建maven项目

导入依赖:mybatis,junit,mysql,

2、2 创建模块

  • 在resource目录下编写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>
   <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/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf-8"/>
               <property name="username" value="root"/>
               <property name="password" value="root"/>
           </dataSource>
       </environment>
   </environments>
    <!--每一个Mapper.xml都需要在mybatis的核心配置文件中注册-->
   <mappers>
       <mapper resource="com/peng/DaoMapper/Mapper.xml"/>
   </mappers>
</configuration>
  • 编写mybatis工具类(factorybulid---》factory---》sqlsession)

// sqlSessionFactory --> sqlsession
public class MybatisUtil {

   private static SqlSessionFactory sqlSessionFactory;//对象在try中,提升作用域;
   // 第一步,使用静态代码块获取sqlsessionfactory对象
   static {
       try {
           String resource = "mybatis-config.xml";
           InputStream inputStream = Resources.getResourceAsStream(resource);//文件转化成流
           sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      } catch (IOException e) {
           e.printStackTrace();
      }
  }
   //第二步,既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
   // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
   public static SqlSession getSqlSession(){
       return sqlSessionFactory.openSession();
  }
}

2、3 编写代码

  • 实体类

    • 在对应的pojo文件夹下建立对应数据库中数据的实体类

  • Dao/Mapper接口

public interface Mapper {
   List<User> selectUser();// 注:接口中public 可省略;
}
  • Dao/ Mapper接口实现类

<?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.peng.DaoMapper.Mapper">
   <!--select 查询语句 -->
   <!--id与方法名对应,返回值类型需指明实体类的路径-->
   <select id="selectUser" resultType="com.peng.pojo.User">
      select * from mybatis.user
   </select>
</mapper>

2、4 测试

junit 测试

// 注:在对应需测试的接口{}内 alt+insert 可在test下快速创建;
public class MapperTest extends TestCase {
   @Test
   public void test(){
       //获取sqlsession对像
       SqlSession sqlSession = MybatisUtil.getSqlSession();
       //执行sql:方式一:getMapper
       Mapper mapper = sqlSession.getMapper(Mapper.class);

       List<User> users = mapper.selectUser();
       for (User user : users) {
           System.out.println(user);
      }
       //关闭sqlsession
       sqlSession.close();
  }
}

注:可能遇到问题

  • BindingException——对应mapper.xml未在核心配置文件中注册

    <mappers>
           <mapper resource="com/peng/DaoMapper/Mapper.xml"/>
   </mappers>
  • PersistenceException——对应的mapper.xml未在target对应的目录下生成,即资源导出失败;需在porm文件中添加build配置

<!--在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>
  • CommunicationsException——连接异常;将配置文件中url 中的ssl ——》 false;

  • 注:在mapper.xml中操作表,需用数据库名来进行限定、例:mybatis.use;

  • id中的方法名,返回值类型写法不对;

<!--注:sqlsession必须关闭;-->

 

 

 
posted @   haru12  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示