(一)MyBatis入门

本文详细介绍了MyBatis框架的基本概念、核心组件及其工作流程。通过一个完整的示例,包括环境搭建、数据库表创建、实体类与接口定义、XML映射文件及注解方式的配置,展示了如何使用MyBatis进行数据库操作。
摘要由CSDN通过智能技术生成

   MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

   MyBatis 主要有以下核心组件:

  • SqlSessionFactoryBuilder(构造器):根据配置信息或者代码来生成SqlSessionFactory,采用的是分步构建的 Builder 模式;
  • SqlSessionFactory(工厂接口):用来生成 SqlSession,采用的是工厂模式;
  • SqlSession(会话接口):一个既可以发送 SQL 执行返回结果,也可以获取 Mapper 的接口;
  • SQL Mapper(映射器):由一个 Java 接口和 XML 文件(或注解)构成,需要给出对应的 SQL 和映射规则。它负责发送 SQL 去执行,并返回结果。

1、创建工程环境

   在 IDEA 创建一个普通的 Maven 工程:
在这里插入图片描述

  • 在 pom.xml 导入依赖:
	<dependencies>
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <!-- 数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.8</version>
            <scope>runtime</scope>
        </dependency>
        <!-- 日志 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!-- JUnit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

2、创建数据库表

   在 MySQL 创建测试表:

CREATE TABLE `user` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `birthday` datetime default NULL COMMENT '生日',
  `sex` char(1) default NULL COMMENT '性别',
  `address` varchar(256) default NULL COMMENT '地址',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 添加记录
insert  into `user`(`id`,`username`,`birthday`,`sex`,`address`) values 
	(41,'老王','2018-02-27 17:47:08','男','北京'),
	(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),
	(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),
	(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),
	(46,'老王','2018-03-07 17:37:26','男','北京'),
	(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');
  • 建表结果:
    在这里插入图片描述

3、代码编写

  • User.java,创建实体类,实体类属性名与数据库表字段名保持一致,需实现 Serializable 接口:
public class User implements Serializable {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}
  • UserMapper.java,创建实体类对应的持久层接口
public interface UserMapper {
    
    // 查询User表全部信息
    public List<User> findAll();
}

4、MyBatis配置

  • 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">
        
<!-- 配置类名需为全限定类名 -->
<mapper namespace="com.lyj.mapper.UserMapper">
    <!-- id 需与接口方法名称一致 -->
    <select id="findAll" resultType="com.lyj.domain.User">
        SELECT * FROM user
    </select>
</mapper>
  • mybatis-config.xml,编写 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">
<configuration>
    <!--配置环境-->
    <environments default="development">
        <environment id="development">
            <!-- 配置事务类型 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源(连接池) -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis_learn?useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 指定映射文件 -->
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

5、测试代码

  • MybatisTest.java,为简单起见,直接在 main 方法中,编写测试代码
public class MybatisTest {

    public static void main(String[] args) throws Exception{
        // 1. 读取配置文件
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        // 2. 创建 SqlSessionFactory 工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        // 3. 获取 SqlSession 对象
        SqlSession sqlSession = factory.openSession();
        // 4. 使用 SqlSession 创建 Mapper 的代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 5. 使用代理对象执行查询
        List<User> users = mapper.findAll();
        for(User user : users){
            System.out.println(user);
        }
        // 6. 释放资源
        sqlSession.close();
        in.close();
    }
}

6、测试结果

  • 工程目录
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述

7、基于注解开发

   我们也可以不使用 xml 映射文件的方式进行开发,而选择基于注解的方式开发。

  • UserMapper.java,在接口方法上使用 @Select 注解,并指定SQL语句
public interface UserMapper {

    @Select("SELECT * FROM user")
    public List<User> findAll();
}
  • mybatis-config.xml,在 MyBatis 的主配置文件中进行 mapper 配置时,使用 class 属性指定接口的全限定类名。
	<mappers>
        <mapper class="com.lyj.mapper.UserMapper"/>
    </mappers>

参考链接:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值