用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"></package>
    </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.mybatis.mapper.PersonMapper">
    <resultMap id="BaseResultMap" type="com.mybatis.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文件没有注册 就是找不到mapper.xml

两种解决方法:

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

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

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

 

7.在resources文件夹下添加日志的配置文件

log4j.properties:

# Global logging configuration\uff0c\u5efa\u8bae\u5f00\u53d1\u73af\u5883\u4e2d\u8981\u7528debug
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

 

8.测试

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();
    }

执行结果:

 

 

 

posted @ 2019-12-04 01:13  孤飞鸟  阅读(3590)  评论(1编辑  收藏  举报