01.Mybatis-创建项目
1. 创建一个Maven工程
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>
4. 使用模版创建UserMapper.xml
5. 修改命名空间,防止报错
- 首先创建一个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 {
}
- 修改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; 所有的内容了。