Mybatis入门必备

一、Mybatis简介

MyBatis 源于 Apache 的一个开源项目 iBatis,而 iBatis 一词则来源于“internet”和“abatis”的组合,2010年这个项目由 Apache Software Foundation 迁移到了 Google Code,并且改名为MyBatis ,2013年11月其又迁移到 Github。MyBatis 是一个基于 Java 的支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架,相比于基于面向对象使用 HQL 语言的 Hibernate 框架,MyBatis 则基于 SQL 面向结果集,因此其效率更高。

官方文档:https://mybatis.org/mybatis-3/zh/index.html

Mybatis就是对于JDBC的封装!!!

二、开发步骤(仅以select * 为例)

1、导包:https://mvnrepository.com/artifact/org.mybatis/mybatis 

以3.5.4版本为例,

mybatis-3.5.4.jar

mysql-connector-java-8.0.19.jar

2.编写实体类:

a、mybatis在操作数据库时,表的字段名最好与pojo类的属性名保持一致,因为mybatis默认采用的是自动映射,通过过去字段的名字得到对应的值,然后再通过反射到类里面寻找名字相同的属性名,调用对应的setter方法将数据赋值给属性

b、如果字段名与属性名不一致可以通过sql语句给查询的字段取别名,但是别名必须与对应的属性名一致

public class User {
private int id;                     //id
private String account;     //账号
private String password;  //密码

}

3.创建mybatis-config.xml配置文件

注意:该xml文件应该放在src文件下

该配置文件用于存放数据库连接相关数据

<?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/数据库名?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=UTC" />
                <property name="username" value=用户名 />
                <property name="password" value=密码 />
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!--esource="存放sql语句的xml详细地址"-->
        <mapper resource="com/swpu/mapper/UsersMapper.xml"/>
    </mappers>
</configuration>    

4.创建UsersMapper.xml文件

注意:新建mapper包,并将UsersMapper.xml放在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:命名空间,作用与包名一样   用来区分相同id的sql-->
<mapper namespace="abc">
<!-- id 为sql的唯一标识,同一个命名空间下不能有id相同的sql(自己定义)
    resultType:将查询出来的数据封装成什么类型的对象(存放src以下完整的类名)
 -->
  <select id="allUsers" resultType="com.swpu.entity.User">
    select * from mall_user
  </select>
</mapper>

5.创建测试类

public class MybatisTest {
    public static void main(String[] args) throws IOException {
        
        //自动到src下找配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

        //创建工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);

        //创建session:底层就是利用statement对象来操作数据库
        SqlSession session  =factory.openSession();
        
        //直接利用session来执行sql进行查询
        List<User> selectList = session.selectList("abc.findall");
        //遍历
        selectList.forEach(e->System.out.println(e.toString()));
//关闭statement connection
        session.close();
        
    }
}

mybatis执行逻辑

a:首先通过输入流读取mybatis.xml与mapper.xml文件中的配置信息

b:创建session,一个session就是一次会话

c:通过selectList方法中的参数找到对应的sql语句,同时创建一个statement去查询数据库

d:查询时会得到一个ResultSet,mybatis框架根据反射自动的将得到的数据封装成pojo类对象

e:如果是selectList方法,则会自动将这些对象封装成List对象并返回

6.执行结果:

 
原文地址:https://www.cnblogs.com/rmbdswd/p/13965280.html