[第一课]从实现原理上写一个Mybatis框架之Mbatis框架的搭建 更新中...

lianjin 6月前 75

首先我们创建一个Maven工程

目录结构如图所示

目录结构

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>mybatisDemo</groupId>
    <artifactId>sx.java.mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.0</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

</project>

在 resources 项目下面 创建 SqlConfig.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>
    <environments default="def">
        <environment id="def">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3366/mybatis_demo?characterEncoding=utf8&amp;useSSL=true"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="sx/java/mybatis/bean/User.xml"/>
    </mappers>
</configuration>

在 resources 项目下面 创建 log4j.properties 这里对 ConversionPattern 这个参数配置有疑问的小伙伴可以参考我写的这篇文章 ==> log4j的ConversionPattern参数的意义


log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%p %d{MM-dd HH:mm:ss} - %c -%r [%t]%x %L - %m%n
log4j.logger.java.sql.Statement = debug
log4j.logger.java.sql.PreparedStatement = debug
log4j.logger.java.sql.ResultSet =debug
log4j.logger.org.apache.ibatis.datasource.pooled.PooledDataSource = error
log4j.logger.org.apache.ibatis.logging.LogFactory = error
log4j.logger.org.apache.ibatis.transaction.jdbc.JdbcTransaction = error

然后在resources项目下面一层一层的创建 sx/java/mybatis/bean 这四个目录 并创建 User.xml


<?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="sx.java.mybatis.dao.UserDao">
    <select id="findAll" resultType="sx.java.mybatis.bean.User">
        select *
        from user;
    </select>
</mapper>

user表结构


-- auto-generated definition
CREATE TABLE user
(
  id     INT(32) AUTO_INCREMENT
    PRIMARY KEY,
  name   VARCHAR(50) NULL,
  passwd VARCHAR(50) NULL
)
  ENGINE = InnoDB;

创建 sx.java.mybatis.bean.User 类


package sx.java.mybatis.bean;

import java.io.Serializable;

public class User implements Serializable {
    private Integer id;
    private String name;
    private String passwd;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPasswd() {
        return passwd;
    }

    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", passwd='" + passwd + '\'' +
                '}';
    }
}

创建 sx.java.mybatis.dao.UserDao 接口


package sx.java.mybatis.dao;

import sx.java.mybatis.bean.User;

import java.util.List;

public interface UserDao {

    List<User> findAll();
}

创建 sx.java.mybatis.MybatisTest 测试类


package sx.java.mybatis;

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 sx.java.mybatis.bean.User;
import sx.java.mybatis.dao.UserDao;

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

public class MybatisTest {
    public static void main(String[] args) throws Exception {
//        1.读取配置文件
        InputStream in= Resources.getResourceAsStream("SqlConfig.xml");
//        2.创建 SqlSessionFactoryBuilder
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
//        3.创建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(in);
//        4.创建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
//        5.通过sqlSession获取 UserDao的代理对象
        UserDao userDao = sqlSession.getMapper(UserDao.class);
//        6.执行findAll方法
        List<User> all = userDao.findAll();
//        7.打印输出对象
        System.out.println(all);
//        8.关闭sqlSession
        sqlSession.close();
//        9.关闭inputStream
        in.close();
    }
}

以上 项目打包下载地址 链接:https://pan.baidu.com/s/1psivdE3tp9L51FeSgraYRA#i1pr 提取码:i1pr

通过以上的基础查询方法 我们了解到如下几点

  1. 需要提供一个 SqlConfig.xml 文件描述 数据库配置信息 以及 指定 mapper.xml 文件位置

  2. User.xml 中需要 使用 namespace 来告诉mybatis 我们dao的接口类在那儿

  3. User.xml 中 select 标签 需要指定 id 为 findAll 用以对应 UserDao.java 接口中的 findAll方法 并且使用 resultType指定 该方法返回值的泛型 也就是 List 中T 的类型

  4. 开始创建 SqlSessionFactoryBuilder 对象 并且把数据库配置传递进去

  5. 通过 sqlSessionFactoryBuilder.build(in) 获取 SqlSessionFactory 对象

  6. 通过 SqlSessionFactory 获取 sqlSession 对象

  7. 通过 sqlSession对象的 getMapper(T) 方法 获取UserDao 接口代理对象

  8. 执行接口代理对象的 方法执行查询

  9. 关闭sqlSession

  10. 关闭inputStream

下一篇文章中,我们就会根据以上总结的几点来 初步实现以上描述的功能

2333

传送门

第二课地址

最后于 6月前 被lianjin编辑 ,原因:
最新回复 (0)
    • Deep♂Dark♂Fantastic
      2
        立即登录 立即注册 
返回