Mybatis的原理及详细配置

Mybatis的原理及详细配置,第1张

Mybatis的原理及详细配置
    • 一、MyBatis的概述:
    • 二、MyBatis环境搭建:
      • (1)导入jar包:
      • (2)创建mybatis配置文件(mybatis-config.xml):
      • (3)获的sqlSession实例:
    • 三、MyBatis代码实现

一、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>junitgroupId>
      <artifactId>junitartifactId>
      <version>4.11version>
      <scope>testscope>
    dependency>
    
    <dependency>
      <groupId>mysqlgroupId>
      <artifactId>mysql-connector-javaartifactId>
      <version>5.1.39version>
    dependency>
    
    <dependency>
      <groupId>org.mybatisgroupId>
      <artifactId>mybatisartifactId>
      <version>3.4.1version>
    dependency>

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

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

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

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


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">
            
            <transactionManager type="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>
    
    <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.projectlombokgroupId>
  <artifactId>lombokartifactId>
  <version>1.18.10version>
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;
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/795828.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存