1.1 需求
- 通過(二)在全局配置文件 mybatis-configuration.xml 通過 <mappers> 標簽來加載映射文件,那么如果我們項目足夠大,有很多映射文件呢,難道我們每一個映射文件都這樣加載嗎,這樣肯定是不行的,那么我們就需要使用 mapper 接口來加載映射文件
- 以前的做法:
- 改進做法:使用 mapper 接口來加載映射文件
1.2.2 引包
- 本例中使用maven構造項目,所以只需配置依賴即可引相應的包。
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.shyrolk</groupId> <artifactId>firstMybatis</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>firstMybatis</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.4</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.6</version> </dependency> </dependencies> </project>
1.2 編寫mybatis總配置文件mybatis-config.xml
<?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/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC" /> <property name="username" value="root" /> <property name="password" value="" /> </dataSource> </environment> </environments> </configuration>
1.3 創建數據庫和實體
1.3.1 創建數據庫
1.3.2 創建實體對象
package com.shyroke.entity; public class User { private int id; private String userName; private String passWord; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassWord() { return passWord; } public void setPassWord(String passWord) { this.passWord = passWord; } @Override public String toString() { return "User [id=" + id + ", userName=" + userName + ", passWord=" + passWord + "]"; } }
1.4 定義UserMapper.java接口
-
在myabtis中的mapper接口相當於dao層,調用mapper接口的方法即可實現對數據庫的增刪改查操作。
package com.shyroke.mapper; import org.apache.ibatis.annotations.Param; import com.shyroke.entity.User; public interface UserMapper { public User findUserById(@Param("id")int id); }
1.5 編寫UserMapper.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.shyroke.mapper.UserMapper"> <!-- 根據 id 查詢 user 表中的數據 id:唯一標識符,此文件中的id值不能重復 resultType:返回值類型,一條數據庫記錄也就對應實體類的一個對象 parameterType:參數類型,也就是查詢條件的類型 --> <select id="findUserById" resultType="com.shyroke.entity.User" parameterType="int"> <!-- 這里和普通的sql 查詢語句差不多,后面的 #{id}表示占位符,里面不一定要寫id,寫啥都可以,但是不要空着 --> select * from user where id = #{id} </select> </mapper>
- <select>標簽表示這是一條查詢sql,id必須和UserMapper.java接口中的方法一致,這樣當我們調用UserMapper.java接口中的方法時,通過namespace="com.shyroke.mapper.UserMapper" 將接口和配置文件聯系在了一起。
-
UserMapper.xml和UserMapper.java兩個文件的文件名要一致且要處於同一個目錄。
1.6 加載UserMapper接口
- 在mybatis的總配置文件mybatis-config.xml中添加
<mappers> <mapper class="com.shyroke.mapper.UserMapper"/> </mappers>
1.7 測試
package com.shyrolk.firstMybatis; import java.awt.image.ImageProducer; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.shyroke.entity.User; import com.shyroke.mapper.UserMapper; /** * Hello world! * */ public class App { public static void main( String[] args ) { InputStream inputStream=App.class.getClassLoader().getResourceAsStream("resource/mybatis-config.xml"); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession=sqlSessionFactory.openSession(); UserMapper userMapper=sqlSession.getMapper(UserMapper.class); User user= userMapper.findUserById(1); System.out.println(user); sqlSession.close(); } }
結果:
1.8 注意
- UserMapper 接口必須要和 UserMapper.xml 文件同名且在同一個包下,也就是說 UserMapper.xml 文件中的namespace是UserMapper接口的全類名
- UserMapper接口中的方法名和 UserMapper.xml 文件中定義的 id 一致
- UserMapper接口輸入參數類型要和 UserMapper.xml 中定義的 parameterType 一致
- UserMapper接口返回數據類型要和 UserMapper.xml 中定義的 resultType 一致