Mybatis [the first Mybatis program]

2. The first Mybatis program

Idea: build environment --> import Mybatis --> write code --> test

2.1 Build environment

build database

create database `mybatis`;
use `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;

select * from user;

insert into `user` (`id`,`name`,`pwd`) VALUES
(1,'酱油','123456'),
(2,'张三','123456'),
(3,'李四','123456')

New Project

1. Create a new normal maven project

2. Delete the src directory

3. Import maven dependencies

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.jiang</groupId>
    <artifactId>Mybatis-Study</artifactId>
    <version>1.0-SNAPSHOT</version>


    <!--导入依赖-->
    <dependencies>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</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>
        </dependency>


    </dependencies>

</project>

2.2 Create a module

Write the core configuration file of 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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

Write mybatis tool class

package com.jiang.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

//sqlSessionFactory -->sqlSession
public class MybatisUtils {
    private  static SqlSessionFactory sqlSessionFactory;
    static{
        try {
            //使用Mybatis第一步:获取sqlSessionFactory对象
            String resource="mybatis-config.xml";
            InputStream inputStream = null;
            inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //既然有了SqlSessionFactory,顾名思义,我们就可以从中获得SqlSession的实例了
    //SqlSession完全包含了面向数据库执行SQL命令所需的所有方法
    public static SqlSession getSqlSesssion(){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        return  sqlSession;
    }



}

2.3, write code

Entity class

package com.jiang.pojo;

import lombok.Data;
import lombok.RequiredArgsConstructor;

@Data
@RequiredArgsConstructor
public class user {
    private int id;
    private String name;
    private String pwd;
}

Dao interface

package com.jiang.dao;

import com.jiang.pojo.User;

import java.util.List;

public interface UserDao {
    List<User> getUserList();

}

The interface implementation class is changed from the original UserDaoImpl to a Mapper configuration file

<?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.jiang.dao.UserDao">
    <!--id为dao/mapper层内函数的名字,resultType返回结果-->
   <select id="getUserList" resultType="com.jiang.pojo.User">
       select * from mybatis.user;
   </select>
</mapper>

2.4. Test

What is Mapper Registry?

Register mappers in the core configuration file

  <!--每一个Mapper.XML都需要在Mybatis核心配置文件中注册-->
    <mappers>
        <mapper resource="com/jiang/dao/UserMapper.xml"></mapper>
    </mappers>

Junit test

package com.jiang.dao;

import com.jiang.pojo.User;
import com.jiang.util.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserDaoTest {

    @Test
    public void test(){
        //第一步:获得SqlSession对象
        SqlSession sqlSesssion = MybatisUtils.getSqlSesssion();
        //执行SQL
        //方式一:getMapper
        UserDao userDao = sqlSesssion.getMapper(UserDao.class);
        List<User> userList = userDao.getUserList();

        //方式二:
        List<User> userList =     sqlSesssion.selectList("com.jiang.dao.UserDao.getUserList");


        for (User user:userList) {
            System.out.println(user);
        }

        //关闭SqlSession
        sqlSesssion.close();
    }
}

possible problems

1. The configuration file is not registered

2. Binding interface error

3. The method name is wrong

4. The return type is wrong

5. Maven export resource problem


https://www.bilibili.com/video/BV1NE411Q7Nx?p=3&spm_id_from=pageDriver

Guess you like

Origin blog.csdn.net/qq_48108092/article/details/124118789