Mybatis框架的使用(eclipse)
一、mybatis框架使用的基本组成及使用过程
二、基于xml配置实现映射器Mapper测试
三、基于注解配置实现映射器Mapper测试
一、mybatis框架使用的基本组成及使用过程
1、MybatisConfig.xml:全局配置文件,承载全局配置信息(驱动driver,数据库访问路径url,数据库用户名user,数据库密码password,映射器的路径)
2、映射器Mapper:可以通过xml来配置,也可以通过注解来实现,在全局配置文件来配置使用哪一种形式。
映射器的作用:承载sql语句,提供接口来调用sql语句
映射器的特点:可以通过唯一的方式访问每一个sql语句
–在xml配置中通过namespace和id来确定调用哪一条sql
–注解中通过接口中的方法来确定调用哪一条sql(方法的唯一性)
3、映射类:字段跟数据库字段相同,该类对象与数据库中数据一一对应。
使用过程:
(1)在eclipse中新建maven工程,新建为jar工程即可
(2)在pom.xml导入相应jar依赖包
<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>djn.com</groupId>
<artifactId>Maybatis1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- mysql的驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<!-- mybatis的jar包依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
</dependencies>
</project>
保存后会在maven依赖看到导入的jar依赖
(2)在resource目录上新建全局配置文件MybatisConfig.xml
<?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>
<!-- 配置属性 -->
<properties> <!-- 也可以另外新建文件设置属性 resource="文件路径" -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/gamemanager"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</properties>
<!-- 配置环境,可以配置多个环境 default表示默认的环境-->
<environments default="test">
<environment id="test">
<!-- 事务管理器,JDBC类型的事务管理器 -->
<transactionManager type="JDBC" />
<!-- 数据源,池类型的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" /> <!-- ${dirver}相当于变量 在 properties 中读取值-->
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 声明承载sql语句的映射文件 -->
<mappers>
<!-- mapper resource="Mapper.xml" /--> <!-- xml配置映射器的方式 -->
<mapper class="Mybatis.UserMapper"></mapper> <!-- 注解配置映射器的方式 -->
</mappers>
</configuration>
(4)建立映射类(与数据库的表名相对应)
package Mybatis;
public class User {
private int user_id;
private String username;
private String passwords;
private int age;
private String sex;
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPasswords() {
return passwords;
}
public void setPasswords(String passwords) {
this.passwords = passwords;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
// TODO Auto-generated method stub
String string = "user_id="+user_id+" username="+username
+" passwords="+passwords+" age="+age+" sex="+sex;
return string;
}
}
(5)生成数据库表
CREATE DATABASE IF NOT EXISTS `gamemanager` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `gamemanager`;
-- MySQL dump 10.13 Distrib 8.0.17, for Win64 (x86_64)
--
-- Host: localhost Database: gamemanager
-- ------------------------------------------------------
-- Server version 5.6.45-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `user`
--
DROP TABLE IF EXISTS `user`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `user` (
`user_id` smallint(6) NOT NULL,
`username` varchar(20) DEFAULT NULL,
`passwords` varchar(20) DEFAULT NULL,
`age` tinyint(4) DEFAULT NULL,
`sex` char(2) DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `user`
--
LOCK TABLES `user` WRITE;
/*!40000 ALTER TABLE `user` DISABLE KEYS */;
INSERT INTO `user` VALUES (1,'user1','123',12,'nv'),(2,'user2','123',45,'nv'),(3,'user3','123',32,'nv');
/*!40000 ALTER TABLE `user` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2020-03-27 10:15:37
(6)建立映射Mapper.xml
–xml的方式:在resource中新建MyMapper.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:命名空间,随便写,一般保证命名空间唯一 -->
<mapper namespace="MyMapper">
<!-- statement,内容:sql语句。id:唯一标识,随便写,在同一个命名空间下保持唯一
resultType用来指定将结果映射到哪个类(包名+类名)
sql语句中的#{id}由测试类通过命名空间和id来定位到哪一条sql,并将值传入
-->
<select id="selectUser" resultType="Mybatis.User">
select * from user where user_id = #{id}
</select>
</mapper>
–注解方式:新建UserMapper接口
package Mybatis;
import org.apache.ibatis.annotations.Select;
public interface UserMapper {
/*
* 映射器的作用:承载sql语句,提供接口来调用sql语句
* 映射器的特点:可以通过唯一的方式访问每一个sql语句
* --在xml配置中通过namespace和id来确定调用哪一条sql
* --注解中通过接口中的方法来确定调用哪一条sql
* 使用注解修饰接口实现映射器:#{param1}代表相应的方法的第一个参数
*/
@Select("select * from user where user_id=#{param1}")
public User selectOne(int user_id);
}
结构图如下:
二、基于xml配置实现映射器Mapper测试
package Mybatis;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisDemo {
public static void main(String[] args) {
/*测试mybatis
* 1、加载全局配置文件
* 2、构建会话工厂
* 3、执行sql
*/
// 指定全局配置文件
String resource = "MybatisConfig.xml";
// 读取配置文件
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
System.out.println("读取全局配置文件失败!!");
}
//创建会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 第一个参数:指定statement,规则:命名空间+“.”+statementId
// 第二个参数:指定传入sql的参数:这里是用户id
// User user = sqlSession.selectOne("MyMapper.selectUser", 1);
// System.out.println(user);
sqlSession.close();
}
}
三、基于注解配置实现映射器Mapper测试
package Mybatis;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisDemo {
public static void main(String[] args) {
/*测试mybatis
* 1、加载全局配置文件
* 2、构建会话工厂
* 3、执行sql
*/
// 指定全局配置文件
String resource = "MybatisConfig.xml";
// 读取配置文件
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
System.out.println("读取全局配置文件失败!!");
}
//创建会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 第一个参数:指定statement,规则:命名空间+“.”+statementId
// 第二个参数:指定传入sql的参数:这里是用户id
// User user = sqlSession.selectOne("MyMapper.selectUser", 1);
// System.out.println(user);
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
System.out.println(userMapper.selectOne(1));
sqlSession.close();
}
}
注意在全局配置文件的文件头和xml配置Mapper的文件头是不一样的:
MybatisConfig.xml:
Mapper.xml:
因为他们的根标签是不一样的,如果不是这样的配置会报错: