一、Mybatis概述
1. 传统JDBC开发缺点
-
频繁创建数据库连接对象和释放,容易造成系统资源的浪费,从而影响系统的性能。在企业项目中,可以通过使用连接池解决这个问题,但是使用jdbc需要自己来实现连接池,而Mybatis内部提供连接池;
-
SQL语句的定义、参数设置、结果集处理存在硬编码,在企业项目中sql语句变化的可能性较大,一旦发生变化,需要修改java代码,系统需要重新编译,重新发布;
-
结果集处理存在重复代码,每次都要遍历ResultSet,获取一行数据,封装为对象处理麻烦,Mybatis能够自动把行数据封装为java对象。
2. Mybatis简介
Mybatis是一个持久层的框架,是对JDBC操作数据库的封装,使开发者只需要关注业务本身,不需要花费精力去处理加载驱动、创建数据库连接对象、创建statement语句对象、参数设置、结果集处理等一系列繁杂的过程代码。
Mybatis通过xml或注解进行配置,将Java对象与sql语句中的参数自动映射生成最终执行的sql语句,并将sql语句执行结果自动映射成java对象,返回给业务层(service)应用。
二、Mybatis环境配置
1. 创建表User
CREATE TABLE USER (
id INT(11) NOT NULL AUTO_INCREMENT,
username VARCHAR(32) NOT NULL COMMENT '用户名称',
birthday DATETIME DEFAULT NULL COMMENT '生日',
sex CHAR(1) DEFAULT NULL COMMENT '性别',
address VARCHAR(256) DEFAULT NULL COMMENT '地址',
PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
2. 编写实体类
public class User{}
3. 添加依赖
<dependencies>
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--数据库驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<!--日志包-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--junit测试包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
4. SqlMapConfig.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>
<!--数据库环境的配置,default指定使用哪一种数据库环境-->
<environments default="mysql">
<!--id="mysql" 表示mysql数据库环境配置-->
<environment id="mysql">
<!--事务管理器-->
<transactionManager type="JDBC"></transactionManager>
<!--指定使用的连接池-->
<dataSource type="pooled">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</dataSource>
</environment>
</environments>
</configuration>
5. dao层接口
public interface UserDao {
List<User> findAll();
}
6. dao接口映射(XML)
放在resources
文件夹下,新建com/zz/dao/UserDao.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">
<!--当前的映射文件对应的是UserDao接口-->
<!--namespace 指定接口全名-->
<mapper namespace="com.zz.dao.UserDao">
<!--id 对应接口方法名称-->
<!--resultType 对应方法返回值类型,如果方法返回的是集合,只要指定集合中元素的类型即可。-->
<select id="findAll" resultType="com.zz.entity.User">
select * from user;
</select>
</mapper>
7. SqlMapConfig.xml 加载接口的映射文件
<!-- 加载接口的映射文件 -->
<mappers>
<!-- 必须放到类路径下 -->
<mapper resource="com/zz/dao/UserDao.xml"></mapper>
</mappers>
三、总结
1. 主配置文件SqlMapConfig.xml要加载接口映射文件路径
2. 映射文件的namespace要对应接口路径
<mapper namespace="com.zz.dao.UserDao">
3. 接口方法名要对应mapper.xml id名