在我看来mybatis的原理与hibernate在某些方面是一致的,先回顾一下Hibernate原理(原理主要上是要掌握并理解下列六个对象:

Hibernate中重要的六个对象:

Configuration:读取配置文件(主要指hibernate-config.xml)和启动hibernate

SessionFactory:负责初始化Hibernate

Session接口:负责持久化对象的CRUD的操作

Transaction:负责事务(opensession或getCurrentSession)

补充说明:

opensession和getCurrentSession的主要区别是:openSession 每一次获得的是一个全新的session对象,而getCurrentSession获得的是与当前线程绑定的session对象

Query接口和Criteria接口:负责执行各种数据库查询

MyBatis和Hibernate的共同点都是通过SqlSessionFactory创建Session,以此达到Session操作数据库的目的。

MyBatis小试牛刀步骤:

一、导包

导包:
asm-3.3.1.jar
cglib-2.2.2.jar
commons-logging-1.1.1.jar
javassist-3.17.1-GA.jar
log4j-1.2.17.jar
log4j-api-2.0-rc1.jar
log4j-core-2.0-rc1.jar
mybatis-3.2.7.jar
mysql-connector-java-5.1.7-bin.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar 其中
mybatis-3.2.7.jar
mysql-connector-java-5.1.7-bin.jar
这两个是必须的缺一不可

二、写主配置文件:

<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!--数据源 但是在整合中不再需要这样写了,具体可参照ssm整合和ajax这篇文章-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/crm"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 主要读取sql映射文件 -->
<mapper resource="com/blog/entity/Mapper.xml"/>
</mappers>
</configuration>

三、建立实体类

package com.blog.entity;

public class User {

    private Integer Id;
private String userName;
private String password;
public Integer getId() {
return Id;
}
public void setId(Integer id) {
Id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} }

四、写Dao

package com.blog.dao;

import java.io.FileNotFoundException;
import java.io.FileReader; import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class BaseDao {
//BaseDao的目的在于实现类通过继承该类而达到操作数据库的目的
public static SqlSessionFactory getSSF(){
String resource="D:\\eclipse_maven\\workspace\\MyBatis\\src\\mybatis.conf.xml";
FileReader fr;
try {
fr = new FileReader(resource); SqlSessionFactory ssf=new SqlSessionFactoryBuilder().build(fr); return ssf; } catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace(); return null;
} }
  //查的方面可以通过BaseDao调用它,增删改对数据库中的数据库有改动则不能使用它,
//即便使用了,也达不到相应的效果
public static SqlSession getSqlSession(){
return getSSF().openSession(); }
//增删改需要它,凡是对数据库有改动的都需要提交事务,提交事务要将opensession设置为true,true为提交事务,
、 //opensession通常默认是false
public static SqlSession getSqlSession(boolean autoCommit){
return getSSF().openSession(autoCommit); } }

五、写映射文件

<?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="Mapper">
//namespace:命名空间
//parameterType:参数类型
//resultMap:返回值类型
<select id="selectById" parameterType="Integer" resultType="com.blog.entity.User">
select * from `user1` where Id=#{Id}
</select> </mapper>

六、写接口

package com.blog.dao;

import com.blog.entity.User;

public interface UserDao {
//查询
User selectById(Integer Id); }

七、写接口的实现类

package com.blog.dao.impl;

import com.blog.dao.BaseDao;
import com.blog.dao.UserDao;
import com.blog.entity.User; public class UserDaoImpl extends BaseDao implements UserDao { @Override
public User selectById(Integer Id) {
/**
          通过getSqlSession()调用增insert()、delete()、update()、selectOne()、
           selectList()等方法,它们都有共同的两个参数,一个对应Mappper.xml文件中的nam
          espace和id,一定要对应,否则会报错。
                  */
return BaseDao.getSqlSession().selectOne("Mapper.selectById",Id);
} public static void main(String[] args) {
User user=new UserDaoImpl().selectById(1);
System.out.println(user); } }

八、运行实现类中的main方法(测试)

