java 实现Mybatis入门

来源:互联网 发布:大数据股票龙头股 编辑:程序博客网 时间:2024/05/23 20:02

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用作测试用。如图所示
    image

配置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;@Beforepublic 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 版本查询

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


  1. 释放资源

当我们操作完了之后,需要释放掉我们创建的资源。
@Afterpublic 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();    }}