第一个Mybatis程序

Mybatis

2、第一个Mybatis程序

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

2.1、搭建环境

  • 搭建数据库

    • CREATE DATABASE ibatis;
      USE ibatis;
      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,'admin','ADMIN'),
      (2,'6','6'),
      (3,'ER','ER');
      
  • 新建项目

    • 新建一个普通的maven项目。

    • 删除src目录。

    • 导入maven依赖。

      •  <!--父工程-->
            <groupId>com.jcooling.edu</groupId>
            <artifactId>mybatisstudy</artifactId>
            <packaging>pom</packaging>
            <version>1.0-SNAPSHOT</version>
            <modules>
                <module>mybatis-01</module>
            </modules>
            <dependencies>
            <!--mybatis-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.2</version>
            </dependency>
            <!--mysql驱动-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.30</version>
            </dependency>
            <!--junit-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
        </dependencies>
        

2.2、创建一个模块

  • 编写mybatis的核心配置文件(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核心配置文件-->
      <configuration>
          <environments default="development">
              <environment id="development">
                  <!--transactionManager事务管理-->
                  <transactionManager type="JDBC"/>
                  <dataSource type="POOLED">
                      <property name="driver" value="com.mysql.jdbc.Driver"/>
                      <property name="url" value="jdbc:mysql://localhost:3306/ibatis?useSSL=true&amp;useUnicode=true&amp;sun.misc.CharacterEncoder=UTF-8"/>
                      <property name="username" value="root"/>
                      <property name="password" value="123456"/>
                  </dataSource>
              </environment>
          </environments>
          <mappers>
          </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 命令所需的所有方法。
            // 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
            public static SqlSession getSqlSession(){
                return sqlSessionFactory.openSession();
            }
        }
        

2.3 、编写代码

  • 实体类

    • package com.jcooling.pojo;
      //实体类
      public class User {
          private int id;
          private String name;
          private String pwd;
      //无参
          public User() {
          }
      //有参
          public User(int id, String name, String pwd) {
              this.id = id;
              this.name = name;
              this.pwd = pwd;
          }
      //get/set方法
         
      //toString方法
         
      }
      
      
  • dao接口

    • public interface UserDao {
          List<User> getUserList();
      }
      
    • public interface UserMapper{
          List<User> getUserList();
      }
      
  • 接口实现类

    • public class UserDaoImpl implements UserDao{
          public List<User> getUserList() {
              //执行sql
              String sql="select * from user";
              return null;
          }
      }
      
    • 接口实现类由原来的UserDaoImpl转变为一个Mapper配置文件。

    • <?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=绑定一个对应的Dao/Mapper接口-->
      <mapper namespace="com.jcooling.dao.UserDao">
          <!--select查询语句-->
          <select id="getUserList" resultType="com.jcooling.pojo.User">
              select * from user;
          </select>
      </mapper>
      

2.4、测试

  • 注意点:

  • org.apache.ibatis.binding.BindingException: Type interface com.jcooling.dao.UserMapper is not known to the MapperRegistry.

  • <mappers>
        <mapper resource="mapper/UserMapper.xml"></mapper>
    </mappers>
    
  • maven由于他的约定大于配置,我们之后可以能遇到我们写的配置文件,无法被导出或者生效的问题,解决方案:(如果资源写在resources,不用这段代码,按需要来选择)。

    •  <!--在build中配置resources,来防止我们资源导出失败的问题-->
      <!--pom.xml-->
          <build>
              <resources>
                  <resource>
                      <directory>src/main/resources</directory>
                      <includes>
                          <include>**/*.properties</include>
                          <include>**/*.xm1</include>
                      </includes>
                      <filtering>true</filtering>
                  </resource>
                  <resource>
                  <directory>src/main/java</directory>
                  <includes>
                      <include>**/*.properties</include>
                      <include>**/*.xm1</include>
                  </includes>
                  <filtering>true </filtering>
                  </resource>
              </resources>
              </build>
      
  • MapperRegistry是什么?

    • 核心配置文件中注册 mappers。
  • junit测试

    •  @Test
          public void testSelectAll(){
              SqlSession sqlSession = null;
              try {
                  //第一步:获取SqlSession对象
                  sqlSession = MybatisUtils.getSqlSession();
                  //执行SQL语句
                  //方式一:getMapper
                  UserMapper mapper=sqlSession.getMapper(UserMapper.class);
                  List<User> userList = mapper.getUserList();
                 //方式二:
             /* List<User> userList=sqlSession.selectList("com.jcooling.dao.UserMapper.getUserList");*/
                  for (User user : userList) {
                      System.out.println(user);
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              } finally {
                  //关闭SqlSession
                  sqlSession.close();
              }
          }
      
    • 可能会遇到的问题:

      • 配置文件没有注册。
      • 绑定接口错误。
      • 方法名不对。
      • 返回类型不对。
      • Maven导出资源问题。
posted @ 2021-11-21 00:20  JCooling  阅读(33)  评论(0)    收藏  举报