入坑第一天
mybatis步骤
1、创建一个maven工程作为父工程
2、删除src目录
3、新建一个模块,作为子工程
4、在父工程的pom文件中导入需要用到的依赖
自此,第一步算是完成了,接下来就是怎么去连接数据库了
mybatis连接数据库步骤
最基础的搭建:获取sqlSessionFactory对象,永远的死代码,新建一个工具类MybatisUtils工具类,将以下代码丢进去
package com.miao.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 {
// 获取sqlSessionFactory对象
// 用到的是哪个资源
private static SqlSessionFactory sqlSessionFactory;
static{
try{
System.out.println(1);
String resource = "mybatis-config.xml";
System.out.println(2);
InputStream inputStream = Resources.getResourceAsStream(resource);
System.out.println(Resources.getResourceAsStream(resource).available());
System.out.println(3);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
System.out.println(4);
}catch(IOException e){
System.out.println(5);
e.printStackTrace();
}
}
// 编写方法获取创建好的sqlSessionFactory对象
public static SqlSession getSqlSession(){
System.out.println("utils");
return sqlSessionFactory.openSession();
}
}
1、配置mybatis核心配置文件
在java下的resources文件夹下面编写mybatis的核心配置文件: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="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
写完这段代码之后就是连接数据库了,需要自己把driver、url、username和password都写好。
2、注册数据层的所有的xml信息
这个步骤需要在上面这段代码中的mappers下进行注册操作,我的数据层下面的所有的xml文件都要通过这种方式来进行注册,否则会报以下错误(绑定异常)
具体的配置过程就是在中嵌入一个新的。值得注意的是是一个单标签。我们只需要在里面添加resource属性就好,属性值就是我们对应的“xxxMapper.xml”的完整路径。例如下面这样(切记:包名用反斜线分开!!)
那么问题来了,我们的“xxxMapper.xml”中写的是什么东西呢?
3、xxxMapper.xml 的文件内容
在xxxMapper.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="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
先举个例子来说
浅浅的分析一波这里面的内容,排除前面的自带的东西,
3.1 Mapper标签中的namespace属性
首先映入眼帘的就是一对标签,我们也知道了,这是一对数据标签,其中的内容当然是数据库的操作了,标签中的namespace属性有什么作用呢,自问自答了,namespace的作用就是绑定一个对应的Mapper接口,属性值是该接口的完整类名
值得注意的是namespace的值一定要是在mybatis核心配置文件中出现的,如果报这方面的错,那就要好好看看有没有可能是哪个地方敲错了。
3.2 Mapper标签下的子标签
我们可以看出来,这里面只有这几种标签可用,眨眼一看这里面的大部分不就是数据库的增删改查语句的关键字嘛!我也是初学,所以只能站在初学者的角度来看这个东西,我的理解是:这些关键字标签中我们必须有的属性就是id属性就是我的接口中需要实现的方法的方法名,在编写好数据库语句之后呢,若是查找语句,我们要做的就是获取到我们的查找到的数据集,在mybatis中,数据集不再用我们手动去写ResultSet实现,我们只需要继续在关键字标签中添加结果标签就可以了,比如上述中我们使用resultType作为获取到的结果集合。
4、编写Test测试程序
到了这一步,我们的环境配置才算是真的完成了,那么接下来就是我们的测试程序了。测试程序我们都会写在test测试包下面,通过junit来测试,也要用到@Test注释来搞,我们的测试包因该跟main包有着同样的目录结构。具体例子如下
4.1 编写测试方法
编写测试方法的时候我们用到了注释@Test来进行
4.2 获取到SqlSession对象
通过我们上面写过的获取SqlSessionFactory对象获取,切记要用完后之后要释放资源
4.3 获取查询结果集getMapper();
使用getMapper方法可以获取到查询的结果集,这个方法来源于SqlSession类里面,所以在此之前我们一定是要搞到sqlSession对象的。
对于参数来说getMapper()中要添加的参数是指定接口的类,所以要通过反射来实现;
最后通过接口调用接口中的方法就可以查询到我们的指定的数据了。
5、重中之重–build文件
好的,如果你是按照上面的步骤写下来,那么恭喜你,会发现红彤彤的好运气如下:
这是为什么呢?
我们都知道,java程序在执行的时候是执行的class文件,而我们在maven当中就学到过,一个maven项目在运行之后合成的class文件是在一个叫做target的红色文件夹下面的,我们不妨走进去看看
对比之下惊奇的发现,原来是我们的配置文件没有出现在target目录下,那么在运行的时候当然就不会成功了,我们应该怎么做呢??如果你是个铁头娃,就想每一次都复制粘贴进去的话,那我算你恨,我称你为大哥!
好了,我们来说正经的,这里我们需要在我们的工程的pom文件下编写以下的代码:
<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>
关于这段代码,起始做的就是将每次运行的时候,把所有的xml文件或者是prroperties文件都一起拷贝到target目录下,至此问题解决。
翻车总结
当测试中出现 “Cause: com,sun.org.apache.xerces.internal.impl.io.
MalformedByteSequenceException: 1 字节的 UTF-8 序列的字节 1 无效” 错误的时候,我们就需要设置文件的编码格式为utf-8。具体操作就不讲解了。