前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2. MyBatis入门案例

2. MyBatis入门案例

作者头像
Devops海洋的渔夫
发布2022-01-17 14:34:10
2800
发布2022-01-17 14:34:10
举报
文章被收录于专栏:Devops专栏Devops专栏

2. MyBatis入门案例

环境搭建

需求

利用Mybatis框架,从MySQL中查询所有的用户

准备数据

代码语言:javascript
复制
create table user (
  id int primary key auto_increment,
  username varchar(20) not null,
  birthday date,
  sex char(1) default '男',
  address varchar(50)
);

insert into user values (null, '孙悟空','1980-10-24','男','花果山水帘洞');
insert into user values (null, '白骨精','1992-11-12','女','白虎岭白骨洞');
insert into user values (null, '猪八戒','1983-05-20','男','福临山云栈洞');
insert into user values (null, '玉面狐','1995-03-22','女','积雷山摩云洞');
insert into user values (null, '玉兔精','2010-02-12','女','天竺国皇宫');
insert into user values (null, '豹子精','2008-05-03','男','隐雾山折岳洞');

select * from user;

准备步骤

1. 创建Maven项目
2.设置 Maven 的相关依赖
代码语言:javascript
复制
        <!-- log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!--  mybatis      -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.0</version>
        </dependency>
        <!--  mysql-connector-java     -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>
3. 创建核心配置文件 sqlMapConfig.xml
4.创建日志记录的配置文件 log4j.properties

用来设置日志记录的格式,因为Mybaits需要使用到log4j来记录它的日志

日志文件用来记录程序运行过程中的各种事件

5.编写用户dao接口和dao映射文件 (记得分包)
6.编写用户的实体类文件
7.编写测试代码

项目整体结构

3.2 配置文件和接口

3.2.1 日志文件

代码语言:javascript
复制
#1. 在resources下创建一个名为log4j.properties
#2. 作用: 记录MyBatis运行过程中的各种事件

代码

代码语言:javascript
复制
### 设置Logger输出级别和输出目的地 ###
log4j.rootLogger=debug, stdout

### 把日志信息输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

3.2.2 核心配置文件sqlMapConfig.xml

代码语言:javascript
复制
# 1. 可以在Mybatis官网入门中找到配置模板
 http://www.mybatis.org/mybatis-3/zh/getting-started.html
# 2. 在工程中的resources目录下创建一个名为sqlMapConfig.xml
# 3. 记得修改第15行的数据库名

代码

代码语言:javascript
复制
<?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="default">
        <!--环境变量-->
        <environment id="default">
            <!--事务管理器:由JDBC管理事务 -->
            <transactionManager type="JDBC"/>
            <!--数据源配置信息:POOLED 使用连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/db3"/>
                <property name="username" value="root"/>
                <property name="password" value="******密码*****"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 加载其他的映射文件 -->
    <mappers>
        <mapper resource="com/lijw/dao/UserMapper.xml"/>
    </mappers>
</configuration>

3.2.3 UserMapper接口

代码语言:javascript
复制
# 1. 在com.lijw.dao包下创建一个接口,名为UserMapper
# 2. 在接口中定义一个查询所有用户的方法

代码

代码语言:javascript
复制
package com.lijw.dao;

import com.lijw.entity.User;
import java.util.List;

/**
 *  数据访问层方法
 *
 * @author Aron.li
 * @date 2021/3/9 0:09
 */
public interface UserMapper {

    /**
     查询所有的用户
     */
    List<User> findAllUsers();

}

3.2.4 用户映射文件 UserMapper.xml

代码语言:javascript
复制
# 1. 在 resources 目录下创建一个xml文件,名为UserMapper.xml
# 2. 映射文件的模板地址
 http://www.mybatis.org/mybatis-3/zh/getting-started.html

代码

代码语言:javascript
复制
<?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 namespace="com.lijw.dao.UserMapper">
    <!--
    查询语句
    id: 接口中方法的名字
    resultType:返回的实体类的类型,类全名
    -->
    <select id="findAllUsers" resultType="com.lijw.entity.User">
        select * from user
    </select>
</mapper>

3.2.5 实体类

