第一个Mybatis程序
思路:搭建环境–>导入mybatis–>编写代码–>测试
搭建环境
1.配置数据库表
CREATE DATABASE 'mybatis';
USE 'mybais';
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,'ZHOUJX','123123');
(2,'ZAIGE','123456');
(3,'LINFP','123321');
配置了一个数据库mybatis,里面新建了一张表user,
表有三个数据id序号;名字;密码;其中id为主键;
2.新建一个普通的maven项目
-
删除src
-
在pom.xml文件中配置自己需要用到的依赖;
-
<dependencies> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.12</version> </dependency> <!--mybatis配置--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency> <!--junit配置--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
3.新建一个模块
-
编写mybatis的核心配置文件(从mybatis官网中找,然后对其中的daaSource进行修改)
<?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?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!--每个mapper。xml都需要在Mybatis核心配置文件中注册--> <mappers> <mapper resource="com.zhou.dao/UserMapper.xml"></mapper> </mappers> </configuration>
-
编写mubatis工具类(同参考mybatis官网)
package com.zhou.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 --> sqlSession
* @email zjx9527@foxmail.com,
* @author:Zhou_jx,
*/
public class MybaisUtils {
//提升作用域
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//第一步,获取sqlSessionFactory对象
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();
}
}
4.编写代码
-
实体类
package com.zhou.pojo; /** * @email zjx9527@foxmail.com, * @author:Zhou_jx, */ public class User { private int id; private String name; private String pwd; public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", 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; } }
-
Dao接口
package com.zhou.dao; import com.zhou.pojo.User; import java.util.List; /** * @email zjx9527@foxmail.com, * @author:Zhou_jx, */ public interface UserDao { public 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绑定一个对应的Mapper接口--> <mapper namespace="com.zhou.dao.UserDao"> <!--select查询语句--> <select id="getUserList" resultType="com.zhou.pojo.User"> select * from mybatis.user </select> </mapper>
5.测试
注意点:
需要在核心配置文件中注册mappers,代码如下
<mappers>
<mapper resource="com/zhou/dao/UserMapper.xml"/>
</mappers>
其中文件路径的表示,有时使用/,有时又可以用.,当你出错了,但不知道错哪里的时候,可以试一下另一种格式;
-
junit测试
package com.zhou.dao; import com.zhou.pojo.User; import com.zhou.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; /** * @email zjx9527@foxmail.com, * @author:Zhou_jx, */ public class UserDaoTest { @Test public void test(){ //从工具类utils中取到SqlSession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //执行sql- 方法一 UserDao mapper = sqlSession.getMapper(UserDao.class); List<User> userList = mapper.getUserList(); for (User user:userList){ System.out.println(user); } //关闭Sqlsession sqlSession.close(); } }
ps测试小建议:使用sqlSession时,最好使用try{}catch(){}finally;的形式包装代码;
可能遇到的问题;
-
配置文件没有注册,路径符号问题
-
绑定接口错误
-
方法名不对
-
返回类型不对
-
xml文件中最好别带中文注释
-
使用musql8及以上版本,除了配置jdbc需要改以外,可能还需要改url
-
maven导出资源问题
-
读取不到xml文件,可以添加如下配置
maven由于他的约定大于配置,所以我们可能遇到我们写的配置文件无法被导出或者生效的问题,需要在pom.xml文件中 <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> </resources> </build>
总结
- 首先配置pom.xml文件,添加依赖
- 然后写工具类
- 工具类需要调用mybatis-config.xml,写在resource中
- 然后写实体类
- 实体类的接口,以及映射文件
- 最后测试