Mybatis的原理及详细配置

5 篇文章 0 订阅
5 篇文章 0 订阅

一、MyBatis的概述:

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects。

简而言之,MyBatis是一个能将传统JDBC变得很方便和易于维护的框架。我们只需要提供SQL语句,而建立连接,创建Statement,处理JDBC异常等工作都可以交给MyBatis去做。

mybatis官方中文网站:https://mybatis.org/mybatis-3/zh/index.html

二、MyBatis环境搭建:

(1)导入jar包:

    <!-- 单元测试工具包-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!--导入MySql数据库的驱动包-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.39</version>
    </dependency>
    <!--导入mybatis依赖包-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.1</version>
    </dependency>

(2)创建mybatis配置文件(mybatis-config.xml):

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。

有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法

在resources目录下新建配置文件mybatis-config.xml:

<?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>
    <!--指定数据库的配置文件-->
    <properties resource="db.properties" />

    <environments default="development">
        <!--环境配置,即连接的数据库-->
        <environment id="development">
            <!--指定事务管理类型,type="jdbc"指直接简单使用了jdbc的提交和回滚设置-->
            <transactionManager type="JDBC"/>
            <!--datasource 指数据源的配置,POOLED是JDBC连接对象的数据源连接池的实现-->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--每个mapper.xml都需要在mybatis配置文件中进行配置-->
    <mappers>

    </mappers>
</configuration>

注意:标签中可以使用xml或者注解形式配置

(3)获的sqlSession实例:

因为SqlSession经常需要重复使用,所有我们可以去编写一个工具类来实现以后需要多次实现的内容:

新建一个utils包,并在utils包下创建MybatisUtils类

public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        //获取SqlSessionFactory工厂类
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }
    //通过SqlSessionFactory获取SqlSession实例
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }

}

通过上面的工具类即可获取SqlSession实例,剩下就是对sqlSession一系列操作。

三、MyBatis代码实现

SqlSession对数据库的操作既可以使用XML方式也可以使用注解的方式,MyBatis 最初配置信息是基于 XML ,映射语句(SQL)也是定义在 XML 中的。而到了 MyBatis 3提供了新的基于注解的配置。在此只实现注解方式(简便):

例如先编写一个实体类:

public class User {
    int stuid;
    String username;
    int classid;
    Classinfo c;
    //省略构造方法、get、set、toString方法
}

注意:我们可以不用手写实体类的构造方法、get、set、toString方法。可以导入lombok的jar包,使用注解形式注入(代替手写):

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.10</version>
</dependency>

最终的实体类:

@Data //实现setter()、getter()、ToString()、equals()和hashcode()
@NoArgsConstructor //实现无参构造器
@AllArgsConstructor //实现全参构造器
public class User {
    int stuid;
    String username;
    int classid;
    Classinfo c;
}

接口类:

@Repository
public interface IUserDAO {

    @Select("select * from student where stuid=#{id}")
    public Student findOne(@Param("id")int id);

    @Update("update student set username=#{username} where stuid=#{stuid}")
    public void updateStu(Student student);

    @Select("select * from student where classid=#{cid}")
    public List<Student> findStusByCid(@Param("cid")int cid);

    @Select("select * from student")
    @Results({
            @Result(column = "classid",property = "classid"),
            @Result(property = "c",column = "classid",one = @One(select = "com.dao.ClassinfoDao.findClass",fetchType = FetchType.LAZY))
    })
    public List<Student> findAllStu();
}

实现类:

@Repository
public class UserImpl implements IUserDAO {

    public Student findOne(int id) {
        return null;
    }

    public void updateStu(Student student) {

    }

    public List<Student> findStusByCid(int cid) {
        return null;
    }

    public List<Student> findAllStu() {
        return null;
    }
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

springboot大神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值