MyBatis-1-学习记录环境搭建和入门案例

五分钟学Mybatis|一个案例了解Mybatis与环境搭建(超干货!)
MyBatis教程
MyBatis中文文档
mybatis学习笔记一(环境搭建和入门案例)
mybatis学习笔记二(crud)
mybatis学习笔记三(mybatis参数深入)
mybatis学习笔记四(多表查询)
mybatis学习笔记四(延迟加载和缓存)
在这里插入图片描述

MyBatis 本是apache 的一个开源项目 iBatis, 2010 年这个项目由apache software foundation 迁移到了google code,并且改名为 MyBatis 。2013 年 11 月迁移到Github。

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

1 MyBatis简介

1.1 什么是 MyBatis?

  • MyBatis是一款优秀的持久层框架。
  • 它支持自定义SQL、存储过程以及高级映射。
  • MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。
  • MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和Java。
  • POJO(Plain Old Java Objects,普通老式Java对象)为数据库中的记录。

1.2 为什么需要mybatis?

  • 方便。
  • 传统的JDBC代码太复杂了。简化、框架、自动化。
  • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件,易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
  • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
  • 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象与数据库的orm字段关系映射。
  • 提供对象关系映射标签,支持对象关系组建维护。
  • 提供xml标签,支持编写动态sql。

1.3 MyBatis解决的主要问题

减轻使用JDBC的复杂性,不用编写重复的创建Connetion, Statement,不用编写关闭资源代码。直接使用java对象,表示结果数据,让开发者专注SQL的处理,其他分心的工作由MyBatis代劳。

MyBatis可以完成:
(1)注册数据库的驱动,如Class.forName(“com.mysql.jdbc.Driver”)。
(2)创建JDBC中必须使用的Connection,Statement,ResultSet对象。
(3)从xml中获取sql,并执行sql语句,把ResultSet结果转换java对象。

List<Student> list = new ArrayLsit<>();
ResultSet rs = state.executeQuery(“select * from student”);
while(rs.next){
	Student student = new Student();
	student.setName(rs.getString(“name”));
	student.setAge(rs.getInt(“age”));
	list.add(student);
}

(4)关闭资源
ResultSet.close() , Statement.close() , Conenection.close()。

1.4 简单实现流程分析

在这里插入图片描述

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

(1)Resources类
Resources类,顾名思义就是资源,用于读取资源文件。Resources有很多方法通过加载并解析资源文件,返回不同类型的IO流对象。

//1、读取配置文件
InputStream is = null;
is = Resources.getResourceAsStream("SqlMapConfig.xml");

(2)SqlSessionFactoryBuilder类
SqlSessionFactory的创建,需要使用 SqlSessionFactoryBuilder对象的build()方法。由于SqlSessionFactoryBuilder对象在创建完工厂对象后,就完成了其历史使命,即可被销毁。所以,一般会将该SqlSessionFactoryBuilder对象创建为一个方法内的局部对象,方法结束,对象销毁。

//2、创建SqlSessionFactory工厂,目的是获取SqlSession
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);

(3)SqlSessionFactory接口
SqlSessionFactory接口对象是一个重量级对象(系统开销大的对象),是线程安全的,所以一个应用只需要一个该对象即可。创建SqlSession需要使用SqlSessionFactory接口的的openSession()方法。

  • openSession(true):创建一个有自动提交功能的SqlSession。
  • openSession(false):创建一个非自动提交功能的SqlSession,需手动提交。
  • openSession():同openSession(false)。
//3、使用工厂生成Sqlsession对象,用于执行sql语句
SqlSession session = null;
session = factory.openSession();

(4)SqlSession接口
SqlSession接口对象用于执行持久化操作。一个SqlSession对应着一次数据库会话,一次会话以SqlSession对象的创建开始,以SqlSession对象的关闭结束。

SqlSession接口对象是线程不安全的,所以每次数据库会话结束前,需要马上调用其close()方法,将其关闭。再次需要会话,再次创建。 SqlSession在方法内部创建,使用完毕后关闭。

//4、使用Sqlsession对象创建dao接口的代理对象
StudentDao studentDao = session.getMapper(StudentDao.class);
//5、使用代理对象执行方法
List<Student> studentList = studentDao.selectStudents();
//5、循环输出查询结果
for (Student student : studentList){
    System.out.println(student);
}
//6、释放资源
session.close();
is.close();

2 搭建MyBatis 开发环境

2.1 创建mysql数据库和表

数据库名ssm;表名student。

create database ssm;
CREATE TABLE `student` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在这里插入图片描述

2.2 创建maven工程

  • 若勾选上Create from archetype,则表示使用模板创建。
  • 通过Intellij IDEA新建maven工程时,勾选create from archetype不管选哪个archetype,创建后加载都很慢。
Name:learnMyBatis
Location:D:\\learnMyBatis

2.3 依赖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>org.example</groupId>
    <artifactId>learnMyBatis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!--导入mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.3</version>
        </dependency>
        <!--数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--导入单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
    
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory><!--所在的目录-->
                <includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>

    </build>
</project>

2.4 编写Student实体类

创建包com.mylearn.domain, 包中创建Student类。
右键src/main/java->New/package。

package com.mylearn.domain;
/**
 * Description 实体类
 */
