T O P

[资源分享]     MyBatis入门

  • By - 楼主

  • 2021-07-19 18:06:45
  •  

    1.创建maven工程
    创建mybatis的工程,工程信息:

    <groupId>com.itheima</groupId>
    <artifactId>day01_eesy_01mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    2.添加MyBatis3.4.5的坐标
    在pom.xml文件中添加坐标(此处可以省略过)

    <dependencies>
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.6</version>
    </dependency>
    <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.12</version>
    </dependency>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.10</version>
    </dependency>
    <dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>1.6.1</version>
    </dependency>
    <dependency>
    <groupId>jaxen</groupId>
    <artifactId>jaxen</artifactId>
    <version>1.1.6</version>
    </dependency>
    </dependencies>


    3.编写User实体类
    注意实现序列化接口。序列化简单的说就是在不同时间或不同平台的JVM之间共享实例对象。

    public class User implements Serializable {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;
    
    public Integer getId() {
    return id;
    }
    
    public void setId(Integer id) {
    this.id = id;
    }
    
    public String getUsername() {
    return username;
    }
    
    public void setUsername(String username) {
    this.username = username;
    }
    
    public Date getBirthday() {
    return birthday;
    }
    
    public void setBirthday(Date birthday) {
    this.birthday = birthday;
    }
    
    public String getSex() {
    return sex;
    }
    
    public void setSex(String sex) {
    this.sex = sex;
    }
    
    public String getAddress() {
    return address;
    }
    
    public void setAddress(String address) {
    this.address = address;
    }
    
    @Override
    public String toString() {
    return "User{" +
    "id=" + id +
    ", username='" + username + '\'' +
    ", birthday=" + birthday +
    ", sex='" + sex + '\'' +
    ", address='" + address + '\'' +
    '}';
    }
    }

    3.编写持久层IUserDao接口

    public interface IUserDao{
    //可以省略public,返回类型List,查询所有功能
    public List<USer> findAll();
    }

    4.编写持久层映射文件
    注意:映射配置文件的位置必须和dao接口的包结构相同

    <?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="com.itheima.dao.IUserDao">

    <!--配置查询所有,这些代码为配置映射信息,有了执行sql语句,就可以获取PreparedStatement对象
    有了PreparedStatement之后就可以进行参数的设置,之后就是返回结果集,遍历结果集。同上文
    JDBC
    -->

    <select id="findAll" resultType="com.itheima.domain.User">
    select * from user
    </select>
    </mapper>

    解释说明:

    # mapper:它是映射文件的根元素结点,注意是映射文件,他只有一个属性,那就是namespace

    * namespace:用于区分不同的mapper,全局唯一,通常写持久层接口的地址。

    # select:表示查询语句。

    * id属性:该命名空间下唯一标识符,注意它只是一个标识符,可以写别的东西。

    * resultType属性: 表示SQL语句返回值类型。即List<User>中的User类型。

    5.编写SqlMapConfig.xml配置文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuraion
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtdmybatis-3-config.dtd">
    <configuration>
    <!--配置环境-->
    <environments default="mysql">
    <environment id="mysql">
    <!--配置事务类型-->
    <transactionManager type="JDBC"></transactionManager>
    <!--配置数据源-->
    <dataSource type="POOLED">
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mybatisbd"/>
    <property name="username" value="root"/>
    <property name="password" value="200828"/> 
    </dataSource>
    <environment>
    <environments>
    <!--告知mybatis映射配置文件的位置-->
    <mappers>
    <!--基于XML的配置方式-->
    <mapper resource="com/itheima/dao/IUserDao.xml"><mapper/>
    <mappers>
    </configuration>


    解释说明:

    # configuration:配置文件的根元素结点。

    # environments:表示配置MyBatis的多套运行环境。将sql映射到多个不同得到数据库中,该元素节点下可以有多个environment子元素结点。可以呀开发环境和测试环境。但是必须指定其中一个为默认环境用default表示。

    # environment:表示MyBatis的一套配置环境,需要指定运行环境ID,事务管理,数据源配置等相关信息(transactionManager,dataSource)。

    # properties:该属性文件描述数据库连接的相关配置Driver,url,username,password.如果在<configuration>中引入了database.properties,该属性通过resource属性从外部指定的properties属性配置文件,value后面跟${},现在用yaml比较多

    # mappers:告诉MyBatis去哪里找SQL映射文件。

    # mapper:具体指定SQL映射文件的路径 resource:是通过XML来进行配置的,class:是通过注解来配置的.

    6.编写测试类

    public class MybatisTest{
    public static void main(String[] args) throws Exception{
    //此处用到了工厂模式,此后稍作讲解
    //1.读取配置文件
    InputStream in = Resource.getResourceAsStream("SqlMapConfig.xml");
    //2.创建SqlSessionFactory的构建者对象
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    //3.使用构建者创建SqlSessionFactory工厂
    SqlSessionFactory factory = builder.build(in);
    //4.使用工厂创建SqlSession对象
    SqlSession session = factory.openSession();
    //5.使用session创建IUserDao代理对象
    IUserDao userDao = session.getMapper(IUserDao.class);
    //6.使用代理对象查询方法,返回List
    List<User> users = userDao.findAll();
    for(User user : users){
    System.out.println(user);
    }
    //7.释放资源
    session.close();
    in.close();
    }
    }


    需要牢记这七个步骤很重要

    7.MyBatis的核心控制对象
    MyBatis的三个基本要素:核心接口和类,核心配置文件,SQL映射文件

    SqlSessionFactoryBuilder--->build()--->SqlSessionFactory--->openSession()--->SqlSession

    7.1SqlSessionFactory的构造者----SqlSessionFactoryBuilder
    作用:

    负责创建SqlSessionFactory,并且提供了多个build()方法

    特点:

    用过即丢,一旦创建了SqlSessionFactory对象,SqlSessionFactoryBuilder就不需要存在了,因此它的最佳使用范围就是存在于方法体内,也就是局部变量。

    7.2SqlSession的工厂---SqlSessionFactory
    作用:

    SqlSessionFactory就是创建SqlSession的工厂,有了它之后就可以通过.openSession()来创建SqlSession对象。

    生命周期和作用域:

    一旦创建,在整个应用运行过程中始终存在。,随着应用的声明周期一致存在。放在静态代码块中可进行优化

    7.3使用SqlSession进行数据的持久化操作
    作用:

    用于持久化操作对象,类似于jdbc的connection,它提供了面向数据库执行sql命令的所有方法,增删改查等,可以通过SqlSessson实例直接运行已经映射的SQL语句。

    作用域和生命周期:

    SqlSession对应一次数据库会话。最佳作用域是request作用域或者方法体作用域。

    使用方式:

    通过代理对象进行方法查询

    IUserDao userDao = session.getMapper(IUserDao.class);

    List<User> users = userDao.findAll();

    8.补充配置文件一些基本元素
    8.1typeAliases元素:
    作用是配置类型别名,通过于MyBatis的SQL映射文件相关联,减少冗余

    <typeAliases>
    <typeAlias alias="user" type="com.itheima.domain.Usr"/>
    </typeAliases>

    <!--此时resultType可以写成 User-->

     

    本帖子中包含资源

    您需要 登录 才可以下载,没有帐号?立即注册