在我看来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. HDFS的副本存放策略(全)

    HDFS的副本存放策略   HDFS作为Hadoop中的一个分布式文件系统,而且是专门为它的MapReduce设计,所以HDFS除了必须满足自己作为分布式文件系统的高可靠性外,还必须为MapReduc ...

  2. Vue 系列之 基础入门

    背景叙述 渐进式 JavaScript 框架 易用:已经会了 HTML.CSS.JavaScript?即刻阅读指南开始构建应用! 灵活:不断繁荣的生态系统,可以在一个库和一套完整框架之间自如伸缩. 高 ...

  3. jsp使用servlet实现文件上传

    1.在index.jsp中写入以下代码 <form method="post" action="demo3" enctype="multipar ...

  4. canvas-star7.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. CSS属性disabled和readonly的区别是什么

    在博客园中看到这样一篇文章,关于disabled和readonly的区别,以前还真的没有注意它们的区别,还是有必要知道它们的区别的,所以转载了. 这两个属性有类似之处,但是区别也是巨大的,之所以说类似 ...

  6. .Net Core(三)MVC Core

    MVC Core的改动感觉挺大的,需要的功能大多从Nuget安装,还内置了IOC,支持SelfHost方式运行等等. 一.项目结构的变化创建的新MVC项目的结构发生了变化,比如:静态文件需要统一放置到 ...

  7. Session Cookies随笔

    1.对于Session而言 它是用来保存在服务端的信息,可以用来做登录验证,在后台保存有用信息. 一个浏览器访问一个网站,就是建立一个连接,连接信息是独立的,就是在该建立的连接内,保存到Session ...

  8. 【第三篇】SAP ABAP7.5x新语法之程序结构&SubScreen

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文地址:SAP ABAP7.5x系列之程序结构& ...

  9. SMBus与I2C的差别

    The I²C bus and the SMBus are popular 2-wire buses that areessentially compatible with each other. - ...

  10. linux 下正则匹配时间命名格式的文件夹

    用正则表达式匹配时间格式命名的文件夹 ls mypath | grep -E "[0-9]{4}-[0-9]{1,2}" mypath为需要查询的目录 查询出来的文件夹格式为:例 ...