重学Mybatis从入门到源码之二---搭建一个Mybatis项目

  这篇开始搭建一个Mybatis项目。

  新建一个普通的maven项目,大概流程就是创建一个普通的maven项目,创建完成后删除src目录,把当前项目当作父项目,编写pom文件。

   我们需要导入mybatis的依赖和mysql的依赖,pom.xml内容为:

  <!-- 父工程 -->
  <groupId>com.wy.studys</groupId>
  <artifactId>Mybatis-Study</artifactId>
  <version>1.0-SNAPSHOT</version>

  <!--导入依赖-->
  <dependencies>
    <!--mybatis-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.6</version>
    </dependency>
    <!--mysql-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.19</version>
    </dependency>

    <!--junit-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13</version>
      <scope>test</scope>
    </dependency>

  </dependencies>

父工程创建完成后,开始创建子项目,流程是创建一个普通的maven项目,项目名称为mybatis-01,则父工程的pom.xml中会自动添加module的信息:

  <modules>
    <module>mybatis-01</module>
  </modules>

子工程里面也会有父工程的信息:

    <parent>
        <artifactId>Mybatis-Study</artifactId>
        <groupId>com.wy.studys</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

 

然后在src-resource里面编写核心配置文件mybatis-config.xml,用于获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)内容为:

<?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.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
  <!--这里需要将mapper文件注册,否则会抛出 配置文件没有注册的异常--> <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
  </mappers> 
</configuration>

接下来就是编写mybatis工具类通过sqlSessionFactory获取sqlSession。

/**
 * 获取sqlSession
 */
public class MybatisUtil {
    public static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            String resource = "mybatis-config.xml";//可以直接获取resource路径下的文件
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //从sqlSessionFactory中获取SqlSession的实例
    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession();
    }
}

 

后面就可以编写代码了。

实体类 省略。

Mapper接口:

public interface UserMapper {
    public List<User> getUserList();
}

接口实现类**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">
<mapper namespace="com.candice.mapper.UserMapper">
    <select id="UserMapper" resultType="com.candice.pojo.User">
        select * from user;
    </select>
</mapper>

 编写测试类:

/**
 * 测试类
 */
public class UserMapperTest {
    @Test
    public void test() {
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> list = mapper.getUserList();
        for (User user : list) {
            System.out.println("user====" + user.toString()

            );
        }

    }
}

启动后可能报的错:

mysql驱动问题:将

com.mysql.jdbc.Driver  改成
com.mysql.cj.jdbc.Driver

mysql的servertimezone问题,在url中指定时区:

<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"/>

找不到mapper.xml文件:

resources目录下的文件路径直接写:
<mapper resource="mapper/UserMapper.xml"/>

代码结构图:

重学Mybatis从入门到源码之二---搭建一个Mybatis项目

 

 


这种配置还是很繁琐的,真实项目中应该都不需要这种配置,等后面再说吧。




上一篇:Velocity.js的使用


下一篇:为什么在sqlSessionFactoryBeanName中要用value注入sqlSessionFactory,而不是ref?