代码语言:javascript
复制
# 1. 数据库表对应实体
 a. 属性名和user表中字段名一致

# 2. 基本类型使用包装类
    b. 实体类中基本数据类型,都使用它的包装类。这样与表中的数据更加匹配
    c. 因为如果从数据库中读取不到对应的数据,应该是null比较合适
        int id;  //默认的值是0 
        Integer id; //默认是null

User类代码

代码语言:javascript
复制
package com.lijw.entity;

import java.io.Serializable;
import java.sql.Date;

/**
 *
 *  用户实体类对象
 *
 * @author Aron.li
 * @date 2021/3/9 0:10
 */
public class User  implements Serializable {

    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public User() {
    }

    public User(Integer id, String username, Date birthday, String sex, String address) {
        this.id = id;
        this.username = username;
        this.birthday = birthday;
        this.sex = sex;
        this.address = address;
    }

    ....
}

3.3 测试类

代码语言:javascript
复制
# 1. 在com.lijw.dao下编写一个测试类: TestUserMapper
# 2. 然后运行: 查询到user表中所有数据

代码

代码语言:javascript
复制
package com.lijw.dao;

import com.lijw.entity.User;
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 org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * 使用mybatis访问数据库
 *
 * @author Aron.li
 * @date 2021/3/9 0:12
 */
public class UserMapperTest {

    @Test
    public void test01() throws IOException {
        //1. 得到输入流对象
        InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //2. 创建会话工厂建造类
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3. 通过建造类得到会话工厂类
        SqlSessionFactory factory = builder.build(inputStream);
        //4. 通过会话工厂得到会话对象
        SqlSession session = factory.openSession();
        //5. 会话对象得到UserMapper接口的代理对象
        UserMapper userMapper = session.getMapper(UserMapper.class);
        // 生成了代理对象:org.apache.ibatis.binding.MapperProxy@198b6731
        System.out.println(userMapper);
        //6. 执行查询操作
        List<User> users = userMapper.findAllUsers();
        for (User user : users) {
            System.out.println(user);
        }
        //7. 关闭会话
        session.close();
    }

}

测试执行如下:

3.4 入门案例解释

三大对象的声明周期

在Mybatis中一个会话相当于一次访问数据库的过程,一个会话对象类似于一个Connection连接对象。

  1. SqlSessionFactoryBuilder:这是一个临时对象,用完就不需要了。通过这个工厂建造类来创建一个会话工厂。
  2. SqlSessionFactory:从一个工厂类中得到一个会话对象,一个项目中只需要创建一个会话工厂对象即可。通过会话工厂对象来创建会话对象。
  3. SqlSession:每次访问数据库都需要创建一个会话对象,这个会话对象不能共享。访问完成以后会话需要关闭。

MyBatis工作流程

CRUD:增删改查的操作(Create、Retrieve、Update、Delete)

Resources工具类直接可以读取 resources 目录下配置文件,转成输入流

步骤

  1. 通过框架提供的Resources类,加载sqlMapConfig.xml,得到文件输入流InputStream对象
  2. 实例化会话工厂创建类SqlSessionFactoryBuilder
  3. 通过上面的SqlSessionFactoryBuilder对象,读取核心配置文件的输入流,得到会话工厂SqlSessionFactory类
  4. 使用SqlSessionFactory对象,创建SqlSession对象
    1. 它相当于JDBC中的Connection对象,提供了操作数据库的CRUD方法
    2. 它提供了一个getMapper()方法,获取接口的实现对象。
  5. 获取接口的对象UserMapper,得到接口的代理对象
  6. 执行数据库的查询操作,输出用户信息
  7. 关闭会话,释放资源
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海洋的渔夫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2. MyBatis入门案例
    • 环境搭建
      • 需求
      • 准备数据
      • 准备步骤
    • 3.2 配置文件和接口
      • 3.2.1 日志文件
      • 3.2.2 核心配置文件sqlMapConfig.xml
      • 3.2.3 UserMapper接口
      • 3.2.4 用户映射文件 UserMapper.xml
      • 3.2.5 实体类
    • 3.3 测试类
      • 3.4 入门案例解释
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档