java 实现Mybatis入门

Mybatis+java入门

  • Mybatisjava入门
          • 导语
          • 工具
          • 搭建项目
          • 配置Mybatis

导语

Mybatis是一个普遍应用的持久层框架,它封装了底层jdbc操作的复杂性,并提供了易用的api ,使我们能够吧java对象持久化到数据库中。这是我用java实现mybatis的例子。

工具:

maven intellij idea
spring boot

搭建项目
  1. 首先我我们用spring boot搭建一个maven项目。怎么搭建参考我的另外一篇文章
  2. 要用mybatis需要3个包

          -mybatis的api包

            org.mybatis            mybatis                 3.4.5        

     datasource包,就是数据源包,这里采用的dbcp数据源


    org.apache.commons
    commons-dbcp2
    2.1.1

     -mysql驱动包。


            mysql            
     mysql-connector-java

  1. 创建测试类

    ok,把这个3个包都倒入进去,那么就可以撸代码了。我们在工程下的test文件夹下面的java文件下建立一个测试包com.example.mybati文件夹。建立一个类MybatisTest.java用作测试用。如图所示

配置Mybatis

1.定义数据源

数据源datasource 是链接数据库的工具,
里面包含了链接数据库的账号 密码等。在数据源中又一个连接池每当你操作数据库的时候,
都是从这个池中拿到一个链接。上面我们提到了dbcp2包,他是datacorce的一个具体的实现。数据源有很多的实现。比如说 阿里的druid,dbcp2,dbcp,cp30等,各自有各自的优点,选择你需要的一个就可以了。这里我们用dbcp2作为数据源的实现类。在我们链接数据库的时候,基本属性需要数据库地址,用户名,密码,还有数据库
驱动包。代码如下

 public DataSource dataSource(){
        //实例化 dbcp2数据源
        BasicDataSource dataSource = new BasicDataSource();
        //设置数据库链接地址
        dataSource.setUrl("jdbc:mysql:// 你的数据库地址/你的数据库名称");
        dataSource.setUsername("你的账号");
        dataSource.setPassword("你的密码");
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        return dataSource;
    }
  1. 创建SqlSessionFactory 工厂类。
    SqlSessionFactory这个接口看它的后缀就知道这是一个工厂类Factory,sqlsession的创建由sqlSessionFactory来管理。刚
    才提到了sqlSessionFactory是一个接口,具体怎么创建的
    sqlSession,是有sqlSessionFactory的具体实现类来实现的。至于为什么设计?直接new SqlSession()不就好了?具体请
    看工厂方法类。在mybatis中默认的sqlSessionFactory实现类是DefaultSqlSessionFactory ,要实例化一个DefaultSqlSessionFactory 需要一个 Configuration的参数,那么接着看看看实例化一个Configuration需要
    什么?需要一个Environment参数。接着看实例化Environment参数需要什么?我们看到需要 一个string 类型的id,TransactionFactory 事物工厂类,DataSource 数据源。那么我们按照上面所说的实例化
    化一个 DefaultSqlSessionFactory 类。
private SqlSessionFactory sqlSessionFactory;
@Before
public void init() {
    TransactionFactory transactionFactory = new JdbcTransactionFactory();
    Environment environment = new Environment("development", transactionFactory, dataSource());
    Configuration configuration = new Configuration(environment);
    configuration.addMapper(OrderMapper.class);
    sqlSessionFactory = new DefaultSqlSessionFactory(configuration);
}

这里@Before 注解在类运行前执行的方法。 这里datasource()就是第一步中我们得到的 数据源。这里还有一个
OrderMapper.class 这个我们先这样子写,后面我们会讲到,现在我们声明了一个sqlSessionFactory工厂

  1. 获得SqlSession
    SqlSession是mybatis定义的,用来操作数据库的类,也可以理解为操作数据库的连接。下面我们要获取这个连接,来操作数
    据库。
SqlSession sqlSession = sqlSessionFactory.openSession();
  1. 编写sql语句
    我们从sqlSessionFatory中获取一个连接。
    加入我们有这么个需求,查询Order表中的其中一条记录。我们的sql语句是 select * from t_order where order_id =1
    mybatis中定义sql语句的方式有2种,一种是 放在xml种,另外一种是注解的方式放在接口中。我们这次采用的是注解的方式
    我们需要定义一个接口类,创建一个接口类型的java文件。OrderMapper ,
public interface OrderMapper  {
 @Select("SELECT * from t_order where  t_order.order_id = #{id} ")
Order selectById(int id);
}

ok,上面的代码中,我们在接口中定义了一个方法,在方法中用 @Select() 包含了一条sql语句。@Select注解代表这是一个查
询,()中的内容就是查询的语句。也就是我们实际写的sql, #{id}在查询的时候会动态的替换成 Order selectById(int
id); 中的id字段。
这个类也就是我们第2步骤,configuration.addMapper(OrderMapper.class);这段代码中的OrderMapper类。

  1. 运行sql语句

mybatis是一个持久层框架,他用对象的方式封装的sql的查询。所以我们只需要调用 Order selectById(int id);
这个方法就可以实现查询sql了。那么要调用这个方法,必须要获取这个类,我们怎么获得OrderMapper这个类呢?
在第2步中我们 configuration.addMapper(OrderMapper.class);。意思是我们把 OrderMapper这个类放到了
sqlSession中,既然我们放进去了,当然就能取出来。
//java 版本查询

@Test
public void demo() {
    //1 获取sqlSession
    SqlSession sqlSession = sqlSessionFactory.openSession();
    //2获取查询类
    OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
    //3执行查询类的方法
    Order order =  orderMapper.selectById(11);
}


  1. 释放资源

当我们操作完了之后,需要释放掉我们创建的资源。
@After
public void end() {
    sqlSession.close();
}

7 完整代码

package com.example.mybatis;

import com.example.mybatis.Mapper.OrderMapper;
import com.example.mybatis.entity.Order;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.defaults.DefaultSqlSessionFactory;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import javax.sql.DataSource;

/**
 * Created with IntelliJ IDEA.
 * User: yf-wenhao
 * Date: 17/11/23
 * Time: 下午3:10
 */
public class MybatisTest {

    private SqlSession sqlSession;

    public DataSource dataSource(){
        //实例化 dbcp2数据源
        BasicDataSource dataSource = new BasicDataSource();
        //设置数据库链接地址
        dataSource.setUrl("jdbc:mysql:// 你的数据库地址/你的数据库名称");
        dataSource.setUsername("你的账号");
        dataSource.setPassword("你的密码");
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        return dataSource;
    }

    //1 获取sqlSessionFactory
    private SqlSessionFactory sqlSessionFactory;
    @Before
    public void init() {
        TransactionFactory transactionFactory = new JdbcTransactionFactory();
        Environment environment = new Environment("development", transactionFactory, dataSource());
        Configuration configuration = new Configuration(environment);
        configuration.addMapper(OrderMapper.class);
        sqlSessionFactory = new DefaultSqlSessionFactory(configuration);
    }


    //java 版本查询
    @Test
    public void demo() {
        //1 获取sqlSession
        sqlSession = sqlSessionFactory.openSession();
        //2获取查询类
        OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
        //3执行查询类的方法
        Order order =  orderMapper.selectById(11);
    }


    @After
    public void end() {
        sqlSession.close();
    }

}

你可能感兴趣的:(java,mybatis)