数据库 element Markdown编辑器 vim deployment primefaces binding hash怎么下载 vue使用bootstrap excel带格式复制粘贴 ln函数图像 kubernetes架构 python打开文件 java8特性 java删除数组中的元素 java入门教程 java表达式 获取当前时间java nginx安装教程 tar文件怎么打开 千元以下最好的手机 crazytalk 51脚本 teraterm 摩尔斯电码翻译器在线 iframe跨域 原创检测工具 xflow c4d挤压怎么用 js代码混淆工具 js刷新当前页 qq飞车刷车 脚本语言 平原门下客三千 appdata是什么文件夹 wps苹果电脑版 太阳代理ip gif动画制作工具 vue响应式原理 无人机数据处理软件
当前位置: 首页 > 学习教程  > 编程语言

SSM框架之Mybatis学习笔记day01

2020/7/24 9:52:49 文章标签:

Mybatis学习笔记day01

目录

1. Mybatis 的概述
2. Mybatis 的环境搭建
3. Mybatis 的入门案例

1. Mybatis 的概述

  1. Mybatis是一个使用java编写的持久层框架,它封装了JDBC,使开发者只需更多的关注sql语句,而无需再进行注册驱动、获取连接、获取预处理对象等繁琐操作。简而言之,使用这个框架可以简化我们对数据库的操作,提升我们开发的效率;
  2. 采用了ORM(Object Rational Mapping)思想,即对象关系映射,把数据库和实体类及其属性对应起来,这样我们就可以直接操作实体类来操作数据库。

2. Mybatis 的环境搭建

创建maven项目,导入mybatis、数据库、测试类junit等相关坐标(在pom.xml)文件里
注意:由于我的mysql版本较高,所以导入的mysql坐标是8.0.16,所以后面的数据库相关配置会有所不同。

<?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.itheima</groupId>
    <artifactId>day01_eesy_01mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>

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

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

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
        </dependency>
    </dependencies>

</project>


创建数据库及一张user表

-- 创建数据库
CREATE DATABASE db_mybatis;
-- 创建数据表
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `birthday` datetime default NULL COMMENT '生日',
  `sex` char(1) default NULL COMMENT '性别',
  `address` varchar(256) default NULL COMMENT '地址',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 添加记录
insert  into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');


创建实体类,此时应保证属性名称与数据库对应一致

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

/**
 * @author yukaifan
 * @ClassName User
 * @date 2020/1/14 15:50
 */
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 + '\'' +
                '}';
    }
}


建立实体类的持久层(dao或mapper),并写一个查询所有用户的方法


import com.itheima.domain.User;

import java.util.List;

public interface IUserdao {

    public List<User> findAll();
}

编写mybatis主配置文件(mybatisConfig.xml)和jdbc主要信息文件jdbc.properties,并用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>
<!--    引入jdbc配置文件-->
    <properties resource="jdbc.properties"></properties>
    <environments default="mysql">
        <environment id="mysql">

<!--            配置事务类型-->
            <transactionManager type="JDBC"></transactionManager>

<!--            注入数据源-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

<!--    指定映射文件-->
    <mappers>
<!--        <mapper resource="com/itheima/dao/IUserdao.xml"></mapper>-->
        <mapper class="com.itheima.dao.IUserdao"></mapper>
    </mappers>
</configuration>

建立jdbc.proprerties配置文件
注意:由于引入数据库坐标版本较高,所以驱动配置mysql后面要加cj,url后面要加?serverTimezone=UTC。用户名和密码正常写就好了

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/db_mybatis?serverTimezone=UTC
jdbc.username=root
jdbc.password=root


创建IuserDao对应的配置文件(IUserDao.xml),按照一定规范,这里xml配置文件的目录结构需要与对应的接口一致,IUserDao.java是com.itheima.dao,于是我们需要在resource目录下分级创建com.itheima.dao包,然后创建IUserDao.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="com.itheima.dao.IUserdao">
    <!--配置查询所有-->
    <select id="findAll" resultType="com.itheima.domain.User">
      select * from user;
    </select>
</mapper>

注意:映射配置文件的 mapper 标签 namespace 属性的取值必须是 dao 接口的全限定类名,映射配置文件的操作配置,id 属性的取值必须是 dao 接口的方法名

此时的项目目录结构如下:
在这里插入图片描述

3. Mybatis 的入门案例

编写测试类,测试方法,打印返回结果

import com.itheima.dao.IUserdao;
import com.itheima.domain.User;
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 MybatisTest {
    public static void main(String[] args) throws IOException {
        //1.读取配置文件
        InputStream in= Resources.getResourceAsStream("mybatisConfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
        SqlSessionFactory factory=builder.build(in);
        //3.使用工厂生成SqlSession对象
        SqlSession session=factory.openSession();
        //4.使用SqlSession创建Doa接口的代理对象
        IUserdao dao=session.getMapper(IUserdao.class);
        //5.使用代理对象执行方法
        List<User> userList=dao.findAll();

        for (User user:userList)
            System.out.println(user);

        //6.关闭ziyuan
        session.close();
        in.close();
    }

}

以上mybatis的入门案例就成功了,这里是用配置文件的方式完成的,还可以用注解的方式完成,使用注解,就不需要IUserDao.xml文件了,可以将此文件直接删除,但是主配置文件仍然需要,此时需要在主配置文件做如下更改:
在这里插入图片描述

以及在IUserDao接口里添加sql语句如下图:
在这里插入图片描述
此时再运行测试程序,程序能正常运行,注解的方式也成功了。在此案例中,注解要比配置文件的方式更加简洁。


本文链接: http://www.dtmao.cc/news_show_50156.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?