美文网首页
【Java中级】31.0 SSM之Mybatis框架(二)——注

【Java中级】31.0 SSM之Mybatis框架(二)——注

作者: bobokaka | 来源:发表于2020-03-10 10:22 被阅读0次
1.0 开始之前

SSM之Mybatis框架(一) 文章中其实讲得不明不白,看上去mybtis似乎也不像专注于sql语句。
但是当结合其他框架使用的时,mybatis的工作就只剩下sql了。

2.0 简单使用注解。
2.1 创建一个maven项目。
image.png
2.2 配置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>com.edp</groupId>
    <artifactId>mybatis_eesy</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.4</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.18</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
        <scope>test</scope>
    </dependency>
</dependencies>
</project>
2.3 配置mybatis

SqlMapConfig.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>
    <!-- 和spring整合后 environments配置将废除 -->

    <!--  development是开发环境 -->
    <environments default="development">
        <!-- 可以设置多个environment -->
        <environment id="development">
            <!-- 使用jdbc事务管理 -->
            <transactionManager type="JDBC"/>
            <!-- 数据库连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url"
                          value="jdbc:mysql://localhost:3306/eesy?useSSL=false&amp;serverTimezone=UTC"/>

                <property name="username" value="root"/>
                <property name="password" value="bywwcnll"/>
            </dataSource>
        </environment>
    </environments>

    <!--    加载映射文件 -->
    <!--    如果是注解来配置的话,此处应该使用class属性指定备注解的dao全限定类名。 -->
    <mappers>
        <!--    resource -->
        <!--        <mapper resource="com/edp/dao/IuserDao.xml"/>-->
        <mapper class="com.edp.dao.IuserDao"/>
    </mappers>
</configuration>
2.4 日志文件

log4j.properties

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
2.5 表现层、业务层、持久层接口

实体类User.java

package com.edp.damain;

import java.io.Serializable;
import java.util.Date;

/**
 * @author EdPeng
 * @Title: 实体类
 * @Package
 * @Description:
 * @date 2020/3/9下午 7:40
 */
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 + "]";
    }
}

持久层接口IuserDao.java,使用Mybatis注解:

package com.edp.dao;

import com.edp.damain.User;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * @author EdPeng
 * @Title: 用户持久层接口
 * @Package
 * @Description:
 * @date 2020/3/9下午 8:20
 */
public interface IuserDao {
    /**
     * @Description: 查询所有操作
     * @author EdPeng
     * @date 2020/3/9 下午 9:25
     */
    @Select("select * from user")
    List<User> findAll();
}
2.6 测试类
package com.edp.test;

import com.edp.damain.User;
import com.edp.dao.IuserDao;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

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

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
/**
 * @author EdPeng
 * @date 2020/3/9下午 10:29
 */
public class MybatisTest {
    public static void main(String[] args)  throws IOException {
        // 创建SqlSessionFactoryBuilder类
        SqlSessionFactoryBuilder ssfBuilder = new SqlSessionFactoryBuilder();
        // Mybatis的工具类Resources
        // 创建核心配置文件的输入流
        InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 通过输入流创建SqlSessionFactory对象
        SqlSessionFactory ssFactory = ssfBuilder.build(resourceAsStream);
        // SqlSession对象:内含访问数据库的所有API
        SqlSession sqlSession = ssFactory.openSession();
        // 使用SqlSession创造dao接口代理对象。
        IuserDao iuserDao = sqlSession.getMapper(IuserDao.class);
        //使用代理对象执行方法。
        List<User> userList = iuserDao.findAll();
        for (User user :
                userList) {
            System.out.println(user);
        }
        // 释放资源
        sqlSession.close();
    }
}

执行:


image.png
  • mybatis基于注解的入门案例:
    把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句
  • 同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。
  • 明确:
  • 我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式。
    不管使用XML还是注解配置。
    但是Mybatis它是支持写dao实现类的。
3.0 Mybatis中使用的设计模式

比如如果建一个真实的工厂,首先,我们要选址,然后还要准备建工厂的材料等等,最终工厂还不一定能建好。
这时候,我们只需要找一个包工队,只需要告诉他需求,然后给钱,事就办成了。而我们测试代码中的SqlSessionFactoryBuilder就是一个这样的包工队。负责帮我们创建工厂,建厂所有的繁琐复杂的事情全部由他来完成,我们只需要给钱就好。

image.png
这么多的方法加入代码有什么好处?——为了重载。比如我们的build()方法和openSession()方法有很多的重载方法,可以进行灵活的封装。
4.0 执行查询的内部逻辑分析
image.png
image.png

END

相关文章

网友评论

      本文标题:【Java中级】31.0 SSM之Mybatis框架(二)——注

      本文链接:https://www.haomeiwen.com/subject/voomdhtx.html