每天五分钟之IT技能包Mybatis实验室

MyBatis入门实验(二)之接口注解

2018-07-11  本文已影响0人  学好该死的程序

实验内容

在上一章中,实现了直接通过 sqlSession 执行指定的SQL语句,但如果SqlID拼写出错,或者是入参数据类型不正确都可能导致运行时异常,并不能在编译阶段检查出来。
本次实验将使用 mybatis 的接口类的方式执行SQL语句从数据库中取出数据,并封装成Java对象返回
这种方式更加安全、更加简单,也是现在主流使用的方式

操作步骤

一、安装

添加Maven依赖(本文使用版本为3.4.6)

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>x.x.x</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.42</version>
</dependency>

二、创建数据库及表结构

CREATE TABLE `user` (
  `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `username` varchar(32) NOT NULL COMMENT '用户名',
  `password` varchar(64) NOT NULL COMMENT '密码',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO `user` VALUES ('1', 'admin', '123');

三、创建 Mybatis 配置文件

src/main/resources 目录下创建 mybatis-config.xml 文件,内容如下

与上一章不同的地方:加载 mappers 时,不仅需要加载XML文件,还需要加载新创建的接口类

<configuration>
    <properties resource="jdbc.properties"></properties>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 加载XML,同时加载接口类 -->
    <mappers>
        <mapper class="tutorial.mybatis.mapper.UserMapper"></mapper>
        <mapper resource="mybatis/User.xml"></mapper>
    </mappers>
</configuration>

src/main/resources 目录下创建 jdbc.properties 文件,内容如下

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/tutorial_mybatis?characterEncoding=utf-8&useSSL=true
jdbc.username=root
jdbc.password=

四、创建实体类和映射文件

创建包 tutorial.mybatis.model,并在该包下创建 User 类,内容如下

public class User {

    private Long id;

    private String username;

    private String password;
    
    // 省略 get / set 方法
}

src/main/resources 目录下创建目录 mybatis,并在该目录下创建 User.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">
<!-- 命名空间修改为接口类的路径,mybatis 会通过接口类自动寻址至相应的XML文件,获取SQL语句 -->
<mapper namespace="tutorial.mybatis.mapper.UserMapper">

    <select id="getUserByID" parameterType="int" resultType="tutorial.mybatis.model.User">
        select * from `user` where id = #{id}
    </select>

</mapper>

五、创建接口类

创建包 tutorial.mybatis.mapper,并在该包下创建接口 UserMapper,内容如下

public interface UserMapper {

    User getUserByID(Long id);

}

六、构建

准备工作就绪,开始最终章,创建启动类 MybatisConfig,内容如下:

与上一章不同的地方:使用 session.getMapper(UserMapper.class) 的方式获取接口类,然后安全地执行接口类中的方法。

public class MybatisConfig {

    private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader;

    static {
        try {
            reader = Resources.getResourceAsReader("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            UserMapper userMapper = session.getMapper(UserMapper.class);
            User user = userMapper.getUserByID(1L);
            if (user != null) {
                String userInfo = "名字:" + user.getUsername()+", 密码:" + user.getPassword();
                System.out.println(userInfo);
            }
        } finally {
            session.close();
        }
    }
}

流程梳理

1、main函数启动,执行 static 代码块,使用 mybatis-config.xml 文件构建sqlSessionFactory,这个过程中会加载 xml 文件及接口类
2、创建 sqlSession 连接,使用 session.getMapper() 方法获取接口类实例
3、执行接口类方法,mybatis 会根据接口类路径去匹配 namespace,方法名匹配 sqlId,去XML文件中查找相应的SQL语句来执行

上一篇下一篇

猜你喜欢

热点阅读