01.Mybatis-初体验

127 阅读3分钟

01.Mybatis-创建项目

1. 创建一个Maven工程

image.png

image.png

2. 导相关依赖

建议使用maven仓库寻找:mvnrepository.com/

这里加入依赖如下:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.28</version>
</dependency>
<!--   lombok     -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.16</version>
    <scope>provided</scope>
</dependency>

3. 创建一个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="#[[$namespace$]]#">
</mapper>

image.png

image.png

4. 使用模版创建UserMapper.xml

image.png

image.png

5. 修改命名空间,防止报错

  1. 首先创建一个UserMapper接口
package com.lzh.mybatis01.mapper;

/**
 * @Author:kaiyang.cui
 * @Package:com.lzh.mybatis01.mapper
 * @Project:mybatis01
 * @name:UserMapper
 * @Date:2023/3/30 上午12:51
 * @Filename:UserMapper
 * @Description:UserMapper
 * @Version:1.0
 */
public interface UserMapper {
}
  1. 修改UserMapper.xml文件的namespace 如下
<?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.lzh.mybatis01.mapper.UserMapper">
</mapper>

namespace的作用:我们项目有很多的xxxMapper.xml文件,每个xml文件有很多增删改查的方法,为了避免方法的冲突,所以在每个xxxMapper.xml中定义了一个namespace属性,用来唯一的标记。namespace一般写完整包名 + 接口名

6. 在数据库中导入表,用于测试使用

/*
 Navicat MySQL Data Transfer

 Source Server         : 阿里云华北root
 Source Server Type    : MySQL
 Source Server Version : 80024
 Source Host           : 39.97.253.89:3306
 Source Schema         : song_mybatis

 Target Server Type    : MySQL
 Target Server Version : 80024
 File Encoding         : 65001

 Date: 30/03/2023 01:00:08
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- ----------------------------
-- Records of user
-- ----------------------------
BEGIN;
INSERT INTO `user` VALUES (1, 'lzh', 'www.lzh.com');
INSERT INTO `user` VALUES (3, 'kaiyang', 'www.cuikaiyang.com');
INSERT INTO `user` VALUES (4, '张三', '深圳');
INSERT INTO `user` VALUES (5, '李四', '广州');
INSERT INTO `user` VALUES (6, '王五', '北京');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;


7. 编写UserMapper.xml文件

id 一般写xxxMapper.xml 中方法的名称。

resultType 是返回的数据的数据类型。我们要获取所有的用户信息,就要返回User实体类com.lzh.mybatis01.model.User

定义sql语句:

select * from user;

我们这条sql语句返回的是一个集合。而我们resultType参数里面是一个对象,这里并没有错误,只要存集合里面的对象就可以了,我们在resultType参数里并不需要写集合的本身。如果你的数据表中只有一条记录,resultType="com.lzh.mybatis01.model.User"就会返回一个User对象;如果数据表中有多条记录,就会返回User对象集合,这里会自动进行判断。

完整的UserMapper.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.lzh.mybatis01.mapper.UserMapper">
    <select id="getUser" resultType="com.lzh.mybatis01.model.User" >
        select id,username,address from user;
    </select>
</mapper>

值得注意的是,我们这里的sql语句不要写成以下这种形式,查询效率会变慢,需要什么字段写什么字段,即使是要查询全部字段,也要逐一写出所有字段,这是一个规范。

select * from user;

8. 编写Mybatis的配置文件

在实际的开发中,myabtis 的配置文件并不常见。这里仅仅是要介绍Mybatis的基础,所以不得已这么写。当我们将Mybatis与Spring进行整合的时候,就会由Sring去管理这一套东西。就不需要自己配置了。

<?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="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://39.97.253.89/song_mybatis?serverTimezone=Asia/Shanghai"/>
                <property name="username" value="root"/>
                <property name="password" value="你的密码"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/lzh/mybatis01/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

9.新建主类用于输出

package com.lzh.mybatis01;

import com.lzh.mybatis01.model.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;

/**
 * @Author:kaiyang.cui
 * @Package:com.lzh.mybatis01
 * @Project:mybatis01
 * @name:Main
 * @Date:2023/3/30 下午1:22
 * @Filename:Main
 * @Description:填写功能描述
 * @Version:1.0
 */
public class Main {
    public static void main(String[] args) throws IOException {
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
        SqlSession sqlSession = factory.openSession();
        User user = (User)sqlSession.selectOne("com.lzh.mybatis01.mapper.getUser", 3);
        System.out.println(user);
        sqlSession.close();
    }
}

此时会遇到mybatis的坑,这个坑和Maven有关,在pom.xml 文件中加入如下:

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
</build>

重新编译:mvn compile

10. 运行测试主类

Result:
user = User(id=1, username=lzh, address=www.lzh.com)
user = User(id=3, username=kaiyang, address=www.cuikaiyang.com)
user = User(id=4, username=张三, address=深圳)
user = User(id=5, username=李四, address=广州)
user = User(id=6, username=王五, address=北京)

这样我们的使用mybatis的简单实用,查询出sql语句select id,username,address from user; 所有的内容了。