mybatis简介
来源:互联网 发布:geekbar 知乎 编辑:程序博客网 时间:2024/05/23 21:19
mybatis是一种持久层框架,也属于orm映射,前生是ibatis。相比于hibernate,hibernate为全自动化,配置文件书写之后不需要写SQL语句,但欠缺灵活,很多时候需要优化
mybatis为半自动化,需要自己写SQL语句,需要自己定义映射。增加了程序员的一些操作,但带来设计上的灵活,并且支持hibernate的一些特性,如延迟加载,缓存,映射等。
对数据库的兼容性比hibernate差。移植性不好。但可以编写灵活和高效的SQL语句。
mybatis组成:
核心对象:sqlSessionFactory SQLSession
配置文件:mybatis.ctg.xml 相当于hibernate的hibernate.cfg.xml
多个类配置文件:user.xml相当于hibernate的映射类文件
支持注解配置
allowMultiQueries=true表示允许一个语句块中添加多条SQL语句
mybatis所需JAR包
mybatis-3.1.1.jar mybatis核心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">
设置命名空间
命名空间的作用:
更好地分类SQL语句块,更好维护
防止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语句的书写)
<pre name="code" class="java">package com.lovo.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);}@Overridepublic 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
- MyBatis简介
- MyBatis简介
- Mybatis简介
- mybatis简介
- MyBatis简介
- Mybatis简介
- MyBatis简介
- Mybatis简介
- Mybatis简介
- MyBatis简介
- MyBatis简介
- Mybatis简介
- Mybatis简介
- mybatis简介
- mybatis简介
- mybatis简介
- mybatis简介
- Mybatis简介
- 0-1背包中每个物品重量和价值值都很小的情况
- java swing 中JFlieChoose 的FileFilter 的使用
- linux 文件权限
- M101P: MongoDB for Developers - Chapter 2: CRUD
- 引入多线程的代价
- mybatis简介
- Java 随机数
- bzoj 3631: [JLOI2014]松鼠的新家 树链剖分
- wamp中mysql错误信息显示乱码
- 开启MySQL远程访问权限 允许远程连接
- 机器学习(一)
- Tomcat体系架构
- Android(4)---Android 控件布局常用属性
- spring--profile和条件化bean