mybatis基础

什么是 MyBatis ?
 MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
mybatis特点:
 1、mybatis是一种持久层框架,也属于orm映射,前生是ibatis。相比于hibernate,hibernate为全自动化,配置文件书写之后不需要写SQL语句,但欠缺灵活,很多时候需要优化
 2、mybatis为半自动化,需要自己写SQL语句,需要自己定义映射。增加了程序员的一些操作,但带来设计上的灵活,并且支持hibernate的一些特性,如延迟加载,缓存,映射等。
 3、对数据库的兼容性比hibernate差。移植性不好。但可以编写灵活和高效的SQL语句。
mybatis组成:
 核心对象:sqlSessionFactory SQLSession
 配置文件:mybatis.ctg.xml 相当于hibernate的hibernate.cfg.xml
 多个类配置文件:user.xml相当于hibernate的映射类文件
 支持注解配置
 allowMultiQueries=true表示允许一个语句块中添加多条SQL语句
mybatis所需JAR包:
 mybatis核心jar包:mybatis-3.1.1.jar  
 mysql驱动包:mysql-connector-java-5.1.7-bin.jar
执行添加操作
//读取文件
Reader reader = null;
  try {
reader = Resources.getResourceAsReader("mybatis.cfg.xml");
   } catch (IOException e1) {
e1.printStackTrace();
}
//创建会话工厂
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);
//创建会话
SqlSession session = ssf.openSession();
//执行添加操作,add为引用类配置文件中的id
session.insert("add",bean);
session.commit();//提交事务
session.close();//关闭连接
mybatis.xml命名空间
在orm文件根目录下加入
<mapper namespace="user">
设置命名空间
命名空间的作用:
 1、更好地分类SQL语句块,更好维护
 2、防止SQL语句块重名
在设置了命名空间后,那么在相应的程序调用中,方可以使用 “命名空间 . 语句块名”进行调用相应的sql语句。
删除
<delete id="del" parameterType="int">
 <!—将参数int的内容填充占位符,占位符的名称任意à
 delete from t_dog where id=#{ss}
 </delete>
session.delete("del",id);
修改
<update id="update" parameterType="man">
 update t_man set userName=#{userName},phone=#{phone} where id=#{id}
</update>
session.update("update",bean);
mybatis参数同样支持Map方式
修改
<update id="update">
 update t_user set u_userName=#{userName} where u_id=#{id}
  </update>
Map m = new HashMap();
m.put("id", 48);
m.put("userName", "周泰");

session.update("update",m);

mybatis的代理模式:(目的是简化sql语句的书写)
package com.zjx.util;
import java.io.IOException;
import java.io.Reader;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
//mybatis  SQL语句的代理模式
public class DaoProxy implements InvocationHandler{
<span style="white-space:pre">	</span>//目标对象
	private Object targetObj;
	//会话工厂
	private static SqlSessionFactory factory;
	
	static{
		try {
<span style="white-space:pre">			</span>//读取配置文件
			Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
<span style="white-space:pre">			</span>//创建会话工厂		
factory = new SqlSessionFactoryBuilder().build(reader);
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
<span style="white-space:pre">	</span>//得到目标对象
	public DaoProxy(Object targetObj) {
		this.targetObj = targetObj;
	}
	
	public Object getProxy(){
		return Proxy.newProxyInstance(
				targetObj.getClass().getClassLoader(), 
				targetObj.getClass().getInterfaces(), 
				this);
	}

	
	@Override
	public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable {
<span style="white-space:pre">		</span>//创建会话
		SqlSession session = factory.openSession();

<span style="white-space:pre">		</span>//得到目标对象session属性对象
		Field field = targetObj.getClass().getDeclaredField("session");
		//去掉访问修饰符的影响
		field.setAccessible(true);
		
		//给session属性赋值
		field.set(targetObj, session);
		try {
			//执行目标对象的目标方法
			Object returnObj = arg1.invoke(targetObj, arg2);
			
			//提交事物
			session.commit();

			return returnObj;
		} catch (Exception e) {
			session.rollback();
		}finally{
<span style="white-space:pre">			</span>//关闭事物
			session.close();
		}
		
		return null;
	}

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值