第一个MyBatis程序
思路:搭建环境 --> 导入MyBatis --> 编写代码 --> 测试!
1、搭建环境
搭建数据库
-- 创建数据库
CREATE DATABASE `mybatis`;
USER `mybatis`;
-- 创建表
CREATE TABLE `user`(
`id` int(20) NOT NULL PRIMARY KEY,
`name` VARCHAR(30) DEFAULT NULL,
`pwd` VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 插入表数据
INSERT INTO `user`(`id`,`name`,`pwd`) VALUES
(1,'小王','123456'),
(2,'张三','123456'),
(3,'李四','123456');
新建项目
-
新建一个普通的maven项目
-
删除src目录,将它设置为父工程
-
导入maven依赖
<!-- 导入依赖 --> <dependencies> <!-- MySql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!-- MyBatis驱动 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
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核心配置文件 --> <configuration> <properties resource="jdbc.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/kuang/dao/userMapper.xml"/> </mappers> </configuration>
-
编写MyBatis的工具类
// sqlSessionFactory --> sqlSession 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(); } } //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。 // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。 public static SqlSession getSqlSession() { return sqlSessionFactory.openSession(); } }
3、编写代码
-
实体类
// 实体类 public class User { private Integer id; private String name; private String pwd; //构造,有参,无参 //set/get //toString() }
-
编写Mapper接口
public interface UserMapper { List<User> getUserList(); }
-
接口实现类由原来的Impl转化为一个mapper.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"> <!-- namespace=绑定一个Mapper接口 --> <mapper namespace="com.jh.mapper.UserMapper"> <!-- select 查询语句 --> <select id="getUserList" resultType="com.jh.domain.User"> select * from user </select> </mapper>
4、测试代码
注意点:
org.apache.ibatis.binding.BindingException: Type interface com.jh.mapper.UserMapper is not known to the MapperRegistry.
MapperRegistry是什么?测试配置文件中注册mappers
-
junit测试
public class UserMapperTest { @Test public void test() { // 第一步:获得sqlSession对象 SqlSession sqlSession = MyBatisUtils.getSqlSession(); // 方式一:执行sql UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> userList = userMapper.getUserList(); // 方式二:(不推荐) //List<User> userList = sqlSession.selectList("com.jh.mapper.UserMapper.getUserList"); for (User user : userList) { System.out.println(user); } sqlSession.close(); } }
测试中可能会遇到的问题:
- 配置文件没有注册
- 绑定接口错误
- 方法名不正确
- 返回类型不正确
- maven静态资源过滤问题
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
懂不懂,都是收获