引言 |
本文标题是Mybatis入门,既然是入门,那么意味着它很简单,但是简单!=不重要。如果之前没有接触过Mybatis,强烈建议从此篇看起。关于Mybatis的学习会完成一系列的文章,本着n+1的原则,由少到多,逐渐深入。
准备 |
新建一个java Web项目,既然要使用Mybatis,首先要做的就是引用Mybatis提供的jar文件。将 mybatis-x.x.x.jar 文件放到项目的 classpath 中即可,通常我们把它放到 WEB-INF/lib 目录下。
什么是 classpath ?
类文件路径,src目录不是classpath, WEB-INF/classes,lib才是classpath,classes文件夹中存放src目录下java文件编译之后的class文件,xml、properties等资源配置文件。lib通常放置我们所引用的外部类文件。
当然,你也可以使用 Maven 来管理项目,在pom.xml文件中添加下面的依赖。没有使用过 Maven 也没有问题,直接把这部分忽略就好,它和我们理解mybatis没有直接关系。
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
因为我们是对数据的操作,所以需要添加相应的数据库驱动包,方法和上面一样,这里以MySQL为例。
mysql-connector-java-x.x.x-bin.jar
分析 |
在Mybatis中,SqlSession类是核心,想要执行SQL语句就需要先创建一个SQL会话对象。Mybatis为此提供了一个工厂模式的实现来完成SqlSession的初始化。大致流程如下:
也就是说我们需要先使用 SqlSessionFactoryBuilder 来生成 SqlSessionFactory ,继而得到 SqlSession 对象来执行已映射的SQL语句。
实现 |
数据表 t_user
在 MySQL 上新建一个名为 “mybatistest”的数据库,并为它添加用户信息表 t_user:
实体类 UserEntity
添加一个实体类,与t_user表相对应。
public class UserEntity {
private String userID;
private String userType;
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getUserType() {
return userType;
}
public void setUserType(String userType) {
this.userType = userType;
}
}
UserDao
为了便于维护与拓展,添加了一个UserDao的接口类,来描述对t_user数据表的操作。
public interface UserDao {
public UserEntity selectUserByID(String id);
}
user-mapper.xml
既然声明了接口,自然需要来实现接口中方法,在Mybatis中,实现写在了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">
<mapper namespace="dao.UserDao">
<select id="selectUserByID" resultType="entity.UserEntity">
select * from t_user where userID = #{id}
</select>
</mapper>
创建 SqlSessionFactory
我们这次通过 XML 文件来构建 SqlSessionFactory 的实例。同样的我们把 XML 文件放置到 classpath 下,便于查找。这里以 configuration.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">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 设置数据源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- SQL映射文件,这部分先不用理会,后面会用到 -->
<mappers>
<mapper resource="resources/user-mapper.xml"/>
</mappers>
</configuration>
准备好了配置文件,现在我们来创建一个 SqlSessionFactory :
//配置文件路径,因为是在classpath下,所以填写文件名就行
String resource = "configuration.xml";
//用字节流的方式读取配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//构建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
测试
现在基本的工作已经完成了,来测试一下。我们已经有了一个 SqlSessionFactory对象,用它打开一个 SqlSession 就能执行接口中的方法了。
SqlSession sqlSession = sqlSessionFactory .openSession();
try {
UserDao userDao = sqlSession.getMapper(UserDao.class);
UserEntity user = userDao.selectUserByID("1");
System.out.println(user.getUserType());
} finally {
sqlSession.close();
}
小结 |
虽然是Java Web项目,也无需启动Tomcat,通过接收一个Web请求来对Mybatis是否连接成功进行测试。可以使用JUnit框架进行单元测试,省心省力。
未完待续。。。