1. Mybatis快速入门

Untitled

  1. 创建数据表

    CREATE DATABASE mybatis ;
    
    USE mybatis ;
    
    CREATE TABLE USER(
      id INT 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, '李四', '123'),
      (2, '王五', '456'),
      (3, '李明', '789')
    
  2. 创建User表,添加数据

  3. 创建模块,导入坐标

    <dependencies>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>
        <!--mybatis驱动-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
    
    <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                    <configuration>
                        <skipTests>true</skipTests>
                    </configuration>
                </plugin>
            </plugins>
    
            <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>
        </build>
    
  4. 编写Mybatis核心配置文件: mybatis-config.xml

    编写Mybatis核心配置文件,在resources下创建mybatis-config.xml文件,配置自己的数据库地址、名字、密码以及mysql驱动

    <?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>
        
        <!--配置Mybatis运行环境-->
        <environments default="development">
            <environment id="development">
                <!--配置JDBC事务管理-->
                <transactionManager type="JDBC"/>
                <!--POOLED配置JDBC数据源连接池-->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=UTC"/>
                    <property name="username" value="root"/>
                    <property name="password" value="root"/>
                </dataSource>
            </environment>
        </environments>
    		<mappers>
    			<mapper resource="com/itheima/mapper/UserMapper.xml"/>
    		</mappers>
    
    </configuration>
    
  5. 编写SQL映射文件: UserMapper.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="test">
        <select id="findAll" resultType="com.mybatis.entity.User">
            select * from tb_user
        </select>
    </mapper>
    
  6. 编码

    1. 定义POJO类

      //实体类
      public class User {
          private  int id;
          private String name;
          private String pwd;
      
          public User(int id, String name, String pwd) {
              this.id = id;
              this.name = name;
              this.pwd = pwd;
          }
      
          public User() {
          }
      
          @Override
          public String toString() {
              return "User{" +
                      "id=" + id +
                      ", name='" + name + '\\'' +
                      ", pwd='" + pwd + '\\'' +
                      '}';
          }
      
          public int getId() {
              return id;
          }
      
          public void setId(int id) {
              this.id = id;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public String getPwd() {
              return pwd;
          }
      
          public void setPwd(String pwd) {
              this.pwd = pwd;
          }
      }
      
    2. 加载核心配置文件,获取SQLSessionFactory对象

    3. 获取SQLSession对象,执行SQL语句

    4. 释放资源

      //SqlSessionFactory --> sqlSession
      public class MybatisUtils {
      
      	public static void main(String[] args) throws IOException {
      		String resource="mybatis-config.xml";
      		InputStream inputStream = Resources.getResourceAsStream(resource);
      		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      
      		SqlSession sqlSession = sqlSessionFactory.openSession();
      
      		List<User> users = sqlSession.selectList("test.findAll");
      		System.out.println(users);
      
      		sqlsession.close();
      	}
      }
      

2. Mapper代理开发

  1. 定义与SQL映射文件同名的Mapper接口,并且将Mapper 和SQL映射文件放置在同一目录下

    public interface UserDao {
         List<User> findAll();
    }
    
  2. 设置SQL映射文静的namespace属性为Mapper接口全限定名

  3. 在Mapper接口中定义方法,方法名就是SQL映射文件中的SQL语句的id,并保持参类型的返回值类型一致

    <?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.mybatis.dao.UserDao">
        <select id="findAll" resultType="com.mybatis.entity.User">
            select * from user
        </select>
    </mapper>
    
  4. 编码

    //SqlSessionFactory --> sqlSession
    public class MybatisUtils {
    
    	public static void main(String[] args) throws IOException {
    		String resource="mybatis-config.xml";
    		InputStream inputStream = Resources.getResourceAsStream(resource);
    		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    
    		SqlSession sqlSession = sqlSessionFactory.openSession();
    
    		UserMapper userMapper = sqlsession.getMapper(userMapper.class);
    		List<User> users = userMapper.findAll();
    		System.out.println(users);
    
    		sqlsession.close();
    	}
    }
    

<aside> 🌷 如果Mapper接口吗名称和SQL映射文件文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载

<mappers>
		<package name="com.itheima.mapper"/>
</mappers>

</aside>