Java第三十七天,Mybatis框架系列,Mybatis入门案例——注解配置方式

1.新建Maven项目

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.huhai</groupId>
    <artifactId>demo10</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--新增内容-->
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.0</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.0.7</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.5</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    <!--新增内容-->

</project>

3.在 src\main\resources 目录新建 SqlMapConfig.xml 和 log4j.properties 配置文件,内容分别如下:

<?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="mysql">  <!--可为任意值,但该值必须出现在下面的 environment 标签中-->
        <!--配置mysql环境-->
        <environment id="mysql">
            <!--事务类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置m数据源(连接池)-->
            <dataSource type="POOLED">
                <!--配置连接数据库的基本信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/> <!--数据库驱动-->
                <property name="url" value="jdbc:mysql://localhost:3306/student"/> <!--指明哪个数据库-->
                <property name="username" value="root"/>    <!--数据库用户名-->
                <property name="password" value="123456"/>  <!--数据库用户名密码-->
            </dataSource>
        </environment>
    </environments>

    <!--用class属性指明被注解的全限定类名-->
    <mappers>
        <mapper class="Dao.StuDao"/>
    </mappers>
</configuration>
# 全局日志配置
log4j.rootLogger=ERROR, stdout
# MyBatis 日志配置
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# 控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

4.创建数据库

create database student character set utf-8;
 
use student;
 
create table baseinfo (
        student_id int unsigned not null primary key,
        name       char(10) not null,
        sex        char(4) not null,
        birth      date    not null,
        politily   char(20) not null
);
 
 
insert into baseinfo values (201080701,"张三","男","1994-12-2","自动化1");
insert into baseinfo values (201080702,"李四","男","1989-10-8","自动化2");
insert into baseinfo values (201080703,"王五","男","1994-8-8","自动化2");
insert into baseinfo values (201080704,"路人1","女","1994-7-9","自动化2");
insert into baseinfo values (201080705,"路人2","男","1994-12-8","自动化2");
insert into baseinfo values (201080706,"路人3","女","1994-11-8","自动化2");
insert into baseinfo values (201080707,"路人4","男","1992-1-23","自动化2");

5.创建Student类如下,属性值需要与数据库中表的属性一一对应且相等

import java.util.Date;

public class Student {

    int student_id;
    String name;
    String sex;
    Date birth;
    String politily;

    public int getStudent_id() {
        return student_id;
    }

    public void setStudent_id(int student_id) {
        this.student_id = student_id;
    }

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public String getPolitily() {
        return politily;
    }

    public void setPolitily(String politily) {
        this.politily = politily;
    }

    @Override
    public String toString() {
        return "Student{" +
                "student_id=" + student_id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", birth=" + birth +
                ", politily='" + politily + '\'' +
                '}';
    }
}

6.创建Student类的持久层接口StuDao.java,并加上Select注解

package Dao;

import Main.Student;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface StuDao {

    //加上Select注解
    @Select("select * from baseinfo")
    List<Student> findAll();
}

7.新建实现类Realize

package Main;
import Dao.StuDao;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class Realize {
    public static void main(String[] args) throws IOException {
        //读取配置文件
        //因为读取配置文件的时候,绝对路径和相对路径都会出现很多问题,因此我们一般采用以下两种方法读取
        //①使用类加载器(只能读取类路径的配置文件)
        //②使用ServletContext对象的getRealPath()读取当前项目部署的绝对路径
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");

        //创建工厂
        //创建工厂时,mybatis使用了构建者模式,即找包工队盖房子,而不是自己亲自处理一系列问题
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);

        //使用工厂模式生产session对象
        //工厂模式降低了类之间的依赖关系(解耦)
        SqlSession session = factory.openSession();

        //使用session创建Dao接口代理对象(代理模式),注意这里我们并没有对Dao接口进行实现
        //代理模式可以在不修改源码的基础上对已有模式进行增强
        StuDao stuDao = session.getMapper(StuDao.class);

        List<Student> students = stuDao.findAll();
        for(Student stu : students){
            System.out.println(stu);
        }

        //释放资源
        session.close();
        in.close();
    }
}

8.整体项目的整体框架如下:

9.程序运行结果如下:

posted @ 2020-06-12 16:05  IT蓝月  阅读(103)  评论(0编辑  收藏  举报
Live2D