Mybatis基础

1、MyBatis出现的原因

Mybatis的出现时为了弥补bibernate全表映射所带来的效率低下的问题。它是一个半自动映射的框架,需要手工匹配提供POJO、SQL和映射关系。
MyBatis所需要提供的映射文件为:

  • SQL
  • 映射规则
  • POJO
2、MyBatis基本的概念
  • SqlSessionFactoryBuilder(SQL会话工厂构造器):根据配置新或者代码生成SqlSessionFactory
  • SqlSessionFactory:依靠工厂来生成SqlSession会话
  • SqlSession一个即可发送SQL去执行并返回结果,也可以获取Mapper的接口;
  • SQL Mapper: 由一个Java接口和XML文件构成,需要给出相应的SQL和映射规则,并返回执行的结果。
3、使用xml文件构建

使用XML文件构建时,Mybatis的解析程序会将mybatis-config.xml文件配置信息解析到Configuration类的对象里面,然后利用SqlSessionFactoryBuilder读取这个对象,为我们创建SqlSessionFactory
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>
    <!--定义别名-->
    <typeAliases>
        <typeAlias type="com.hh.xlt.model.Role" alias="role"/>
    </typeAliases>
    
    <!--定义数据库信息,默认使用development数据库构建环境-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:16003/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="toor"/>
            </dataSource>
        </environment>
    </environments>
    <!--定义映射器-->
    <mappers>
        <mapper resource="resources/mapper/roleMapper.xml"/>
    </mappers>
</configuration>

创建会话的java代码:

 String resource="mybatis-config.xml";
 try{
     InputStream inputStream= Resources.getResourceAsStream(resource);
     SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
 }catch (IOException e){
     e.printStackTrace();
 }
3、映射器

映射器是由JAVA接口和XML文件(或注解)共同组成,有如下作用:

  • 定义参数类型
  • 描述缓存
  • 描述SQL语句
  • 定义查询结果和POJO的映射关系

使用XML文件实现mapper比较好,可以实现比较复杂的映射;使用java注解也可以实现,但是注解是受限的,并且使用动态SQL时,java的维护比较困难。
实例:实现上面的role查询
首先定义java接口:

package com.hh.xlt.dao;

import com.hh.xlt.model.Role;

public interface RoleMapper {
    public Role getRole(Long id);//通过id查询一个角色对象
}

然后给出一个映射的XML文件,RoleMapper.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.hh.xlt.dao.RoleMapper">
    <select id="getRole" parameterType="long" resultType="Role">
        SELECT id,role_name as roleName,note FROM role_t where id=#{id}
    </select>
</mapper>

代码中的SELECT id,role_name as roleName,note FROM role_t where id=#{id}为SQL语句,#{id}与接口 public Role getRole(Long id);传入的参数名称相对应。

Role类定义为:

package com.hh.xlt.model;

public class Role {
    
    private Long id;
    private String roleName;
    private String note;

    public Long getId() {
        return id;
    }

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

    public String getRoleName() {
        return roleName;
    }

    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }

    public String getNote() {
        return note;
    }

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

建表SQL语句:

DROP TABLE IF EXISTS `role_t`;
CREATE TABLE `role_t`
(
   `id` BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 'ID主键', 
	 `role_name` VARCHAR(50) NOT NULL COMMENT '角色名字',
   `note` VARCHAR(100) NOT NULL COMMENT '详细信息'
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT role_t(id,role_name,note) VALUES ('1','皇帝','扮演秦始皇');
INSERT role_t(id,role_name,note) VALUES ('2','乞丐','扮演苏乞儿');
INSERT role_t(id,role_name,note) VALUES ('3','骑士','扮演荆轲');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值