IDEA+maven+mybatis

267 阅读2分钟
mybatis官方文档:mybatis.org/mybatis-3/z…
maven引入坐标

  <dependencies>
        <!-- mybatis框架-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.0</version>
        </dependency>
        <!-- jdbc连接 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.15</version>
        </dependency>
    </dependencies>


在resource文件下编写配置 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核心配置文件-->
<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>
<!--每一个mapper都要在核心配置中注册-->
    <mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>


编写工具类,生成sqlsession

public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    //从 XML 中构建 SqlSessionFactory
    static{
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
//    既然有了 SqlSessionFactory,顾名思义,我们就可以从中获得 SqlSession 的实例了。
//    SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

编写mapper接口

public interface UserMapper {
    public List<student> getStudent();
}

编写接口对应的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 namespace="mapper.UserMapper">
<!--id为接口中的方法名,resultType对应返回值类型(路径)-->
    <select id="getStudent" resultType="domain.student">
    select * from student
  </select>
</mapper>

进行测试

public class UserMapperTest {
    @Test
    public void test() {
        SqlSession sqlSession = null;
        try {
            //从编写的工具类中得到sqlession
            sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<student> student = mapper.getStudent();
            student.forEach(System.out::println);
        } catch (Exception e) {

        } finally {
            //关闭会话
            sqlSession.close();
        }
    }
}

遇到的问题

1.资源过滤,找不到接口对应的xml文件,mapper.xml没有被编译到classes路径下,所以会找不到

报错详情: Cause: java.io.IOException: Could not find resource mapper/userMapper.xml

解决方法:在maven的pom文件中添加资源过滤

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>


2、问题详情:1 字节的 UTF-8 序列的字节 1 无效

在mapper.xml文件中写了中文注释,去掉就好了