Mybatis的入门案例:
开发工具:IDEA
数据库服务器:Mysql 5.1
在过程中也出现了一些问题,经过面向百度和谷歌,终于解决了,得到了查询结果。
下面开始记录一下过程:
首先是整个工程的目录结构:
这个结构中需要说明的是,我将所有的配置文件,都放入了Maven管理下的resources目录,这样也为了防止出现IDEA找不到配置文件。
我的pom.xml:
<?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>jax.project.spring.jdbc</groupId> <artifactId>Spring_JDBC</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.1</version> </dependency> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> </dependencies> </project>
然后,从第一步开始说起:使用mybatis,我们需要先建立一个全局配置文件,这个文件的命名为:
其中内容为
接下来,就是db.properties中的内容:
这下,应该有了概念,这两个的联系是在哪里,应该就一清二楚了。
SqlMapConfig为全局配置文件,db.properties为数据库配置文件
我的数据表:
可以看到,在我的表中,是有id,userName,birthday,sex,address这些字段的,所以你需要在IDEA中创建实体类,我是放在mybatis.po包中的,名字为。
记得要添加set()和get()方法,以及重写toString().
------------------------------------------------------------------------------------------------------------------------------
现在,我们就可以开始考虑来写接口了:(使用mapper代理的方式)
在mybatis下的mapper包下新建一个接口
然后在接口中写我们要用到的接口方法:
然后,我们要在resources文件下,创建我们的映射文件:
其中内容如下:
<?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="mybatis.mapper.UserMapper">
<!--id:接口中的方法我们用的什么名字,那么这个id我们就用什么名字
parameterType:表示输入参数的类型,在这里,我们是通过ID来查找,所以那么类型就应该是int类型
resultType:输出结果的类型,我们输出的结果是一个用户,里面包括姓名,生日等信息,
所以这里应该用User类型。记得要写类的全路径哦。
#{}:表示一个占位符
#{value}:因为我们要输入是简单类型,所以可以稍微随意起名字,所以这个value是可变的,你改成LOL都可以,
或者你改成其他的a或者b什么的,都是可行的。
-->
<select id="findUserById" parameterType="int" resultType="mybatis.po.User">
<!--这个就是之前我们在表中测试能够得到数据的sql语句哦-->
SELECT * FROM USER WHERE id=#{value}
</select>
</mapper>
----------------------------------------------------------------------------------------------------------------------------------
这里完成之后呢,我们就要完成最后一个配置了,就是在全局配置文件SqlMapConfig.xml文件中去应用我们写的UserMapper.xml文件了,不然,不应用他,那么我们就无法得到结果。
这个标签是放在<configuration></configuration>标签之间的哦!!
到此处,我们的配置工作就全部做完了,最后一步就是测试了,我们要写测试的代码。
----------------------------------------------------------测试部分如下----------------------------------------------------------
import java.io.IOException;
import java.io.InputStream;
import mybatis.mapper.UserMapper;
import mybatis.po.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
public class TestC {
private SqlSessionFactory sqlSessionFactory;
@Before
public void SetUp() throws IOException {
//定义resource,这个resource就是全局配置文件的名字,文件是放在resources包下的,
//注意这里的resource和resources包是没啥联系的
String resource = "SqlMapConfig.xml";
//创建输入流,将全局配置文件变为一个输入流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建sqlSession工厂,通过工厂的build方法
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void findById() throws Exception {
//通过工厂打开session
SqlSession sqlSession = sqlSessionFactory.openSession();
//通过sqlsession来获得映射文件
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//调用接口中的findUserById方法,输入参数为int类型的,所以这里写id值
User user = userMapper.findUserById(1);
//为了看到效果,我们将这个用户的信息打印出来
System.out.println(user);
}
}
结果的截图为: