准备数据源
# 删除mybatis_demo数据库
drop database if exists mybatis_demo;
# 创建mybatis_demo数据库
create database mybatis_demo;
# 使用mybatis_demo数据库
use mybatis_demo;
# 创建account表
create table user (
id int auto_increment primary key,
username varchar(20),
age int,
score int
);
# 新增数据
insert into user (id, username, age, score) values
(1,'peter', 18, 100), (2,'pedro', 24, 200),
(3,'jerry', 28, 500), (4,'mike', 12, 300),
(5,'tom', 27, 1000);
使用注解方式配置Mapper
导入mysql驱动包和mybatis依赖
<!--MySQL数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<!--mybatis核心包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
添加mybatis配置文件和db.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>
<properties resource="db.properties"/>
<environments default="mysql">
<!-- 1.2配置id 为mysql的数据库环境 -->
<environment id="mysql">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC"/>
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${driverClassName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.mapper"/>
</mappers>
</configuration>
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis_demo?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
username=root
password=hs20010224
创建mapper接口
public interface UserMapper {
@Select("SELECT username FROM user WHERE id = #{id}")
String selectUsernameById(Integer id);
}
测试类
@SuppressWarnings({"Duplicates"})
public class UserTest {
public static void main(String[] args) throws IOException {
// 读取配置文件
InputStream configuration = Resources.getResourceAsStream("mybatis-config.xml");
// 得到 SqlSessionFactory 核心类
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
// 开始一个 sql 会话
SqlSession session = sqlSessionFactory.openSession();
// 得到 mapper
UserMapper mapper = session.getMapper(UserMapper.class);
// 调用注解的SQL
String username = mapper.selectUsernameById(1);
System.out.println("username: " + username);
// 关闭会话
session.close();
}
}
测试结果
使用XML方式配置Mapper
代码实现
在UserMapper接口中添加一个方法selectUserAgeById
Integer selectUserAgeById(Integer id);
在resources文件夹下创建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">
<!-- namespace表示命名空间 -->
<mapper namespace="com.mapper.UserMapper">
<select id="selectUserAgeById" resultType="java.lang.Integer">
SELECT age FROM user WHERE id = #{id}
</select>
</mapper>
注意:UserMapper.xml必须和UserMapper接口放在同一包下,而且如果有多个包,则包必须一个一个创建。
select标签中id对应接口中的方法名,resultType对应接口中方法的返回值类型
测试
在测试类中添加下列方法
Integer age = mapper.selectUserAgeById(1);
System.out.println("age: " + age);
测试结果
resultType
代码实现
创建User实体类
@ToString
@Data
public class User {
private Integer id;
private String username;
private Integer age;
private Integer score;
}
在UserMapper接口中添加selectUserById方法
User selectUserById(Integer id);
在UserMapper.xml添加一个select标签
<select id="selectUserById" parameterType="java.lang.Integer" resultType="com.entity.User" >
select * from user where id =#{id}
</select>
在测试类中添加测试代码
User user = mapper.selectUserById(1);
System.out.println(user);
测试结果
resultMap
代码实现
在UserMapper.xml添加下列代码
<resultMap id="userMap" type="com.entity.User">
<id property="id" column="id"/>
<result property="username" column="username"/>
<result property="age" column="age"/>
<result property="score" column="score"/>
</resultMap>
resultMap 标签的id表示resultMap 的唯一标识,type标识返回值类型;子标签中id标签表示主键,其他属性用result 标签表示,其中的property表示实体类的属性名称,column表示数据表的列名。
将selectUserById标签的返回值类型改为上面的resultMap
resultMap="userMap"
测试结果
注意
MyBatis自动会帮助我们映射数据库数据和Java对象,但是如果要映射的对象比较复杂时就需要我们手动去映射。
resultMap标签通常在实体类的属性名称和数据表的列名不一致时使用