美文网首页
Mybatis 学习笔记

Mybatis 学习笔记

作者: tingshuo123 | 来源:发表于2018-07-15 16:23 被阅读5次

Mybatis 学习笔记

配置 MyBatis 环境

导入MyBaits依赖jar包

要使用 MyBatis, 需要mybatis-x.x.x.jar、mysql-connector-java-5.1.38-bin.jar 两个架包

创建 Mybatis 配置文件

在 src 下 创建 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>

    <!-- 设置别名 -->
    <typeAliases>
        <package name="com.project.bean"/>
    </typeAliases>
    
    <!-- 默认环境 -->
    <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/test" />
                <property name="username" value="root" />
                <property name="password" value="" />
            </dataSource>
        </environment>
    </environments>
    
    <!-- 导入mapper文件 -->
    <mappers>
        <!-- <mapper resource="com/project/mapper/XXX.xml" /> -->
    </mappers>

</configuration>

根据表创建实体Bean

表结构

在com.project.bean包下创建UserBean,提供 get、set方法。

package com.project.bean;

public class UserBean {
    private int id;
    private String name;
    private String dept;
    private String website;
    private String phone;
    // get、set方法
}

创建操作表的Dao接口

在com.project.dao包下创建 IUserDao接口,写一个通过 id 查找用户的方法。

package com.project.dao;

import com.project.bean.UserBean;

public interface IUserDao {
    
    // 通过id查找用户信息
    public UserBean findUserById(int id);
}

配置映射文件

在 com.project.mapper 包下面创建 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="com.project.mapper.UserMapper">
    <select id="findUserById" parameterType="int" resultMap="userResultMap">
        select * from t_user where u_id = #{id};
    </select>
    <!-- 将查询结果映射到实体Bean -->
    <resultMap id="userResultMap" type="UserBean">
        <!-- 映射主键字段 -->
        <id property="id" column="u_id" />
        <!-- 映射普通字段 -->
        <result property="name" column="u_name" />
        <result property="dept" column="u_udept" />
        <result property="website" column="u_website" />
        <result property="phone" column="u_phone" />
    </resultMap>
</mapper>

创建好了sql映射文件,需要在 Mybatis 中添加才能生效,在config中 <mappers> 标签中添加 <mapper resource="com/project/mapper/UserMapper.xml" />

    <mappers>
        <mapper resource="com/project/mapper/UserMapper.xml" />
    </mappers>

解释上面的字段
<select> 查、<update> 改、<insert> 增、<delete>
namespace 是命名空间,可以任意写,待会会通过 namespace.id 来获取sql语句
parameterType 指定输入参数类型,只能是单个参数,如果是简单类型可以省略不写,想传入多个参数可以通过在接口对应方法的参数列表添加注解实现。
resultMap 查询结果map名
<resultMap> 将指定查询结果映射到实体Bean
resultMap 中 type 是类型名,如果没有在config.xml设置别名需要写类的全路径
resultMap 中 property 是Bean对象的属性,column 是sql 查询结果的字段名

通过读取config内容获取 Sqlsession对象

在 com.project.util 包下创建工具类 MybatisUtil,内容如下:

package com.project.util;

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

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

public class MybatisUtil {

    /**
     * 获取SqlSession工厂对象
     * 
     * @return
     */
    public static SqlSessionFactory getSqlSessionFactory() {
        // 加载配置文件
        String resource = "config.xml";
        InputStream inputStream = null;
        SqlSessionFactory fa = null;

        try {
            // 读取配置文件
            inputStream = Resources.getResourceAsStream(resource);
            // 构造Sqlsession的工厂对象
            fa = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return fa;
    }

    /**
     * Session 不自动提交事务
     * 
     * @return
     */
    public static SqlSession getsession() {
        SqlSessionFactory fa = getSqlSessionFactory();
        SqlSession session = fa.openSession();

        return session;
    }

    /**
     * 
     * @param boo true: Session 自动提交事务
     * @return
     */
    public static SqlSession getsession(boolean boo) {
        SqlSessionFactory fa = getSqlSessionFactory();
        SqlSession session = fa.openSession(boo);

        return session;
    }
}

实现 IUserDao 接口

在 com.project.dao.impl 包下,创建UserDaoImpl类并实现IUserDao接口,内容如下:

package com.project.dao.impl;

import org.apache.ibatis.session.SqlSession;

import com.project.bean.UserBean;
import com.project.dao.IUserDao;
import com.project.util.MybatisUtil;

public class UserDaoImpl implements IUserDao {

    @Override
    public UserBean findUserById(int id) {
        // 获取session
        SqlSession session = MybatisUtil.getsession(true);
        UserBean user = null;
        try {
            // 通过 namespace.id 定位需要sql语句
            user = session.selectOne("com.project.mapper.UserMapper.findUserById", id);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
        return user;
    }

}

还有另一种实现方式,这种方式有两个要求,命名空间的值与接口全路径一致,sql语句id与接口方法名一致

<mapper namespace="com.project.dao.IUserDao">
    <select id="findUserById" parameterType="int" resultMap="userResultMap">
        select * from t_user where u_id = #{id};
    </select>
<-- 省略部分 -->
</mapper>
package com.project.dao.impl;

import org.apache.ibatis.session.SqlSession;

import com.project.bean.UserBean;
import com.project.dao.IUserDao;
import com.project.util.MybatisUtil;

public class UserDaoImpl implements IUserDao {

//  @Override
//  public UserBean findUserById(int id) {
//      // 获取session
//      SqlSession session = MybatisUtil.getsession(true);
//      UserBean user = null;
//      try {
//          // 通过 namespace.id 定位需要sql语句
//          user = session.selectOne("com.project.mapper.UserMapper.findUserById", id);
//      } catch (Exception e) {
//          e.printStackTrace();
//      } finally {
//          session.close();
//      }
//      return user;
//  }
    
    @Override
    public UserBean findUserById(int id) {
        // 获取session
        SqlSession session = MybatisUtil.getsession(true);
        IUserDao dao = session.getMapper(IUserDao.class);
        UserBean user = null;
        try {
            user = dao.findUserById(id);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
        return user;
    }

}

编写测试函数测试

package com.project.test;

import com.project.bean.UserBean;
import com.project.dao.IUserDao;
import com.project.dao.impl.UserDaoImpl;

public class TestMain {

    public static void main(String[] args) {
        
        IUserDao dao = new UserDaoImpl();
        UserBean user = dao.findUserById(1);
        System.out.println(user);
    }

}

测试结果


结果

查询成功。。。

相关文章

网友评论

      本文标题:Mybatis 学习笔记

      本文链接:https://www.haomeiwen.com/subject/pguppftx.html