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(); }
執行結果: