zoukankan      html  css  js  c++  java
  • 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方法(测试)

  • 相关阅读:
    Python匿名函数详解
    python开发 -- 经常浏览的网站
    Python -- 变量指向
    我的Python开发之路---微信网页授权(扫码登陆)
    信息收集篇:玩转信息收集(一)
    TodoList:适合初学者的vue+node小项目
    节流和防抖的实现
    javascript的this问题
    bind、call、apply的区别与实现
    杜教筛
  • 原文地址:https://www.cnblogs.com/youcong/p/7854321.html
Copyright © 2011-2022 走看看