3、第一个Mybatis程序
3.1、环境搭建
-
1、创建数据库并创建表
-
-- 创建数据库Mybatis CREATE DATABASE `MyBatis` -- 创建user表 CREATE TABLE `user` ( `id` int(11) NOT NULL, `username` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
连接数据库
-
-
2、导入依赖Jar包
-
<dependencies> <!-- 添加依赖mysql-connector-java驱动包以连接数据库--> <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.9</version> </dependency> <!-- 添加依赖使用junit单元测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>
-
创建子项目
-
3.2、创建模块
-
3、在resources资源目录中配置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.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <mapper resource="zhang/Dao/Usermapper.xml"/> </mappers> </configuration>
-
-
4、编写封装工具类
-
package zhang.Utils; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class MyBatisUtils { private static SqlSessionFactory sqlSessionFactory; //使用Mybatis获取sqlSessionFactory对象 static { try { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); //提高sqlSessionFactory作用域 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession getsqlSession(){ return sqlSessionFactory.openSession(); } }
-
-
5、创建对应数据库实体类
-
package zhang.Pojo; public class user { private int id; private String username; private String password; public user() { } public user(int id, String username, String password) { this.id = id; this.username = username; this.password = password; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
-
-
6、实现数据库查询底层接口
- 编写UserDao接口
package zhang.Dao; import zhang.Pojo.user; import java.util.List; public interface UserDao { List<user> getUserlist(); }
- 编写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="zhang.Dao.UserDao"> <select id="getUserlist" resultType="zhang.Pojo.user"> select * from mybatis.user </select> </mapper>
3.3、测试
-
7、编写测试类
-
import org.apache.ibatis.session.SqlSession; import org.junit.Test; import zhang.Dao.UserDao; import zhang.Pojo.user; import zhang.Utils.MyBatisUtils; import java.util.List; public class Usertest { @Test public void test(){ SqlSession sqlSession = MyBatisUtils.getsqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); List<user> getuserliset = userDao.getUserlist(); for (zhang.Pojo.user user:getuserliset) { System.out.print(""+user.getId()); System.out.print(" "+user.getUsername()); System.out.println(" "+user.getPassword()); } sqlSession.close(); } }
-
实现具体结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f0wvlHsg-1663506052925)(D:\32838\Documents\SSM框架整合.assets\image-20220517205042983.png)]
-
3.4、解决bug以及一些自己的理解
- org.apache.ibatis.binding.BindingException: Type interface zhang.Dao.UserDao is not known to the MapperRegistry.(没有注册配置文件)
- 如果出现ExceptionInInitializerError报错时,检查xml文件中是否写有注释,因为乱码存在,所以这时需要修改文件的字符集编码为UTF-8。
-
ERROR EXIST zhang.Dao.Usermapper.xml
-
解决办法:其中maven创建的项目由于约定大于配置,可能导致在java包下的配置文件无法导出。在pom.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>
-
-
返回类型不对。
-
绑定接口错误。
-
对用方法名错误。
-
心得:关于创建的第一个Mybatis程序,其底层是实现Dao接口中的方法,连接数据库,查询,返回结果集等一列操作。其MyBatis封装数据库查询操作。假设创建对应接口实现类UserDaoImpl,MyBatis的namespace对应UserDaoImpl实现接口,如此的话就需实现接口方法,也就是xml文件中的id,同时返回结果集对应Result对象。