本文共 3588 字,大约阅读时间需要 11 分钟。
在我看来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.jarcglib-2.2.2.jarcommons-logging-1.1.1.jarjavassist-3.17.1-GA.jarlog4j-1.2.17.jarlog4j-api-2.0-rc1.jarlog4j-core-2.0-rc1.jarmybatis-3.2.7.jarmysql-connector-java-5.1.7-bin.jarslf4j-api-1.7.5.jarslf4j-log4j12-1.7.5.jar其中mybatis-3.2.7.jarmysql-connector-java-5.1.7-bin.jar这两个是必须的缺一不可
二、写主配置文件:
三、建立实体类
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); } }
五、写映射文件
//namespace:命名空间 //parameterType:参数类型 //resultMap:返回值类型
六、写接口
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方法(测试)
转载地址:http://kflfo.baihongyu.com/