购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.4 MyBatis入门程序

1.3节完成了MyBatis环境的搭建,下面将在MyBatis环境下实现一个入门程序来演示MyBatis框架的使用(如果不做特别说明,后续编码都将在1.3节搭建的MyBatis环境下进行),该程序要求实现根据id查询用户信息的操作,具体实现步骤如下。

1.数据准备

在mybatis数据库中创建users表,并在users表中插入两条数据,具体SQL语句如下:

use mybatis;
create table users(
    uid int primary key auto_increment,
    uname varchar(20) not null,
    uage int not null
);
insert into users(uid,uname,uage) values(null,'张三',20),(null,'李四',18);

2.创建POJO实体

在项目的src/main/java目录下创建com.itheima.pojo包,在com.itheima.pojo包下创建User类,该类用于封装User对象的属性,如文件1-3所示。

文件1-3 User.java
1  package com.itheima.pojo;
2  public class User {
3     private int uid;          //用户id
4     private String uname;     //用户姓名
5     private int uage;         //用户年龄
6     public int getUid() {
7        return uid;
8     }
9     public void setUid(int uid) {
10       this.uid = uid;
11    }
12    public String getUname() {
13       return uname;
14    }
15    public void setUname(String uname) {
16       this.uname = uname;
17    }
18    public int getUage() {
19       return uage;
20    }
21    public void setUage(int uage) {
22       this.uage = uage;
23    }
24 }

3.创建映射文件UserMapper.xmI

在项目的src/main/resources目录下创建一个mapper文件夹,在mapper文件夹下创建映射文件UserMapper.xml,该文件主要用于配置SQL语句和Java对象之间的映射,使SQL语句查询出来的数据能够被封装成Java对象。一个项目中可以有多个映射文件,每个实体类都可以有其对应的映射文件。映射文件通常使用POJO实体类名+Mapper命名。例如,User实体类的映射文件名称就为UserMapper.xml。UserMapper.xml的实现具体如文件1-4所示。

文件1-4 UserMapper.xml
1  <?xml version="1.0" encoding="UTF-8"?>
2  <!DOCTYPE mapper
3        PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
4        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5  <!-- mapper为映射的根节点-->
6  <!-- mapper为映射的根节点,namespace指定Dao接口的完整类名
7     mybatis会依据这个接口动态创建一个实现类去实现这个接口,
8     而这个实现类是一个Mapper对象-->
9  <mapper namespace="com.itheima.pojo.User">
10    <!--id ="接口中的方法名"
11    parameterType="传入的参数类型"
12    resultType = "返回实体类对象,使用包.类名"-->
13 <select id="findById" parameterType="int"
14      resultType="com.itheima.pojo.User">
15      select * from users where uid = #{id}
16 </select>
17 </mapper>

在文件1-4中,第2~4行代码是映射文件的约束信息;第9行代码是根元素<mapper>元素,<mapper>元素中可包含用于增删改查操作的<insert>、<delete>、<update>和<select>等元素。<mapper>元素中的namespace属性用于标识映射文件,namespace属性的值通常设置为对应实体类的全限定类名;第13~16行代码为<select>查询语句块,用于SQL查询语句模板的编写。需要注意的是,<select>元素中的id属性用于唯一标识该SQL语句块,Java代码通过id属性的值找到对应的SQL语句块。

4.修改mybatis-config.xmI配置文件

在 mybatis-config.xml 映射文件的第20行代码后添加 UserMapper.xml 映射文件路径的配置,用于将UserMapper.xml映射文件加载到程序中。具体代码如下:

<!-- mapping文件路径配置 -->
<mappers>
    <mapper resource="mapper/UserMapper.xml"/>
</mappers>

上述代码中,<mapper>元素指定了UserMapper.xml映射文件的路径。

注意:

如果一个项目有多个映射文件,则需要在mybatis-config.xml核心配置文件中的<mappers>元素下配置多个<mapper>元素指定映射文件的路径。

5.编写测试类

在项目的src/test/java目录下创建Test包,在Test包下创建UserTest类,该类主要用于程序测试,如文件1-5所示。

文件1-5 UserTest.java
1  package Test;
2  import com.itheima.pojo.User;
3  import org.apache.ibatis.io.Resources;
4  import org.apache.ibatis.session.SqlSession;
5  import org.apache.ibatis.session.SqlSessionFactory;
6  import org.apache.ibatis.session.SqlSessionFactoryBuilder;
7  import org.junit.Test;
8  import java.io.IOException;
9  import java.io.Reader;
10 public class UserTest {
11       @Test
12       public void userFindByIdTest(){
13          String resources = "mybatis-config.xml";
14          //创建流
15          Reader reader=null;
16          try {
17             //读取mybatis-config.xml文件内容到reader对象中
18             reader= Resources.getResourceAsReader(resources);
19          } catch (IOException e) {
20             e.printStackTrace();
21          }
22          //初始化MyBatis数据库,创建SqlSessionFactory类的实例
23          SqlSessionFactory sqlMapper=new
24                                  SqlSessionFactoryBuilder().build(reader);
25          //创建SqlSession实例
26          SqlSession session=sqlMapper.openSession();
27          //传入参数查询,返回结果
28          User user=session.selectOne("findById",1);
29          //输出结果
30          System.out.println(user.getUname());
31          //关闭session
32          session.close();
33       }
34 }

在文件1-5中,第18行代码用于读取mybatis-config.xml文件内容到reader对象中;第23~26行代码用于创建SqlSessionFactory类的实例,并通过SqlSessionFactory类的实例创建SqlSession实例;第28行代码调用selectOne()方法,查询id为1的用户信息,并将查询结果返回给User对象。

文件1-5的运行结果如图1-5所示。

图1-5 文件1-5的运行结果 tBzSVV/oPPiQLWz1aSyXdgpZnPDwAJ2Rps+GHmOBQG20HFLFAsM3BMUgIaCwP9n6

点击中间区域
呼出菜单
上一章
目录
下一章
×