MyBatis原理简介和小试牛刀的更多相关文章

  1. MyBatis原理简介

    1.什么是 MyBatis ? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyB ...

  2. storm 原理简介及单机版安装指南——详细版【转】

    storm 原理简介及单机版安装指南 本文翻译自: https://github.com/nathanmarz/storm/wiki/Tutorial 原文链接自:http://www.open-op ...

  3. 《深入理解mybatis原理》 MyBatis事务管理机制

    MyBatis作为Java语言的数据库框架,对数据库的事务管理是其很重要的一个方面.本文将讲述MyBatis的事务管理的实现机制. 首先介绍MyBatis的事务Transaction的接口设计以及其不 ...

  4. 《深入理解mybatis原理》 Mybatis初始化机制具体解释

    对于不论什么框架而言.在使用前都要进行一系列的初始化,MyBatis也不例外. 本章将通过下面几点具体介绍MyBatis的初始化过程. 1.MyBatis的初始化做了什么 2. MyBatis基于XM ...

  5. 《深入理解mybatis原理》 MyBatis的架构设计以及实例分析

    作者博客:http://blog.csdn.net/u010349169/article/category/2309433 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简 ...

  6. Java进阶(二十四)Java List集合add与set方法原理简介

    Java List集合add与set方法原理简介 add方法 add方法用于向集合列表中添加对象. 语法1 用于在列表的尾部插入指定元素.如果List集合对象由于调用add方法而发生更改,则返回 tr ...

  7. kafka原理简介并且与RabbitMQ的选择

    kafka原理简介并且与RabbitMQ的选择 kafka原理简介,rabbitMQ介绍,大致说一下区别 Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和 ...

  8. InheritableThreadLocal类原理简介使用 父子线程传递数据详解 多线程中篇(十八)

      上一篇文章中对ThreadLocal进行了详尽的介绍,另外还有一个类: InheritableThreadLocal 他是ThreadLocal的子类,那么这个类又有什么作用呢?   测试代码 p ...

  9. Nginx 负载均衡原理简介与负载均衡配置详解

    Nginx负载均衡原理简介与负载均衡配置详解   by:授客  QQ:1033553122   测试环境 nginx-1.10.0 负载均衡原理 客户端向反向代理发送请求,接着反向代理根据某种负载机制 ...

随机推荐

  1. C# 循环语句 for

    循环:反复执行某段代码. 循环四要素:初始条件,循环条件,循环体,状态改变. for格式 for(初始条件;循环条件;状态改变) { 循环体 } break ——中断循环,跳出整个循环 continu ...

  2. mvc导出excel记录

    前言: 记录这篇使用记录,是为了方便以后学习查阅和让没有使用过的人了解一下,其中不足还请见谅.不是很全的文章,大神请绕行.在项目中我们或多或少的会遇到数据导出到excel表格以便线下查看或者记录一些需 ...

  3. ssh介绍

      一.SSH概念(百度) SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH ...

  4. C#实现接口IHttpModule完成统一的权限验证

    测试代码如下: using System; using System.Collections.Generic; using System.Text; using System.Collections; ...

  5. Maven远程仓库的各种配置

    1.远程仓库的配置 在平时的开发中,我们往往不会使用默认的中央仓库,默认的中央仓库访问的速度比较慢,访问的人或许很多,有时候也无法满足我们项目的需求,可能项目需要的某些构件中央仓库中是没有的,而在其他 ...

  6. 【代码笔记】Web-ionic-创建APP的架构

    一,创建app的时候,index.html的主要架构. <!DOCTYPE html> <html> <head> <meta charset="u ...

  7. loadrunner 脚本开发-定义全局变量

    脚本开发-定义全局变量 by:授客 QQ:1033553122 如果参数是全局的,在脚本中的任何一个Action中都可以使用,变量一般是局部的,如果跨Action调用会出现未声明的错误. 打开Scri ...

  8. Angular基础(三) TypeScript

    一.模仿Reddit a) 运行ng new –ng4angular-reddit创建应用,从随书代码中复制样式文件,新建组件app-root,代码为: 界面可以看到了: b) 对于界面输入的数据,获 ...

  9. Python创建空DataFrame及添加行数据

    # 创建空DataFrame df = pd.DataFrame(columns = ['YJML','EJML','SJML','WZLB','GGXHPZ','CGMS']) # 插入数据(忽略索 ...

  10. [20180423]flashback tablespace与snapshot standby.txt

    [20180423]flashback tablespace与snapshot standby.txt --//缺省建立表空间是打开flashback on,如果某个表空间flashback off, ...