文章目录
Mybatis学习——如何快速构建Mybatis项目
学习完JDBC后再看Mybatis后,就会发现Mybatis就是将JDBC复杂繁琐的一套进行了简化,只需要数个配置xml文件,即可实现JDBC中的增删改查操作。这里就记录一下自己的学习过程。
注:学习资源来自于遇见狂神说的Mybatis学习教程以及Mybatis官方文档
环境搭建包括如下几步:
Step1:构建Maven项目——导入响应的包依赖,以及响应的过滤信息
Step2:配置核心xml文件mybatsi-config.xml
,填写路径信息,并测试链接数据库
Step3:构建pojo类以及包含了方法的接口
Step4:构建mapper.xml
(填写的sql语句),并在主要资源类中注册该mapper
Step5:在Test文件中测试
Step1 使用Maven构建项目
创建好Maven项目后修改内部的pom.xml
文件,导入必要的三种包——mysql
,mybatis
以及junit
<!--导入依赖-->
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
接下来还需要在pom.xml
中配置对应的过滤信息,目的是使的在打包成jar
(生成target
文件)配置文件.xml
以及.properties
也能成功生成。对应的代码如下
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
有了上述环境配置就可以进行进入第二步了
Step2 配置数据库基本信息
根据Mybatis官方文档,需要创建mybatis-config.xml
文件,并配置连接数据库需要的四个基本信息(驱动,url,用户名,密码)
<?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>
</configuration>
该核心配置文件中最重要的标签是,其中涉及许多内置标签,见如下图所示:
其中,关于数据库连接最重要的配置标签是配置标签,在该标签下只有标签;而在标签下则有和两个标签,这两个标签也是连接数据库最终需要配置的标签。
<environments default="test">
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
关于核心配置类标签的详细介绍见另一篇博客,这里不做赘述。
这里不妨对比学习一下JDBC中的配置文件
在JDBC中,我们需要填写properties
文件,并在其中填写配置信息
user=xxxx
password=xxxx
url=jdbc:mysql://xxxx/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
driverClass=com.mysql.jdbc.Driver
有了上述的内容,接下来可以进入第三步
Step3 获取sql执行对象sqlSession
在Mybatis中sqlSession
是执行sql语句的类对象,其类似于JDBC中的preparedStatement
。
这里不妨再回忆一下JDBC中如何获取获取preparedStatement
对象的,其过程为如下三步:
Step1:读取配置文件的基本信息
Step2:加载驱动
Step3:获取连接获取连接
代码如下:
public static Connection getConnection() throws Exception {
// 1.获取连接配置信息
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties();
pros.load(is);
String user = pros.getProperty("user");
String password = pros.getProperty("password");
String url = pros.getProperty("url");
String driverClass = pros.getProperty("driverClass");
// 2.加载驱动
Class.forName(driverClass);
// 3.获取连接
Connection connection = DriverManager.getConnection(url, user, password);
return connection;
}
conn = JDBCUtils.getConnection();
ps = conn.prepareStatement(sql);
但在mybats中获取sqlSession
要要方便得多,只需要如下两步
Step1:读取配置文件并配置sqlSessionFactory
Step2:从sqlSessionFactory
中获取sqlSession
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try{
// 使用Mybatis的第一步,
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e){
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
由于该方法是很常用的方法,因此将其写成工具类,放置在pojo同一个文件夹下。
Step4 构建数据表,pojo类,方法接口以及Mapper.xml
在使用增删改之前,数据库中先构造数据表
然后在pojo构建响应的bean类
public class User {
private int id;
private String name;
private String pwd;
// 省略getset方法
}
有了上述内容,接下来就可以构建dao接口,接口中需要定义响应的方法
public interface UserMapper {
List<User> getUserList(); // 查询
User getUserById(int id); // 查询
int addUser(User user); // 增
int updateUser(User user); //改
int deleteUser(int id); //删
}
在JDBC中,定义了接口后通常会写baseDao
实现类以及各种方法的实现类。但在Mybatis中,只需要将相应信息写在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">
<mapper namespace="com.ggs.dao.UserMapper">
<select id="getUserList" resultType="com.ggs.pojo.User">
select * from Mybatis.user
</select>
<select id="getUserById" parameterType="int" resultType="com.ggs.pojo.User">
select * from Mybatis.user where id = #{id}
</select>
<insert id="addUser" parameterType="com.ggs.pojo.User">
insert into Mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
</insert>
<update id="updateUser" parameterType="com.ggs.pojo.User">
update Mybatis.user
set name = #{name},pwd=#{pwd}
where id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from Mybatis.user where id = #{id}
</delete>
</mapper>
其中,mapper
的namespace
属性需要指向定义的dao接口。mapper
下的各种标签对应着各种sql语句。这里需要注意的是各种标签中各个属性的含义
id
:Mapper中的各种方法resultType
:结果类型parameterType
:参数类型
关于参数类型以及结果集的标签说明见另一篇博客。
在写完mapper.xml
后还需要在主配置文件中注册mapper信息
<mappers>
<mapper resource="com/ggs/dao/UserMapper.xml"/>
</mappers>
小结:至此,所有环境配置均已完成,最终得到的项目文件如下图所示
核心配置文件mybatis-config.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://xxx.xxx.xxx.xxx:3306/Mybatis?useSSL=false&
useUnicode=true&characterEncoding=UTF8"/>
<property name="username" value="xxxx"/>
<property name="password" value="xxxx"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/ggs/dao/UserMapper.xml"/>
</mappers>
</configuration>
mapper类配置文件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">
<mapper namespace="com.ggs.dao.UserMapper">
<select id="getUserList" resultType="com.ggs.pojo.User">
select * from Mybatis.user
</select>
<select id="getUserById" parameterType="int" resultType="com.ggs.pojo.User">
select * from Mybatis.user where id = #{id}
</select>
<insert id="addUser" parameterType="com.ggs.pojo.User">
insert into Mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
</insert>
<update id="updateUser" parameterType="com.ggs.pojo.User">
update Mybatis.user
set name = #{name},pwd=#{pwd}
where id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from Mybatis.user where id = #{id}
</delete>
</mapper>
Step5 使用sqlSession
完成对数据库增删改操作
分别测试CRUD方法
public class UserDaoTest {
@Test
public void test(){
// 1. 获取SqlSession对象
SqlSession session = MybatisUtils.getSqlSession();
// 方式一:getMapper执行SQL
UserMapper mapper = session.getMapper(UserMapper.class);
// 查询用户
List<User> userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user.toString());
}
// 插入用户
int i = mapper.addUser(user);
if(i!=0)
System.out.println("插入成功!");
sqlSession.commit();
// 更新用户
mapper.updateUser(new User(3,"黄奕1","123456"));
sqlSession.commit();
// 删除用户
mapper.deleteUser(2);
sqlSession.commit();
// 关闭sqlSession
session.close();
}
}
不要忘记提交事务!!
总结
Mybatis是一款十分优秀的持久化框架,在和JDBC对比过程中可以发现,其只需要数行配置信息便实现了数据库的连接,sql语句的调用。不需要再像传统JDBC实现一样,编写许多实现类来完成增删改操作,大大简化了开发。