一、基本概念
1、什么是Mybatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
2、如何获得Mybatis?
3、什么是持久化
就是对数据进行持久化保存,把数据写入数据库,方便下次查询使用
为什么需要持久化?
有些用户数据或者交易记录这些数据需要再次使用的数据都要进行持久化存储
4、MyBatis 核心接口和类
二、使用过程
1、新建 Maven 工程,在pom.xml导入相关配置
- mybatis
- mysql
<dependencies>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
</dependencies>
2、在数据库新建数据表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`pwd` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
3、创建 MyBatis 的配置文件 mybatis-config.xml
- Mysql数据库后接常规配置:
?serverTimezone=UTC&characterEncoding=utf8&useSSL=true
<?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>
<!--配置Mybatis运行环境-->
<environments default="development">
<environment id="development">
<!--配置JDBC事务管理-->
<transactionManager type="JDBC"></transactionManager>
<!--POODLE配置JDBC数据源连接池-->
<dataSource type="POODLE">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&characterEncoding=utf8&useSSL=true"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
4、新建对应数据表的实体类
- 实体类里每一个属性都要与数据库里的一致
public class User {
private long id;
private String username;
private String password;
private int age;
}
5、新建 mapper 接口
- 接口内可以编写需要实现对数据库进行操作的方法
public interface UserMapper {
// 查询全部用户
List<User> getUserList();
// 根据ID查询用户
User gerUserById(int id);
}
6、创建对应接口(类)的 Mapper.xml 配置文件(实现类)
- namespace:绑定一个需要实现的Mapper接口
- id:Mapper接口内需要实现的方法名
- resultType:Sql语句执行的返回值类型
- parameterType:传入参数的类型
<!--默认头部-->
<?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.wnaoii.mapper.UserMapper">
<!--根据需要选择标签内编写sql-->
<select id="getUserList" resultType="com.wnaoii.pojo.User">
<!--具体实现的sql-->
select * from mybatis.user
</select>
<!--其他需要实现的sql-->
<select id="gerUserById" resultType="com.wnaoii.pojo.User" parameterType="int">
select * from mybatis.user where id = #{id}
</select>
</mapper>
7、在之前创建的 MyBatis 配置文件中注册mapper
<?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>
<!--配置Mybatis运行环境-->
<environments default="development">
<environment id="development">
<!--配置JDBC事务管理-->
<transactionManager type="JDBC"></transactionManager>
<!--POODLE配置JDBC数据源连接池-->
<dataSource type="POODLE">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--在这里注册mapper.xml-->
<mappers>
<mapper resource="com/wnaoii/mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
可能出现的报错
-
没注册 mapper 会出现
org.apache.ibatis.binding.BindingException: Type interface com.wnaoii.dao.UserDao is not known to the MapperRegistry.
错误解决办法:在 MyBatis 配置文件
mybatis-congig.xml
中注册 mapper -
java.io.IOException: Could not find resource mybatis-config.xml
无法正常识别 mybatis-config.xml 文件解决办法:在 maven 工程的
pom.xml
中添加文件过滤<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> </resources> </build>
8、编写测试类
public class UserMapperTest {
@Test
public void test() {
// 获得SqlSession对象
SqlSession sqlsession = MybatisUtils.getSqlsession();
// 获取接口对象
UserMapper mapper = sqlsession.getMapper(UserMapper.class);
// 调用 mapper 接口内写好的实现方法
List<User> userList = mapper.getUserList();
// 循环打印输出
for (User user : userList) {
System.out.println(user);
}
sqlsession.close();
}
@Test
public void gerUserById() {
SqlSession sqlsession = MybatisUtils.getSqlsession();
UserMapper mapper = sqlsession.getMapper(UserMapper.class);
User user = mapper.gerUserById(1);
System.out.println(user);
sqlsession.close();
}
}
三、增删改查(CRUD)
- 有了之前编写好的MyBatisUtils,之后的增删改查只需在原基础上进行稍加改动即可投入使用
- 增、删、改都需要提交事务
-
编写接口
public interface UserMapper { // 删除一个用户 int deletUser(int id); }
-
创建对应的
Mapper.xml
编写实现接口内定义方法的Sql
语句<?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.wnaoii.mapper.UserMapper"> <delete id="deletUser" parameterType="int"> delete from mybatis.user where id = #{id}; </delete> </mapper>
-
编写测试类测试
public class UserMapperTest { @Test public void deletUser() { // 获得SqlSession对象 SqlSession sqlsession = MybatisUtils.getSqlsession(); // 获取接口对象 UserMapper mapper = sqlsession.getMapper(UserMapper.class); // 调用 mapper 接口内写好的实现方法 mapper.deletUser(2); // 提交事务(*重要*) sqlsession.commit(); sqlsession.close(); } }
1、增(Insert)
<insert id="addUser" parameterType="com.wnaoii.pojo.User">
insert into mybatis.user (id, username, pwd) values (#{id}, #{username}, #{pwd});
</insert>
2、删(Delete)
<delete id="deletUser" parameterType="int">
delete from mybatis.user where id = #{id};
</delete>
3、改(Update)
<update id="updateUser" parameterType="com.wnaoii.pojo.User">
update mybatis.user set username = #{username}, pwd = #{pwd} where id = #{id};
</update>
4、查(Select)
<select id="getUserList" resultType="com.wnaoii.pojo.User">
select * from mybatis.user;
</select>