目录
第二步:在Maven工程中pom.xml文件中导入坐标(即我们需要的依赖)
第三步:编写Mybatis的核心配置文件--->替换连接信息,解决硬编码问题
第四步:Resource目录下创建一个映射文件,我们取名为UserMapper.xml,内容一会写
第五步:定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放在同一个目录下
现在我们要思考一个问题,Mapper接口在java代码块中,映射文件在Resource目录中,该怎么让他们在同一个目录下?
第六步:编写SQL映射文件,namespace属性的值设置为Mapper接口的路径
properties标签:加载外部的资源配置文件,properties标签在第一位
我们要
使用Mapper代理方式完成Mybatis入门
第一步:在mysql中创建一张user1表,并添加数据。
create table user1
(
id int primary key auto_increment,
name varchar(20) not null,
sex char default '男',
address varchar(20)
);
insert into user1 (id, name, sex, address) VALUE (null,'小红','女','天津'),(null,'阿发','男','北京'),(null,'卡恩','男','海南'),
(null,'阿福','女','山东');
select id, name, sex, address from user1;
在java代码中编写一个user1类与该表相对应
public class user1 {
private Integer id;
private String name;
private String sex;
private String address;
public user1() {
}
public user1(Integer id, String name, String sex, String address) {
this.id = id;
this.name = name;
this.sex = sex;
this.address = address;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
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 "user1{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
第二步:在Maven工程中pom.xml文件中导入坐标(即我们需要的依赖)
这是完整的pom.xml文件,我们导入了Junit,Mysql,Mybatis依赖
<?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.hhh</groupId>
<artifactId>maven_day1</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- mysql依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--junit依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
</dependencies>
</project>
第三步:编写Mybatis的核心配置文件--->替换连接信息,解决硬编码问题
在Maven工程中的Resource目录下创建一个名为mybatis-config.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>
<environments default="development">
<!--设置默认的环境development,也可以配置多环境开发-->
<environment id="development">
<transactionManager type="JDBC"/>
<!--使用mybatis自带的连接池POOLED-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mysql_day2"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--配置映射文件关联的参数-->
<mappers>
//相关参数一会写
</mappers>
</configuration>
第四步:Resource目录下创建一个映射文件,我们取名为UserMapper.xml,内容一会写
第五步:定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放在同一个目录下
Mapper接口创建在java代码块中
//dao层
public interface UserMapper {
/**
* 功能:查询所有用户数据
* @return
*/
public List<user1> findAllUser();
}
现在我们要思考一个问题,Mapper接口在java代码块中,映射文件在Resource目录中,该怎么让他们在同一个目录下?
我们要在Resource目录中创建一个目录:com/hhh/dao (使用"."的话,不是同一个目录,要使用"/")
然后把映射文件拖到Resource目录下的com.hhh.dao包
验证,查看target目录:
可以发现他们已经处于同一个目录
第六步:编写SQL映射文件,namespace属性的值设置为Mapper接口的路径
id是Mapper接口里的方法名字,resultType就是封装的类型
在文本中写select语句
<?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.hhh.dao.UserMapper">
<!--编写sql查询语句-->
<select id="findAllUser" resultType="com.hhh.pojo.user1">/*返回的结果封装到user1对象*/
select id, name, sex, address from user1
</select>
</mapper>
第七步:我们可以编写代码了
我们在java代码块中编写代码
要使用的API
SqlSessionFactory:工厂类,就是为了创建SqlSession对象
SqlSession:和数据库交互的类(执行SQL语句)
大致步骤
1.加载核心配置文件,获取SqlSessionFactory对象
2.获取SqlSession对象
3.通过SqlSession的getMapper()方法获取Mapper接口的代理对象
4.调用代理对象的方法完成sql的执行
5.释放资源
//代理对象会对UserMapper的方法进行增强,通过与它同名的xml文件(SQL映射文件)获取内容(SQL语句),因为Mapper接口已经和xml文件处于同一个目录,且xml文件的namespace属性值是Mapper接口的路径(关联)
public class MybatisTest {
@Test
public void testFindAllUser() throws IOException {
//核心配置文件路径
String resource = "mybatis-config.xml";//核心配置文件
//基于配置文件路径,创建字节输入流对象
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory工厂类对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//利用工厂类,创建一个SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//利用SqlSession,创建一个代理类对象(注意,不是SqlSession被代理,是UserMapper类对象被代理)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//使用代理对象,调用方法查询用户数据
List<user1> allUser = userMapper.findAllUser();
//代理对象会对UserMapper的方法进行增强,通过与它同名的xml文件(SQL映射文件)获取内容(SQL语句)
for (user1 u : allUser) {
System.out.println(u);
}
}
}
运行之前我们还要在核心配置文件中加载映射文件
<?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">
<!--设置默认的环境development,也可以配置多环境开发-->
<environment id="development">
<transactionManager type="JDBC"/>
<!--使用mybatis自带的连接池POOLED-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mysql_day2"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--配置映射文件关联的参数-->
<mappers>
<!--扫描mapper-->
<mapper resource="com/hhh/dao/UserMapper.xml"/>
</mappers>
</configuration>
结果:
核心配置文件的补充
配置文件中各个标签的顺序
<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>
properties标签:加载外部的资源配置文件,properties标签在第一位
属性:resource 指定要引入的外部配置文件路径
在核心配置文件中,通过:${key}方式引入外部配置文件的数据,key是键值对的键
我们重新在Resource目录下创建一个jdbc.properties文件,用来保存连接数据库的四大参数
这是jdbc.properties文件的内容
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mysql_day2
jdbc.username=root
jdbc.password=123456
所以我们在核心配置文件中引入该文件
<?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="jdbc.properties">
</properties>
<environments default="development">
<!--设置默认的环境development,也可以配置多环境开发-->
<environment id="development">
<transactionManager type="JDBC"/>
<!--使用mybatis自带的连接池POOLED-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/> //通过${key}访问
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--配置映射文件关联的参数-->
<mappers>
<!--扫描mapper-->
<mapper resource="com/hhh/dao/UserMapper.xml"/>
</mappers>
</configuration>
settings标签
防止数据库中有的字段名带有下划线,我们可以在settings标签中开启驼峰映射
<?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="jdbc.properties">
</properties>
<!--开启驼峰映射:把数据表中名字带有下划线的字段名,变成驼峰命名格式,例如:user_name=>username或userName-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<environments default="development">
<!--设置默认的环境development,也可以配置多环境开发-->
<environment id="development">
<transactionManager type="JDBC"/>
<!--使用mybatis自带的连接池POOLED-->
<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-->
<mapper resource="com/hhh/dao/UserMapper.xml"/>
</mappers>
</configuration>
typeAliases标签:起别名
子标签:package
属性:name:指定扫描的包
<typeAliases>
<!-- <typeAlias type="com.hhh.pojo.user1" alias="user1"></typeAlias>-->
<!--如果pojo包下有很多类,哪么要写很多行,我们换另一种方法-->
<!--扫描指定的包,把包下的所有类,都起了别名。别名格式:全部小写或者和类名一致,就是把前面的包名去掉-->
<package name="com.hhh.pojo"/>
</typeAliases>
这样一来,在映射文件中,resultType的值就可以从com.hhh.pojo.user1改成user1了
<?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">
<!--映射文件-->
<!--利用username把当前映射文件与Mapper接口关联-->
<mapper namespace="com.hhh.dao.UserMapper">
<!--编写sql查询语句-->
<select id="findAllUser" resultType="user1">/*返回的结果封装到user1对象*/
select id, name, sex, address from user1
</select>
</mapper>
mappers标签:提供了关联加载映射文件的配置功能;
使用方式:
1.先加载xml映射文件,再通过映射文件取关联Mapper接口
<mapper resource="UserMapper.xml"/> 从resource下加载映射文件
说明:如果项目基于xml的开发模式,建议使用方式1
2.加载接口,再通过接口关联映射文件
条件:1.接口名和映射文件名保持一致 2.路径保持一致
批量加载class:<package name="接口在的包路径">
说明:如果基于注解开发的话,使用方式2
<!--配置映射文件关联的参数-->
<mappers>
<!--扫描mapper-->
<!--<mapper resource="com/hhh/dao/UserMapper.xml"/>-->
<!--指定要扫描的所有Mapper接口的包路径-->
<package name="com.hhh.dao"/>
</mappers>