第一个Mybatis程序
思路:搭建环境->导入Mybatis->编写代码->测试
1 搭建环境
-
搭建数据库
-
创建Mybatis项目
-
删了src文件夹使其成为父工程
-
导入依赖 pom.xml
<dependencies> <dependency> <!-- mysql配置--> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.25</version> </dependency> <dependency> <!-- junit配置--> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <!-- Mybatis配置--> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency> </dependencies>
2 创建一个模块
-
编写Mybatis的核心配置文件
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。
从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。 但也可以使用任意的输入流(InputStream)实例,比如用文件路径字符串或 file:// URL 构造的输入流。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易。
mybatis-config.xml 放到resource目录下
<?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?characterEncoding=UTF-8;&allowMultiQueries=ture"/> <property name="username" value="root"/> <property name="password" value="qsj123"/> </dataSource> </environment> </environments> <mappers> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>
-
编写Mybatis的工具类
创建SqlSessionFactory 在src/maim/java/com.snake.utils.MybatisUtils
package com.snake.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; //工具类 获取sqlSessionFactory public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e){ e.printStackTrace(); } } //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。 //你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。例如: public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
可以连数据库了现在
3 编写代码
-
实体类
pojo里写个User类
package com.snake.pojo; //实体类 public class User { //定义和数据库里面的定义一样 private int id; private String name; private String pwd; // alt+ins public User() { } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }
-
Dao接口
package com.snake.dao; import com.snake.pojo.User; import java.util.List; //操作数据库对象的实体 public interface UserDao { List<User> getUserList(); }
-
接口实现类 Mapper
<?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="com.snake.dao.UserDao"> <!-- select查询语句--> <select id="getUserList" resultType="com.snake.pojo.User"><!--结果集类型为泛型User--> select * from mybatis.firstcx </select> </mapper>
4 测试
注意点:
-
Junit测试
public class UserDaoTest { @Test public void test(){ // 第一步:获得SqlSession 对象 SqlSession sqlSession =MybatisUtils.getSqlSession(); // 第二步:执行SQL // 方式一:getMapper UserDao userDao = sqlSession.getMapper(UserDao.class); List<User> userList = userDao.getUserList(); for(User user : userList) { System.out.println(user); } sqlSession.close(); } }
可能遇到的傻逼问题。我是傻逼
-
配置文件没有注册
解决方法:
- 在resources对Mybatis的核心配置文件“mybatis-config.xml”中注册Mybatis!每一个都得手动注册
<!-- 每一个Mapper.xml都需要在Mybatis的核心配置文件中注册--> <mappers> <!-- 三种方式表示--> <mapper resource="com/kuang/dao/UserMapper.xml"/> </mappers>
-
方法名不对
-
返回类型不对
-
Maven导出资源问题
- 检查下pom.xml里有没有用build配置resources,防止我们资源导出失败
<!-- 在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>false</filtering>
</resource>
</resources>
</build>
- 字符编码问题。xml里写中文注释有的时候编码错误,我这是把utf-8改成utf8就没问题了。但是看了看别人的解决方法和我也不太一样。
TIps:本文章随手上传,便于初学者上手Mybatis,了解大致结构