MyBatis原理简介和小试牛刀
在我看来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原理简介和小试牛刀的更多相关文章
- MyBatis原理简介
1.什么是 MyBatis ? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyB ...
- storm 原理简介及单机版安装指南——详细版【转】
storm 原理简介及单机版安装指南 本文翻译自: https://github.com/nathanmarz/storm/wiki/Tutorial 原文链接自:http://www.open-op ...
- 《深入理解mybatis原理》 MyBatis事务管理机制
MyBatis作为Java语言的数据库框架,对数据库的事务管理是其很重要的一个方面.本文将讲述MyBatis的事务管理的实现机制. 首先介绍MyBatis的事务Transaction的接口设计以及其不 ...
- 《深入理解mybatis原理》 Mybatis初始化机制具体解释
对于不论什么框架而言.在使用前都要进行一系列的初始化,MyBatis也不例外. 本章将通过下面几点具体介绍MyBatis的初始化过程. 1.MyBatis的初始化做了什么 2. MyBatis基于XM ...
- 《深入理解mybatis原理》 MyBatis的架构设计以及实例分析
作者博客:http://blog.csdn.net/u010349169/article/category/2309433 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简 ...
- Java进阶(二十四)Java List集合add与set方法原理简介
Java List集合add与set方法原理简介 add方法 add方法用于向集合列表中添加对象. 语法1 用于在列表的尾部插入指定元素.如果List集合对象由于调用add方法而发生更改,则返回 tr ...
- kafka原理简介并且与RabbitMQ的选择
kafka原理简介并且与RabbitMQ的选择 kafka原理简介,rabbitMQ介绍,大致说一下区别 Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和 ...
- InheritableThreadLocal类原理简介使用 父子线程传递数据详解 多线程中篇(十八)
上一篇文章中对ThreadLocal进行了详尽的介绍,另外还有一个类: InheritableThreadLocal 他是ThreadLocal的子类,那么这个类又有什么作用呢? 测试代码 p ...
- Nginx 负载均衡原理简介与负载均衡配置详解
Nginx负载均衡原理简介与负载均衡配置详解 by:授客 QQ:1033553122 测试环境 nginx-1.10.0 负载均衡原理 客户端向反向代理发送请求,接着反向代理根据某种负载机制 ...
随机推荐
- Java学习笔记之——常用快捷键(eclipse)
* Ctrl+C 复制 * Ctrl+V 粘贴 * Ctrl+A 全选 * Ctrl+S 保存 * Ctrl+Z 撤销 * Ctrl+Y 还原 * Ctrl+X 剪切 * Ctrl+F 查找 * ...
- 单页面应用(SPA)
此篇我们来瞅一瞅SPA,啥是SPA啊,实际上一点也不神秘,就是单页应用,可能有的同学又会问了,啥是单页面应用,别着急,我们慢慢来看 首先我们先来了解一下单页应用出现背景 背景: 在早期的 Web 应用 ...
- Python从入门到精通
最近研究了一下Python,名不虚传,确实挺精彩. 学习一门新的语言,我认为从入门到精通的做法是:下SDK.装IDE.练教程.结合工作应用.不断踩坑进阶.梳理总结 1.下SDK(2.7.15) 下载地 ...
- off by null 实战
前言 off by null 是一个比较有意思的技术 下面通过 hctf2018 的 heapstrom_zero 实战一波. 相关文件(exp, 题目)位于 https://gitee.com/ha ...
- Android Studio 在项目中引用第三方jar包
在Android Studio项目中引用第三方jar包的方法: 步骤: 1.在build.gradle文件中添加如下代码: 备注:要添加在Android作用域下 sourceSets { main { ...
- 微信小程序开发--路由切换,页面重定向
这段时间开发了一个微信小程序,虽然小程序的导航API 官方文档写得很详细,但是在具体开发过程中还是会遇到很多不明白,或者一时转不过弯的地方. 1.页面切换传参,参数读取 1.1 wx.navigat ...
- 聊聊HTTP gzip压缩与常见的Android网络框架
版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/5835990.html 进入主题之前,我们先来看一下客户端与服 ...
- JavaWeb:Listener和Filter
本文内容: Listener Filter 首发日期:2018-07-15 Listener 监听器Listener负责监听事件的发生.我们能在事件发生后执行一些自定义的操作,这就是监听器的意义. 监 ...
- 故障小记录:yum 安装报错File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:
发生原因: 由于yum是基于python的,之前安装我python3,当我修改了python命令的指向到python3之后就会发生这样的问题. 解决办法: 由于我当初想到可能以后还需要python2, ...
- [20180317]12c TABLE ACCESS BY INDEX ROWID BATCHED3.txt
[20180317]12c TABLE ACCESS BY INDEX ROWID BATCHED3.txt --//简单探究12c TABLE ACCESS BY INDEX ROWID BATCH ...