Java - MyBatis(上)

Mybatis(上)

简介

Mybatis是一款优秀的持久层框架。

Mybatis支持定制化SQL、存储过程以及高级映射。

MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。

持久化

持久化就是将程序的数据在持久状态和瞬时状态转化的过程 内存因为断电即失的特点,而有一些对象,不能让它丢掉,所以需要持久化。内存又太贵了,不能将数据持久放在内存中。

持久层

完成持久化工作的代码块

第一个Mybatis程序实现 (思路大纲)

使用Mybatis对数据库进行操作

1.配置环境

导入依赖:

首先需要导入Mybatis依赖和Mysql依赖,才能使用Mybatis和连接Mysql。

之后需要一个sqlSession对象,这需要写一个Mybaits工具类来返回一个sqlSession对象。

Mybatis工具类:

这个Mybatis工具类的实现,是为了返回一个sqlSession对象,需要一个sqlSessionFactory;

而一个sqlSessionFactory对象需要通过 SqlSessionFactoryBuilder 获得;

而 SqlSessionFactoryBuilder 则可以从 XML 配置文件进行加载。

Mybatis核心配置文件:

这样我们就需要一个Mybatis的核心配置文件XML。

这个XML文件需要进行事务管理和数据库连接配置,同时还需要要包含一组映射器(mapper),这些映射器的 XML文件包含了 SQL 代码和映射定义信息。

环境配置完毕!!!

2.编写代码

实体类:

之后就是编写代码, 创建一个与数据库表对应的实体类。

比如针对数据库查询select,首先写一个实体类,内容是包括select的表的各个字段的信息。

Mapper接口

之后写一个Mapper映射接口,自定义的,里面写一个方法用来返回结果集的。

不过每个Mapper接口都需要注册,就是在上述的Mybatis中注册,才能使用。

对应的XML文件

之后通过写一个配置文件,在配置文件中写SQL的相关操作,对接Mapper接口,用来返回结果集。

MyBatis 会根据 Mapper 接口方法的返回类型自动将查询结果映射到相应的 Java 对象。

2.测试

使用MyBatis

获取 sqlSesion对象,通过MyBatis工具类返回一个sqlSession对象;

使用SqlSession获取Mapper接口的实例;

通过该实例方法的调用,执行相关操作,获取结果集;

关闭SQL Session。

第一个Mybatis程序实现 (代码实现)

配置环境:
  1. 导入依赖,解决 Maven 配置文件未被导出或生效的问题(build)

     <dependencies>
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version>4.12</version>
         </dependency>
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <version>8.0.33</version>
         </dependency>
         <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
         <dependency>
             <groupId>org.mybatis</groupId>
             <artifactId>mybatis</artifactId>
             <version>3.5.16</version>
         </dependency>
     </dependencies>
    
     <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>
    
  2. 编写Mybatis工具类,并配置Mybatis核心xml文件,mapper映射器可以候补!

    public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
    try {
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    } catch (IOException e) {
    throw new RuntimeException(e);
    }
    }

     public static SqlSession getSqlSession() {
         return sqlSessionFactory.openSession();
     }
    

    }

    <?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.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="111111"/> </dataSource> </environment> </environments> <mappers> <mapper resource="org/example/Dao/UserMapper.xml"/> </mappers> </configuration>
编写代码
  1. 编写一个实体类,与数据库的表相对应。

    //实体类
    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 + '\'' +
                 '}';
     }
    

    }

  2. 创建一个mapper接口,在里面编写一个方法,用来返回结果集。

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

  3. 配置一个与mapper接口对应的xml文件,对应接口、返回类型,在相应标签内写SQL语句即可。

    MyBatis 会根据 Mapper 接口方法的返回类型自动将查询结果映射到相应的 Java 对象。

    <?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="org.example.Dao.UserDao"> <select id="getUserList" resultType="org.example.pojo.User"> select * from mybatis.user </select> </mapper>

测试

  1. 创建一个sqlSession对象,用Mybatis工具类返回值对象值。

  2. 通过sqlSession对象的getMapper()方法,获取一个Mapper接口的实例对象。这样通过动态代理获取了 Mapper 接口的实现,以便于进行数据库操作。

  3. 调用这个实例对象的方法,这个方法调用会触发 MyBatis 执行与 getUserList() 相关联的 SQL 语句。

    执行后,会将结果集通过返回类型映射成一个Java对象,如List<表对应的对象>,返回结果。

  4. 关闭sqlSession,释放资源。

    public class testDao {
    @Test
    public void test() {
    //获得SqlSession对象
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    //方式一执行SQL
    UserDao mapper = sqlSession.getMapper(UserDao.class);
    List<User> userList = mapper.getUserList();
    for (User user : userList) {
    System.out.println(user);
    }
    //关闭sqlSession
    sqlSession.close();
    }
    }

总结

使用Mybatis对数据库进行操作

配置环境:
  1. 导入依赖,解决解决 Maven 配置文件未被导出或生效的问题(builder)

  2. 编写Mybatis工具类,并配置Mybatis核心xml文件,mapper映射器可以候补!

编写代码
  1. 编写一个实体类,与数据库的表相对应。

  2. 创建一个mapper接口,在里面编写一个方法,用来返回结果集。

  3. 配置一个与mapper接口对应的xml文件,对应接口、返回类型,在相应标签内写SQL语句即可。

    MyBatis 会根据 Mapper 接口方法的返回类型自动将查询结果映射到相应的 Java 对象。

测试
  1. 创建一个sqlSession对象,用Mybatis工具类返回值对象值。

  2. 通过sqlSession对象的getMapper()方法,获取一个Mapper接口的实例对象。这样通过动态代理获取了 Mapper 接口的实现,以便于进行数据库操作。

  3. 调用这个实例对象的方法,这个方法调用会触发 MyBatis 执行与 getUserList() 相关联的 SQL 语句。

    执行后,会将结果集通过返回类型映射成一个Java对象,如List<表对应的对象>,返回结果。

  4. 关闭sqlSession,释放资源。

相关推荐
极客先躯44 分钟前
高级java每日一道面试题-2024年10月3日-分布式篇-分布式系统中的容错策略都有哪些?
java·分布式·版本控制·共识算法·超时重试·心跳检测·容错策略
夜月行者1 小时前
如何使用ssm实现基于SSM的宠物服务平台的设计与实现+vue
java·后端·ssm
程序猿小D1 小时前
第二百六十七节 JPA教程 - JPA查询AND条件示例
java·开发语言·前端·数据库·windows·python·jpa
潘多编程1 小时前
Java中的状态机实现:使用Spring State Machine管理复杂状态流转
java·开发语言·spring
_阿伟_2 小时前
SpringMVC
java·spring
代码在改了2 小时前
springboot厨房达人美食分享平台(源码+文档+调试+答疑)
java·spring boot
猿java2 小时前
使用 Kafka面临的挑战
java·后端·kafka
wclass-zhengge2 小时前
数据结构篇(绪论)
java·数据结构·算法
何事驚慌2 小时前
2024/10/5 数据结构打卡
java·数据结构·算法
结衣结衣.2 小时前
C++ 类和对象的初步介绍
java·开发语言·数据结构·c++·笔记·学习·算法