用maven简单的使用MyBatis 以及 扫描的mapper.xml的问题

1.首先创建一个maven项目

  在pom文件中导入相关的依赖:

<dependencies>
<!--mybatis的依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>

<!--连接mysql的依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>

<!--打印日志的依赖-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>

<!-- Maven中默认打包 resource下的资源文件。如果我们的mapper.xml文件不放在resource的目录下,则需要通过配置告知 Maven 让它把指定目录的配置文件也打包 -->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>

2.在java目录下创建自己的包 用于存放创建实体类

public class Person implements Serializable {
    private Integer id;
    private String name;
    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

3.在数据库中创建表

4.在resources中添加MyBatis的主配置文件:

<?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>

    <!-- 设定类型的别名 -->
    <typeAliases>
<!-- 自定义别名 --> <!-- <typeAlias type="com.offcn.bean.Person" alias="per" --> <!-- 扫描形式 扫描包下所有的bean类型java代码 在mapper.xml中使用当前类型的时候,我们只需要使用当前类型类名或者是类名首字母小写形式 --> <package name="com.offcn.bean"/> </typeAliases>
<!-- mybatis使用环境 --> <environments default="development"> <environment id="development"> <!-- 自动开启事务 --> <transactionManager type="JDBC" /> <!-- 数据源 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" />

          <!--如果是sql8.0以上的版本可能需要指定时区--> <property name="url" value="jdbc:mysql:///mytest"/>
<property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!-- 扫描mapper.xml配置文件和接口 --> <mappers>

      <!-- 自定义配置文件 -->
      <!-- <mapper resource="com/mybatis/mapper/UserMapper.xml"/> -->
      <!-- 扫描方式加载 -->
      <package name="com.mybatis.mapper">

    </mappers>

</configuration>

5.在java目录下创建包 用于存放mapper.xml对应的接口

public interface PersonMapper {

   public List<Person> getPersonAll();

}

6.添加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.offcn.mapper.PersonMapper">
    <resultMap id="BaseResultMap" type="com.offcn.bean.Person">
        <id property="id" column="id"></id>
        <result property="name" column="name"></result>
        <result property="age" column="age"></result>
    </resultMap>
  <!--id和接口的方法名必须相同--> <select id="getPersonAll" resultMap="BaseResultMap"> select * from person </select> </mapper>

需要注意的是:如果使用扫描的方式去扫描mapper.xml的配置文件  mapper.xml配置文件应和对应的接口应在同一个目录下,不然会报错,提示找不到这个mapper.xml文件

两种解决方法:

(1)因为我们在pom文件中添加了让maven将 src/main/java 下的配置文件参与打包(pom文件中,我打红色字体的下面的便签内容) 所以我们的mapper.xml可以直接放在java目录下和接口的同一个包下.

(2)或者是在resource目录下建立和 java 目录下放接口的包的相同目录结构 在相同的目录下放mapper.xml.

这样接口和mapper.xml在打包时就会存放在同一目录下 我们运行时可以看target目录,看看配置文件和编译的接口文件是否在同一目录下

 7.测试

public static void main(String[] args) throws IOException {
        //用字符串存储配置文件的路径
        String config = "mybatisconfig.xml";
        //将配置文件通过流读取到内存中
        InputStream resourceAsStream = Resources.getResourceAsStream(config);
        //通过工厂构建者构建一个SqlSessionFactory (sql会话工厂)
        SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //通过工厂 进行会话
        SqlSession session = sf.openSession();
        // session获取接口的字节码文件,构建一个代理对象
        PersonMapper personMapper = session.getMapper(PersonMapper.class);
        // 通过代理对象调用方法 执行SQL语句 对数据的操作
        List<Person> personAll = personMapper.getPersonAll();
        System.out.println(personAll);
        //提交
        session.commit();
        //关闭会话
        session.close();
    }

执行结果:

猜你喜欢

转载自www.cnblogs.com/lzpsir/p/11980547.html