解密Mybatis手写Mybatis框架一

4次阅读

共计 3839 个字符,预计需要花费 10 分钟才能阅读完成。

Mybatis 快速入门

步骤

  • 1. 加入 mybatis 的依赖
  • 2. 添加 Mybatis 的配置文件
  • 3. 场景介绍
  • 4. 编写实体类丶 mapper 接口及 mapper.xml 文件
  • 5. 编写测试代码

demo:

public class TUser {
    private Integer id;

    private String userName;

    private String realName;

    private Byte sex;

    private String mobile;

    private String email;

    private String note;

    private Integer positionId;

    public Integer getId() {return id;}

    public void setId(Integer id) {this.id = id;}

    public String getUserName() {return userName;}

    public void setUserName(String userName) {this.userName = userName;}

    public String getRealName() {return realName;}

    public void setRealName(String realName) {this.realName = realName;}

    public Byte getSex() {return sex;}

    public void setSex(Byte sex) {this.sex = sex;}

    public String getMobile() {return mobile;}

    public void setMobile(String mobile) {this.mobile = mobile;}

    public String getEmail() {return email;}

    public void setEmail(String email) {this.email = email;}

    public String getNote() {return note;}

    public void setNote(String note) {this.note = note;}

    public Integer getPositionId() {return positionId;}

    public void setPositionId(Integer positionId) {this.positionId = positionId;}
      
}
public interface TUserMapper {TUser selectByPrimaryKey(Integer id);
    
}

TUserMapper.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.enjoylearning.mybatis.mapper.TUserMapper">

    <select id="selectByPrimaryKey" resultType="com.enjoylearning.mybatis.entity.TUser"    parameterType="java.lang.Integer">
        select
            id, 
            user_name , 
            real_name , 
            sex, 
            mobile, 
            email, 
            note,
            position_id positionId
        from t_user
        where id = #{id}
    </select>

</mapper>

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>

    <properties resource="db.properties" />

    <settings>
        <!-- 全局开关 -->

        <!-- 设置自动驼峰转换 -->
        <setting name="mapUnderscoreToCamelCase" value="true" />

        <!-- 开启懒加载 -->

        <setting name="lazyLoadingEnabled" value="false"/>
        
    
    </settings>
    <!-- 别名定义 -->
    <typeAliases>
    <package name="com.enjoylearning.mybatis.entity"/>
</typeAliases>

    <!-- 配置 environment 环境 -->
    <environments default="development">
        <!-- 环境配置 1,每个 SqlSessionFactory 对应一个环境 -->
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="UNPOOLED">
                <property name="driver" value="${jdbc_driver}" />
                <property name="url" value="${jdbc_url}" />
                <property name="username" value="${jdbc_username}" />
                <property name="password" value="${jdbc_password}" />
            </dataSource>
        </environment>

    </environments>

    <!-- 映射文件,mapper 的配置文件 -->
<!--     <mappers>
        直接映射到相应的 mapper 文件
        <mapper resource="sqlmapper/TUserMapper.xml" />
    </mappers> -->

    <mappers>
        <mapper class="com.enjoylearning.mybatis.mapper.TUserMapper" />
    </mappers>


</configuration>

db.properties:

jdbc_driver=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
jdbc_username=root
jdbc_password=qq997921

测试类:

public class MybatisQuickStart {

private SqlSessionFactory sqlSessionFactory;



@Test
// 快速入门
public void quickStart() throws IOException {
    //------------- 第一阶段 -------------
    // 1. 读取 mybatis 配置文件创 SqlSessionFactory
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    inputStream.close();
    //------------- 第二阶段 -------------
    // 2. 获取 sqlSession
    SqlSession sqlSession = sqlSessionFactory.openSession();
    // 3. 获取对应 mapper
    TUserMapper mapper = sqlSession.getMapper(TUserMapper.class);

    //------------- 第三阶段 -------------
    // 4. 执行查询语句并返回结果
    TUser user = mapper.selectByPrimaryKey(1);
    System.out.println(user.toString());

}

}

Mybatis 两种编程模型

1. 封装了 iBatis 编程模型, 使用 sqlSession 对外提供数据库的访问
比如使用 sqlSession 直接访问数据库, 代码如:

User user1 = session.selectOne("com.XX.XX.XXMapper.selectOneByKey","1");

2. 使用 mapper 接口编程, 就可以访问数据库

UserMapper userMapper = session.getMapper(UserMapper.class);
User user = userMapper.selectByPrimaryKey(1);

对比两种模型
第一种缺点: 代码里面会很多硬编码, 硬编码不好维护, 代码不优雅, 并且 selectOne 方法名称没有业务含义.

优先选择 mapper 接口编程。

Mybatis 核心流程三大阶段

缕清思路也就是 Mybatis 核心流程之后,我们就开始写代码了,详见下节~~

正文完
 0