First, introduce dependencies

1.Maven RepositorySearch mybatis

Version 3.5.3 is used for this article.

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.3</version>
</dependency>
Copy the code

2. MySQL driver package is introduced. MySQL database 8.0 is used in this paper

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.21</version>
</dependency>
Copy the code

Two, Mybatis configuration

1. Core configuration files

Create the mybatis-config. XML file under Resources to create the SqlSessionFactory object


      
<! DOCTYPEconfiguration
        PUBLIC "- / / mybatis.org//DTD Config / 3.0 / EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <! -- Use default to switch between different database environments -->
    <environments default="development">
        <! Version 8.0 database link configuration as follows:
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="JDBC: mysql: / / localhost: 3306 / database name? characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=UTC&amp;rewriteBatchedStatements=true"/>
                <property name="username" value="root"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
        
        <environment id="product">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="root"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <! -- Configure the Mapper address, for example: XXX/XXX/XXX /mapper.xml-->
        <mapper resource="${mapper}"
    </mappers>
</configuration>
Copy the code

Three, use,

1. Obtain SqlSession

Encapsulate the utility class that gets SqlSession

public class MybatisUtil {

    private static SqlSessionFactory sqlSessionFactory;

    // static code block, executed once when the class is loaded
    static {
        String resource = "mybatis-config.xml";
        InputStream is = null;
        try {
            is = Resources.getResourceAsStream(resource);
            sqlSessionFactory =new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                is.close();
            } catch(IOException e) { e.printStackTrace(); }}}public  static SqlSession getSqlSession(a){
        return sqlSessionFactory.openSession();
    }

    public  static void close(SqlSession sqlSession){
        if(sqlSession! =null) { sqlSession.close(); }}}Copy the code

2. Dao interface

public interface UserDAO {

    int save(User user);

    int update(User user);

    int delete(int id);

    List<User> queryAll(a);

}
Copy the code

3. Mapper configuration file


      
<! DOCTYPEmapper
        PUBLIC "- / / mybatis.org//DTD Mapper / 3.0 / EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<! -- Bind dao interface to namespace -->        
<mapper namespace="UserDAO">
    <! ParameterType specifies the type of the parameterType parameter. KeyProperty specifies the ID of user. UseGeneratedKeys Specifies the primary key increment -->
    <insert id="save" parameterType="User" keyProperty="id" useGeneratedKeys="true">
        insert into t_user values (#{id},#{name},#{age})
   </insert>
   <! Update data by id -->
   <update id="update" parameterType="User">
        update t_user
        <set>
        <! The set tag can dynamically remove redundant commas before and after assignments.
            <if test="name! =null and name! = "">
                name = #{name},
            </if>
            <if test="age ! = 0">
                age = #{age}
            </if>
        </set>
        where id = #{id}
    </update>

    <delete id="delete" parameterType="Integer">
        delete  from  t_user where id = #{id}
    </delete>
    
     <! Select * from public SQL statement -->
    <sql id="queryUser">
        select id,name,age from t_user
    </sql>
    <! --resultType Specifies the return value type. Mubatis will automatically encapsulate multiple data sets as List<User>-->
    <select id="queryAll" resultType="User">
        <! SQL > insert into SQL
        <include refid="queryUser"/>
    </select>
</mapper>
Copy the code

4. Register mapper. XML with mybatis-config. XML

<mappers>
   <mapper resource="xxx/xxx/xxxx/UserMapper.xml"/>
   <! -- Register other mapper-->
   <mapper resource="xxx/xxx/xxxxx/xxxx.xml"/>
</mappers>
Copy the code

5. Add, delete, change and check the test

SqlSession sqlSession = null;
    try {
        sqlSession = MybatisUtil.getSqlSession();
        UserDAO userDAO = sqlSession.getMapper(UserDAO.class);
        / / to add
        User user =new User();
        user.setName("Xiao Ming");
        user.setAge(10);
        int num = userDAO.save(user);
        / / change
        User user =new User();
        user.setId(1);
        user.setName("Black");
        user.setAge(15);
        int num = userDAO.update(user);
        / / check
        List<User> list = userDAO.queryAll();
        / / delete
        userDAO.delete(1);
        
        // Write to the database only after executing commit
        sqlSession.commit();
    } catch (Exception e) {
        sqlSession.rollback();
        e.printStackTrace();
    } finally {
        MybatisUtil.close(sqlSession);
    }
Copy the code

3. Difference between resultType and resultMap

ResultType returns a simple object that contains no object. ResultMap returns complex objects, for example, object A contains object B.

1. Use of resultMap

Object A

private int id;
private String name;
private int age;

private B b;
Copy the code

Object B

private int id;
private String cardNo;
private String address;
Copy the code

mapper.xml

<! --id unique identifier -->
<resultMap id="queryMap" type="A">
    <! --id primary key, other use result tag -->
    <id column="id" property="id"/>
    <result column="name" property="name"/>
    <result column="age" property="age"/>
    <! Select * from association; select * from collection; select * from association;
    <association property="b" javaType="B">
        <id column="iid" property="id"/>
        <result  column="icardNo" property="cardNo"/>
        <result  column="address" property="address"/>
    </association>
</resultMap>

<select id="queryAll" resultMap="queryMap">
</select>
Copy the code