Mybatis
环境
- jdk 1.8
- mysql 5.7
- maven 3.6.1
- idea
回顾
- jdbc
- mysql
- java基础
- maven
- Junit
一、简介
- 持久层框架
- 避免了几乎所有的jdbc代码和手动设置参数以及获取结果集
- 可以使用简单的xml或注解来配置和映射原生类型、接口和java的pojo为数据库中的记录
maven仓库
1 2 3 4 5 6
| <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency>
|
1.持久化
数据持久化
- 将程序的数据在持久状态和瞬时状态转化的过程
- 内存:断电即失
- 数据库(jdbc),io文件持久化
- 类比于生活中的冰箱的冷藏
2.持久层
dao层、service层、controller层
为什么要使用?
二、第一个mybatis程序

搭建环境–>导入mybatis–>编写代码–>测试
工具类(utils–MybatisUtils)–> 配置文件(resources–mybatis-config.xml)–> 实体类(User)–>接口(UserDao)–>Mapper.xml –>测试类
1.搭建环境
- 创建普通maven项目
- 删除src目录
- 导入maven依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <dependencies>
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency>
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency>
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
|
2.创建模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <?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/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments>
</configuration>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static { try { 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(); }
}
|
3.编写代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| public class User { private int uid; private String uname; private String upassword;
public User() { }
public User(int uid, String uname, String upassword) { this.uid = uid; this.uname = uname; this.upassword = upassword; }
public int getUid() { return uid; }
public void setUid(int uid) { this.uid = uid; }
public String getUname() { return uname; }
public void setUname(String uname) { this.uname = uname; }
public String getUpassword() { return upassword; }
public void setUpassword(String upassword) { this.upassword = upassword; } }
|
1 2 3
| public interface UserDao { List<User> getUserList(); }
|
由原来的UserDaoImpl转变为一个Mapper.xml配置文件
1 2 3 4 5 6 7 8 9 10 11
| <?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.nuc.dao.UserDao">
<select id="getUserList" resultType="com.nuc.pojo.User"> select * from mybatis.user </select> </mapper>
|
4.测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public class UserDaoTest {
@Test public void test(){ SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class); List<User> userList = userDao.getUserList();
for (User user : userList) { System.out.println(user); }
sqlSession.close(); } }
|
踩坑记录
- 缺少配置文件
MapperRegistry
org.apache.ibatis.binding.BindingException: Type interface com.nuc.dao.UserDao is not known to the MapperRegistry.
1 2 3 4
| <mappers> <mapper resource="com/nuc/dao/UserMapper.xml"/> </mappers>
|
- Mapper.xml位置问题

从dao里面移动到resources中