mybatis和springmybatis整理

Mybatis

MyBatis 避免了几乎全部的 JDBC 代码和手动设置参数以及获取结果集。由于MyBatis 能够对配置和原生Map使用简单的 XML 或注解来对参数进行设置。java

这里先用一个小的例子来过一边mybatis的流程。mysql

基本必须的目录结构以下: spring

mybatisMapper.xml算是用来自定义SQL语句,这也是Mybatis的相比于相似于解耦的操做。

更多的映射语句在www.w3cschool.cn/mybatis/f4u…中可自行查询使用。sql

<?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="main.java.user">
    <select id="user" resultType="user">select * from user</select>
</mapper>
复制代码

在Mybatis.xml中配置Servlet映射和mapper数据库

<?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">
            <!--环境的配置,在这里选择了JDBC-->
            <transactionManager type="JDBC"/>
            <!--数据库链接池,配置-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/user?useSSL=false&amp;serverTimezone=UTC"/>
                <property name="username" value="username"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <!--配置映射的文件-->
    <mappers>
        <mapper resource="mapper/mybatisMapper.xml"/>
    </mappers>
</configuration>
复制代码

实体类的编写,以用户为例apache

import java.sql.Struct;
import java.util.HashMap;
import java.util.List;

public class user {

    private int uid;
    private int source;
    private List<user> list;

    public List<user> getList() {
        return list;
    }

    public void setSource(int source) {
        this.source = source;
    }

    public void setList(List<user> list) {
        this.list = list;
    }

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    @Override//在这里重写tostring不是必要的
    public String toString() {
        return "user{" +
                "uid=" + uid +
                ", source=" + source +
                '}';
    }
}

复制代码

测试类,这里用select语句查询表中已提早存放入的信息bash

import com.mysql.cj.Session;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestDome {
    @Test
    public void testDome1() throws IOException {
        // 初始化mybatis的配置环境
        String source="mybatis.xml";
        InputStream in= Resources.getResourceAsStream(source);
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
        //打开和数据库之间的会话
        SqlSession session=factory.openSession();
        List<user> re=session.selectList("user");
        //存放结果
        for(user user: re){
            System.out.println(user);
        }

       session.close();//关闭会话
    }
}

复制代码

Springmybatis

最关键的是采用了固有的类的org.mybatis.spring.support.SqlSessionDaoSupport的提供SqlSession,代码以下:session

public  class BaseDao extends SqlSessionDaoSupport {
    //使用该父类方法中的sqlSessionFactory
    @Autowired   //自动装配
    private SqlSessionFactory sqlSessionFactory;      
    @Autowired   
    //重写含参构造方法(没必要须)
    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory)    
    {        
        super.setSqlSessionFactory(sqlSessionFactory);    
    }    
     //执行insert   
    public int insert(String statement, Object parameter) {    
        return getSqlSession().insert(statement, parameter);  
    }    
    //执行更新
    public int update(String statement) {    
        return getSqlSession().update(statement);  
    }  
    //执行删除
    public int delete(String statement) {    
        return getSqlSession().delete(statement);  
    }    
    //获取到connection对象,方便以后用的其余操做
    public Connection getConnection() {    
        return getSqlSession().getConnection();  
    }
复制代码

其次是用依赖注入的方法来将数据库的连接的配置注入到类中(相关的配置信息是存放在datsource中的,也能够经过xml来配置或者经过 ANNOTION来实现),以下:mybatis

<property name="dataSource" ref="dataSource" />
<property name="configLocation"  value="classpath:sqlMapConfig.xml"/>
复制代码

二者的差异

1)SqlSessionFactory类在二者中都存在app

2)前者用SqlSessionFactoryBean生成SqlSessionFactory,后者则使用 SqlSessionFactoryBuilder

3)前者使用SqlSessionTemplate,后者使用SqlSession,实际上这二者差异不大,只是子类中的方法和父类中的方法的差异,也就是像不一样名字的对象中的方法,其实是一致的

相关文章
相关标签/搜索