public class Student {
    //属性名和列名一样
    private Integer id;
    private String name;
    private String email;
    private Integer age;
    //set,get,toString
    
    public void setName(String name){
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
}

2.5 编写Dao接口StudentDao

创建包com.mylearn.dao, 包中创建StudentDao接口。
右键src/main/java->New/package。

package com.mylearn.dao;
import com.mylearn.domain.Student;
import java.util.List;

/**
 * Description:Dao接口
 */
public interface StudentDao {
    //查询所有数据
    List<Student> selectStudents();
}

2.6 编写Dao接口映射文件StudentDao.xml

  • 在dao包中创建文件StudentDao.xml。
  • 要StudentDao.xml文件名称和接口StudentDao一样,区分大小写。
<?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">

<!--对应的dao接口-->
<!--namespace:必须有值,自定义的唯一字符串
推荐使用:Dao接口的全限定名称
-->
<mapper namespace="com.mylearn.dao.StudentDao">
    <!--<select>:查询语句,标签中必须是select语句。
    id:sql语句的自定义名称,推荐使用Dao接口中的方法名称。
    resultType:查询语句的返回结果数据类型,使用全限定类名。
    -->
    <select id="selectStudents" resultType="com.mylearn.domain.Student">
        <!--要执行的sql语句-->
        select * from Student
    </select>
</mapper>

2.7 创建主配置文件SqlMapConfig.xml

  • 项目src/main下创建resources目录。

  • XML 配置文件中包含了对MyBatis系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。

<?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">
        <!--配置mysql环境-->
        <environment id="mysql">
            <!--配置事务的类型-->
            <transactionManager type="JDBC"/>
            <!--配置事务的类型-->
            <dataSource type="POOLED">
                <!--配置连接数据库的4个基本信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:mybatis?useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="bigdata"/>
            </dataSource>
        </environment>
    </environments>
    <!--指定映射文件的位置 必须是dao接口全限定类名-->
    <mappers>
        <mapper resource="com/mylearn/dao/StudentDao.xml"/>
    </mappers>
</configuration>

2.8 创建测试类MyBatisTest

  • src/test/java/com/mylearn/创建MyBatisTest.java文件。
package com.mylearn;

import com.mylearn.dao.StudentDao;
import com.mylearn.domain.Student;
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 org.junit.Test;

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

public class MyBatisTest {
    @Test
    public void test1(){
        InputStream is = null;
        SqlSession session = null;
        try {
            //1、读取配置文件
            is = Resources.getResourceAsStream("SqlMapConfig.xml");
            //2、创建SqlSessionFactory工厂,目的是获取SqlSession
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
            //3、使用工厂生成Sqlsession对象,用于执行sql语句
            session = factory.openSession();
            //4、使用Sqlsession对象创建dao接口的代理对象
            StudentDao studentDao = session.getMapper(StudentDao.class);
            //5、使用代理对象执行方法
            List<Student> studentList = studentDao.selectStudents();
            //5、循环输出查询结果
            for (Student student : studentList){
                System.out.println(student);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        //6、释放资源
        try {
            session.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
本火锅店点餐系统采用Java语言和Vue技术,框架采用SSM,搭配Mysql数据库,运行在Idea里,采用小程序模式。本火锅店点餐系统提供管理员、用户两种角色的服务。总的功能包括菜品的查询、菜品的购买、餐桌预定和订单管理。本系统可以帮助管理员更新菜品信息和管理订单信息,帮助用户实现在线的点餐方式,并可以实现餐桌预定。本系统采用成熟技术开发可以完成点餐管理的相关工作。 本系统的功能围绕用户、管理员两种权限设计。根据不同权限的不同需求设计出更符合用户要求的功能。本系统中管理员主要负责审核管理用户,发布分享新的菜品,审核用户的订餐信息和餐桌预定信息等,用户可以对需要的菜品进行购买、预定餐桌等。用户可以管理个人资料、查询菜品、在线点餐和预定餐桌、管理订单等,用户的个人资料是由管理员添加用户资料时产生,用户的订单内容由用户在购买菜品时产生,用户预定信息由用户在预定餐桌操作时产生。 本系统的功能设计为管理员、用户两部分。管理员为菜品管理、菜品分类管理、用户管理、订单管理等,用户的功能为查询菜品,在线点餐、预定餐桌、管理个人信息等。 管理员负责用户信息的删除和管理,用户的姓名和手机号都可以由管理员在此功能里看到。管理员可以对菜品的信息进行管理、审核。本功能可以实现菜品的定时更新和审核管理。本功能包括查询餐桌,也可以发布新的餐桌信息。管理员可以查询已预定的餐桌,并进行审核。管理员可以管理公告和系统的轮播图,可以安排活动。管理员可以对个人的资料进行修改和管理,管理员还可以在本功能里修改密码。管理员可以查询用户的订单,并完成菜品的安排。 当用户登录进系统后可以修改自己的资料,可以使自己信息的保持正确性。还可以修改密码。用户可以浏览所有的菜品,可以查看详细的菜品内容,也可以进行菜品的点餐。在本功能里用户可以进行点餐。用户可以浏览没有预定出去的餐桌,选择合适的餐桌可以进行预定。用户可以管理购物车里的菜品。用户可以管理自己的订单,在订单管理界面里也可以进行查询操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮冰燃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值