第一个MyBatis程序

思路:搭建环境 --> 导入MyBatis --> 编写代码 --> 测试!

1、搭建环境

搭建数据库

-- 创建数据库
CREATE DATABASE `mybatis`;

USER `mybatis`;

-- 创建表
CREATE TABLE `user`(
	`id` int(20) NOT NULL PRIMARY KEY,
	`name` VARCHAR(30) DEFAULT NULL,
	`pwd` VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8

-- 插入表数据
INSERT INTO `user`(`id`,`name`,`pwd`) VALUES
(1,'小王','123456'),
(2,'张三','123456'),
(3,'李四','123456');

新建项目

  1. 新建一个普通的maven项目

  2. 删除src目录,将它设置为父工程

  3. 导入maven依赖

    <!-- 导入依赖 -->
    <dependencies>
        <!-- MySql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!-- MyBatis驱动 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    

2、创建一个模块

  • 编写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核心配置文件 -->
    <configuration>
        <properties resource="jdbc.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>
        <mappers>
           <mapper resource="com/kuang/dao/userMapper.xml"/>
       	</mappers>
    </configuration>
    
  • 编写MyBatis的工具类

    // sqlSessionFactory --> sqlSession
    public class MyBatisUtils {
        private static SqlSessionFactory sqlSessionFactory;
    
        static {
            try {
                // 使用MyBatis获取sqlSessionFactory对象
                String resource = "mybatis-config.xml";
                InputStream inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
        // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
        public static SqlSession getSqlSession() {
            return sqlSessionFactory.openSession();
        }
    }
    

3、编写代码

  • 实体类

    // 实体类
    public class User {
        private Integer id;
        private String name;
        private String pwd;
       //构造,有参,无参
       //set/get
       //toString()
    }
    
  • 编写Mapper接口

    public interface UserMapper {
        List<User> getUserList();
    }
    
  • 接口实现类由原来的Impl转化为一个mapper.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">
    <!-- namespace=绑定一个Mapper接口 -->
    <mapper namespace="com.jh.mapper.UserMapper">
        <!-- select 查询语句 -->
        <select id="getUserList" resultType="com.jh.domain.User">
            select * from user
        </select>
    </mapper>
    

4、测试代码

注意点:

org.apache.ibatis.binding.BindingException: Type interface com.jh.mapper.UserMapper is not known to the MapperRegistry.

MapperRegistry是什么?测试配置文件中注册mappers

  • junit测试

    public class UserMapperTest {
        @Test
        public void test() {
            // 第一步:获得sqlSession对象
            SqlSession sqlSession = MyBatisUtils.getSqlSession();
            // 方式一:执行sql
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            List<User> userList = userMapper.getUserList();
            // 方式二:(不推荐)
        //List<User> userList = sqlSession.selectList("com.jh.mapper.UserMapper.getUserList");
            for (User user : userList) {
                System.out.println(user);
            }
            sqlSession.close();
        }
    }
    

测试中可能会遇到的问题:

  1. 配置文件没有注册
  2. 绑定接口错误
  3. 方法名不正确
  4. 返回类型不正确
  5. maven静态资源过滤问题
<resources>
   <resource>
       <directory>src/main/java</directory>
       <includes>
           <include>**/*.properties</include>
           <include>**/*.xml</include>
       </includes>
       <filtering>false</filtering>
   </resource>
   <resource>
       <directory>src/main/resources</directory>
       <includes>
           <include>**/*.properties</include>
           <include>**/*.xml</include>
       </includes>
       <filtering>false</filtering>
   </resource>
</resources>
posted @ 2020-12-30 13:02  天下御免  阅读(78)  评论(0编辑  收藏  举报