【知了堂学习笔记】_mybatis入门

请关注“知了堂学习社区”,地址:http://www.zhiliaotang.com/portal.php

- MyBatis是一个ORM框架

ORM:对象关系映射(Object Relation Mapping)。用于实现面向对象编程语言里不同类型数据之间的转换。把表映射成实体类,把表中的字段映射成实体类中的属性(POJO)

常见的ORM开源框架:mybatis,hibernate

Mybatis和hibernate的不同:更加关注原生sql的编写来实现CRUD的操作
Mybatis采用功能强大的基于OGNL的表达式来消除其他元素。#{..}
  • 持久层框架
  • 持久化:将数据信息永久保存,数据库,文件系统
  • 持久层:实现将数据实现持久化操作的框架,就是取代JDBC(将数据保存在数据库中)
  • 持久层框架:mybatis、hibernate
  • 是一个不完成的ORM框架
  • ORM:object-relation-mapping:对象关系映射
  • 表—类,对象—记录,列—-属性
  • 在代码中操作对象的方式,实现对数据库中表的操作
  • 代码中只考虑映射对象,不考虑表相关的信息
  • hibernate是一个完成的ORM框架
  • mybatis:完整的应该是对象映射成关系,关系映射成对象,但是mybatis只完成了单边
  • 对sql存储过程,动态sql的处理进行了封装
  • 取代了JDBC,减少了代码量
  • 是从iBatis发展而来,apache项目下,接着在goolecode,现在在github下
  • Apache
    • 服务器,跨平台,安全性
    • ASF:开源项目基金会
      • Tomcat
      • Ibatis
      • hadoop–大数据
      • lucence–检索
  • Googlecode
    • 开源项目托管
  • GitHub
    • 开源项目托管
  • mybatis的环境配置

  • 导入mybatis的包,mybatis-3.2.8.jar

  • 导入mysql的驱动包,MySQL-connector-java-5.1.24.jar
  • 导入表的实体类:普通的JavaBean,JavaBean的属性需要对应数据库表中的字段
  • 编写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="jdbc.properties"></properties>
<typeAliases>
<package name="com.zhiliaotang.mybatis.model"/>
    </typeAliases>
    <!-- 配置开发模式, 添加数据库信息, 开启事务模式 -->
<environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/zhiliaotang/mybatis/mapper/UserMapper.xml"/>
        <mapper resource="com/zhiliaotang/mybatis/mapper/TeacherMapper.xml"/>
        <mapper resource="com/zhiliaotang/mybatis/mapper/StudentMapper.xml"/>
        <mapper class="com.zhiliaotang.mybatis.dao.StudentDao"/>
    </mappers>
</configuration>

  • 编写jdbc.propertis
mysql.driver = com.mysql.jdbc.Driver
mysql.url = jdbc:mysql://localhost:3306/music
mysql.username = root
mysql.password = 123456

`
- 编写映射文件(***Mapper.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.zhiliaotang.mybatis.mapper.UserMapper">
    <!-- 数据库中 表的字段和实体类中的属性的对应 -->
    <resultMap type="cloneUser" id="baseResultMap">
        <id column="user_id" property="userId"/>
        <result column="user_name" property="userName"/>
        <result column="user_mail" property="userMail"/>
        <result column="user_gender" property="userGender"/>
        <result column="user_pwd" property="userPwd"/>
    </resultMap>   
    <!-- 属性的数据类型 -->
    <parameterMap type="cloneUser" id="baseParameterMap">
        <parameter property="userId" javaType="java.lang.Integer"/>
        <parameter property="userName" javaType="java.lang.String"/>
        <parameter property="userMail" javaType="java.lang.String"/>
        <parameter property="userGender" javaType="java.lang.String"/>
        <parameter property="userPwd" javaType="java.lang.String"/>
    </parameterMap>

    <select id="userinfo" resultType="User">
        select * from users where user_id = 5
    </select>

    <select id="userinfoById" resultType="User" parameterType="java.lang.Integer">
        select * from users where user_id = #{user_id} 
    </select>

    <select id="userinfoByName" resultType="User" parameterType="user">
        select * from users where user_id = #{user_id} and user_name=#{user_name}
    </select>

    <select id="cloneuserinfo" resultMap="baseResultMap">
        select * from users where user_id = 5
    </select>

    <select id="cloneuserinfoByName" resultMap="baseResultMap" parameterMap="baseParameterMap">
        select * from users where user_id = #{user_id} 
</select>
</Mapper>


  • 通过测试来完成数据库CRUD操作
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 org.junit.Test;


import com.zhiliaotang.mybatis.dao.StudentDao;
import com.zhiliaotang.mybatis.model.Student;
import com.zhiliaotang.mybatis.model.Teacher;
import com.zhiliaotang.mybatis.model.User;
import com.zhiliaotang.mybatis.model.cloneUser;

public class TestMybatis {

    private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader;

    static{
        try {
            reader = Resources.getResourceAsReader("config.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }

         sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    }

    @Test
    public void test1(){
        // CRUD
        // 获取SqlSession对象
        // 执行映射文件中SQL语句(映射文件是哪个?)
        // 返回结果
        SqlSession sqlSession = sqlSessionFactory.openSession();
        String sql = "com.zhiliaotang.mybatis.mapper.UserMapper.userinfo";
        User user = sqlSession.selectOne(sql);
        System.out.println(user.getUser_id()+" "+user.getUser_pwd()+" "+user.getUser_name()+" "+user.getUser_mail()+" "+user.getUser_gender());
        sqlSession.close();
    }
}

总结:

  1. 读取配置文件(得到sql语句)
    1. 核心配置文件:JDBC的联系
    2. 映射配置文件:得到sql
  2. 底层JDBC
  3. 结果集的反射:在映射配置文件有存在映射类
    1. ObjectFactory:class类的实例,反向create一个实例出来,通过其他的反射方式,那些结果集的列的值就是实例的属性
  4. sqlSessionfactory.Builder :
    1. 通过mybatis的可信配置文件创建sqlsessionfactory;
    2. 根据不同的环境,创建不同的;
    3. 是一个类
  5. sqlsessionFactory:接口
    1. 一个sqlSessionFactory对应一个数据库,
    2. Factory一定是单例的
      1. POOLED:factory中连接是可以重用的
      2. UNPOOLED:每次使用都是创建一个新的连接
      3. JNDI:与框架容器整合的时间,数据连接配置项的共用
  6. SqlSession:接口
    1. 每一次真正执行sql操作是的连接,相关于JDBC的connection
    2. 非线程安全
    3. 事务
    4. Request作用域
    5. 执行器:最终让executor做查询
  7. mapper示例
    1. 接口代理的形式
    2. Session.getMapper(class 示例)
      1. Dao层接口:定义了一系列的方法
      2. mybatis通过getMapper生成了Dao的代理(装饰者)
      3. 真正实现dao方法的是代理
    3. 映射文件方式和代理方式
      1. 代理方式最终是使用映射文件方式的实现
        这里写图片描述

mybatis是一个ORM框架,是一个取代JDBC的框架,通过读取配置文件,创建JDBC的连接,通过反射映射结果

mybatis的架构:
我们使用的接口层,做增删改查,会用到参数的解析,sql的解析,然后开始执行sql,得到结果进行结果映射,而支撑整个SQL解析,需要数据库的事务,数据库的连接,还有配置加载和缓存处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值