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

執行結果:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM