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 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 <?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 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的运行结果