第一次学习Mybatis,开发工具是idea,在这里记录并分享一下收获和心得,如有错误或疑问欢迎大家指正与提问!
- 创建一个maven项目
项目开始前需要自己安装maven,虽然说idea自带maven,但是它好像会将下载的依赖存放在c盘,多少会影响运行速度
打开idea,创建一个maven项目在这里可以直接点击next
接下来输入Groupid(类似com.xxx)与Artifactid(项目名),点击next
后续点击finish,就完成了maven项目的创建
创建完成后需要将maven的 地址改为自己的安装地址,步骤如下
File-Setting-Build,ExEcution,Deployment-Build Tools-Maven
经过上述步骤到达下页,更改Maven home directory为自己的安装地址
- 导入依赖
在导入依赖之前,需要删除src目录,以此来使这个项目作为父工程
需要导入mysql驱动,mybatis,junit
<!--导入依赖-->
<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>
</dependency>
</dependencies>
- 在这个项目下创建一个子项目
New-Module 步骤类似创建新项目 ,这样子项目就不用重新导包了
接下来编写resources下的核心配置文件mybatis-config.xml
<!--configuration:是核心配置文件-->
<configuration>
<!--environments:环境,内部可以配置多套环境,default是默认环境 -->
<environments default="development">
<environment id="development">
<!--事务管理:默认使用jdbc的事务管理-->
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
- 编写mybatis工具类MybatisUtils
在src的Java包下创建包 com.xxx.utils
在utils下创建工具类MybatisUtils
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();
}
}
- 创建实体类
创建一个pojo层(与utils同级),用来存放实体类
这里的实体类要对应数据库中的列名,可以自己设计数据库
public class User {
private int id;
private String name;
private String pwd;
public User(){
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getPwd() {
return pwd;
}
}
- 创建UserMapper接口
创建dao层(与utils,pojo同级),用来存放dao接口和mapper配置文件
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">
<!--namespace=绑定一个对应的dao/mapper接口,命名绑定空间不能写错 -->
<mapper namespace="com.yu.dao.UserDao">
<!--select查询语句-->
<!--记住两个结果集类型:resultType类型和resultmap集合。resultmap="这里要写全限定名,如下"-->
<!--id对应接口中的方法名 后面对应泛型名-->
<select id="getUserList" resultType="com.yu.pojo.User">
select * from user
</select>
</mapper>
- 编写测试类
在test的Java包下创建包com.xxx.dao(不知道有什么好处,不这样写也可,可能这样更规范)
在dao包下创建UserDaoTest测试类
public class UserDaoTest {
@Test
public void test(){
//获得Sqlsession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//getMapper
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.getUserList();
for(User user : userList){
System.out.println(user);
}
// 关闭SqlSession
sqlSession.close();
}
按照以上方式操作结束后,测试会出现问题
此时需要在核心配置文件中添加以下代码
<mappers>
<mapper resource="com/yu/dao/EmpMapper.xml"/>
</mappers>
原因是每个Mapper.xml都需要在mybatis核心配置文件中注册
接着还会出现初始化异常,这是因为maven的资源过滤问题,在父工程以及子工程的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项目就大功告成了
但是在核心配置文件中,将数据库链接语句中的url中将useSSL=false修改成true就会出现以下异常
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
求大神解疑
初次学习框架,有很多名词及介绍使用不够恰当,如有问题请谅解,有错误的地方还请不吝赐教!