第一个MyBatis小程序
思路:搭建环境——>导入MyBatis——>编写代码——>测试
1.1、搭建环境
搭建数据库
create database mybatis;
use mybatis;
create table `user`(
`id` int(20) not null primary key auto_increment,
`name` varchar(30) default null,
`pwd` varchar(30) default null
)engine=innodb default charset=utf8;
select * from `user`;
insert into `user`(`id`,`name`,`pwd`) values
(1,'admin','123456'),
(2,'张三','13579'),
(3,'李四','02468');
新建项目
-
新建一个普通的Maven项目
-
删除src目录
-
导入Maven依赖
<!-- 导入依赖--> <dependencies> <!--MySql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.25</version> </dependency> <!--MyBatis--> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <!--在build中配置resources,来防止我们资源导出失败问题--> <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>
1.2、创建一个模块
-
编写MyBatis的核心配置文件
<?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.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false"/> <property name="username" value="root"/> <property name="password" value="000000"/> </dataSource> </environment> </environments> <mappers> <mapper resource="cn/edu/dao/UserMapper.xml"/> </mappers> </configuration>
-
编写MyBatis工具类
public class MyBatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { //使用MyBatis第一步:获取sqlSessionFactory对象 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(); } }
1.3、编写代码
-
实体类
与数据库字段相对应 -
Dao接口
public interface UserDao { List<User> getUserList(); }
-
接口实现类
<?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"> <!--namespace:绑定一个对应的Dao/Mapper接口--> <mapper namespace="cn.edu.dao.UserDao"> <select id="getUserList" resultType="cn.edu.pojo.User"> select * from mybatis.user </select> </mapper>
1.4、测试
- Junit测试
public class UserDaoTest {
@Test
public void test(){
//第一步:获取SqlSession对象
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
}
可能会遇到的问题:
- 配置文件没有注册
- 绑定接口错误
- 方法名不对
- 返回类型不对
- Maven导出资源问题
注意点(常见问题):
-
org.apache.ibatis.binding.BindingException: Type interface cn.edu.dao.UserDao is not known to the MapperRegistry.
核心配置文件中没有注册Mapper
-
Could not find resource cn/edu/dao/UserMapper.xml
在pom.xml文件中配置
```xml`
<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>
测试结果: