mybatis入门demo搭建MySQL的maven项目

1、mybatis是什么

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

2、入门

2.1、了解mybatis的几个核心对象

在这里插入图片描述

1、SqlSessionFactoryBuilder:加载配置,构建SqlSessionFactory
2、SqlSessionFactory:从连接或数据源中创建一个sqlsession
3、SqlSession: 真正的执行者,使用Mybatis的主Java接口。通过此接口,您可以执行命令,获取映射器和管理事务。

2.2、理解框架执行流程

1、加载并解析mybatis的配置资源
2、使用SqlSessionFactoryBuilder装置配置并构建SqlSessionFactory
3、使用SqlSessionFactory获取SqlSession
4、操作mapper接口

2.3、搭建mybatis项目

1、引入依赖:

本次项目使用mysql5.7

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.40</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>

2、创建mybatis-config.xml配置文件

mysql.properties数据库配置信息:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.0.100:3306/fagejiang?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&tinyInt1isBit=false&useSSL=false
username=fagejiang
password=fagejiang

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>
    <!-- 引入外部配置文件 -->
    <properties resource="mybatis/mysql.properties"/>

    <environments default="development">
        <environment id="development">
            <!-- 事务管理器的类型 -->
            <transactionManager type="JDBC"/>
            <!-- 配置数据库的基本信息 -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 引入 mapper接口,被mybatis装载和代理 -->
    <mappers>
        <!-- 指定接口的方式引入,主要是解决@Select方式 -->
        <mapper class="com.fagejiang.dao.UserInfoDao"/>
        <!-- 指定配置文件的方式引入 ,主要是解决XML方式 -->
        <!-- 如果XML的namespace中的接口已被指定,mybatis内部自动会装配 -->
        <mapper resource="mappers/UserInfoDao.xml"/>
        <mapper resource="mappers/UserInfoMapper.xml"/>
    </mappers>
</configuration>

3、mapper接口

/**
 * TODO UserInfoDao 接口
 *
 * @author LinFH
 * @version 1.0
 * @date 2021-03-09 9:24
 */
public interface UserInfoDao {
    // 采用注解的方式 编写sql。 Map<String, Object>可以修改为UserInfoVO,mybatis自动识别
    // 这种方式,在mybatis的配置文件中只需要引入 该接口即可。
    @Select("select user_code AS userCode, url, user_name AS userName, password FROM user_config WHERE user_code = #{userCode}")
    Map<String, Object> getUserConfig(@Param("userCode") String userCode);

    // 采用 XML的方式编写动态sql,该方式必须在配置文件中引入XML,接口不必引入,
    // XML中的namespace 本身指定的就是接口,mybatis内部自动会处理
    UserInfoVO getUserConfig2(@Param("userCode") String userCode);
}

/**
 * TODO 空的 UserInfoMapper 接口, 用于测试只配置XML方法,能不能使用
 *
 * @author LinFH
 * @version 1.0
 * @date 2021-03-09 9:24
 */
public interface UserInfoMapper {

}

// 实体类
public class UserInfoVO implements Serializable {
    /**
     * Serializable id
     */
    private static final long serialVersionUID = 2593256431070278531L;

    private String userCode;
    private String url;
    private String userName;
    private String password;

	// setter getter toString 省略
}

4、mapper.xml配置文件

UserInfoDao.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.fagejiang.dao.UserInfoDao">
    <select id="getUserConfig2" resultType="com.fagejiang.model.UserInfoVO">
        select user_code AS userCode, url, user_name AS userName, password
        FROM user_config WHERE user_code = #{userCode}
    </select>
</mapper>

UserInfoMapper.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.fagejiang.dao.UserInfoMapper">
    <select id="getUserConfig" resultType="com.fagejiang.model.UserInfoVO">
        select user_code AS userCode, url, user_name AS userName, password
        FROM user_config WHERE user_code = #{userCode}
    </select>
</mapper>

5、测试实战

/**
 * TODO
 *
 * @author 发哥讲Java
 * @version 1.0
 * @date 2021-03-09 9:06
 */
//mybatis集成使用流程
//1、引入mybatis的jar包
//2、配置核心mybatis-config的配置文件,包含:数据源、事务、mapper接口映射路径
//3、需要xxxSqlMapper文件:sql数据 orm
//4、使用mybatis操作
public class TestMyBatis {
    SqlSessionFactory sessionFactory;
    SqlSession session;

    @Before
    public void before() throws IOException {
        // 1、获取 InputStream 配置文件流
        String resource = "mybatis/mybatis-config.xml";
        final InputStream inputStream = Resources.getResourceAsStream(resource);

        // 2、获取 SqlSessionFactory
        sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 3、获取 SqlSession
        session = sessionFactory.openSession();
    }

    /**
     * 扩展:
     * // 加载 mapper 的方式 有俩种:
     * // 1、 java程序 在configuration 中使用addMapper方法
     * // 2 在mybatis-config.xml配置文件中,在<mappers>标签中增加<mapper>
     * final Configuration configuration = sessionFactory.getConfiguration();
     * configuration.addMapper(UserInfoDao.class);
     */
    @Test
    public void userInfoDao() {
        // 4、操作Mapper接口
        final UserInfoDao userInfoDao = session.getMapper(UserInfoDao.class);
        final Map<String, Object> test0 = userInfoDao.getUserConfig("test");
        System.out.println("test0 = " + test0);
        final UserInfoVO test = userInfoDao.getUserConfig2("test");
        System.out.println("test = " + test);
    }

    @Test
    public void testUserInfoMapperByXML() {
        // UserInfoMapper 是一个空接口
        final UserInfoMapper userInfoMapper = session.getMapper(UserInfoMapper.class);
        System.out.println("userInfoMapper = " + userInfoMapper);
        // 全路径执行方法
        final UserInfoVO test = session.selectOne("com.fagejiang.dao.UserInfoMapper.getUserConfig", "test");
        System.out.println("test = " + test);
    }

    @After
    public void close() {
        if (session != null)
            session.close();
    }
}

6、数据库表结构:

CREATE TABLE `user_config` (
  `user_code` varchar(30) NOT NULL,
  `url` varchar(200) NOT NULL,
  `user_name` varchar(60) NOT NULL,
  `password` varchar(60) DEFAULT NULL,
  PRIMARY KEY (`user_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `zswz`.`user_config`(`user_code`, `url`, `user_name`, `password`) VALUES ('test', 'jdbc:mysql://192.168.0.100:3306/faegjiang', 'root', 'root');

关注公众号,点击关于我,加入QQ群,私聊群主可以联系到我哦,群文件有Java面试以及框架如何使用pdf等免费资源!!!
在这里插入图片描述

备注:如需搬迁或者转载,请备注原本链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

航迹者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值