十年河東,十年河西,莫欺少年窮
學無止境,精益求精
MyBatis工作原理如下
0、現在MySQl數據庫 搞個庫並增加一張表,如下:
create database mybatis go use mybatis go CREATE TABLE users ( uid INT PRIMARY KEY, uname VARCHAR ( 20 ), uage INT NOT NULL ) go insert into users(uid,uname,uage) values(1,'jack',22) go insert into users(uid,uname,uage) values(2,'msis',22) go
1、新建java maven項目
2、編輯Mybatis核心配置文件
<?xml version="1.0" encoding="UTF-8"?> <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.one5a</groupId> <artifactId>Test</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.11</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </project>
添加了三個依賴,分別爲MySQL、myBatis核心庫,junit單元測試
3、resources中新增數據庫屬性文件db.properties及myBatis配置文件mybatis-config.xml
db.properties 主要用於存儲數據庫配置信息,如下:
driver = com.mysql.cj.jdbc.Driver url = jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC username = root password = chen1234
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> <!--引入外部配置文件 --> <properties resource="db.properties"/> <settings> <!--開啓全局緩存 默認true--> <setting name="cacheEnabled" value="true"/> <!--開啓全局懶加載 默認false--> <setting name="lazyLoadingEnabled" value="true"/> <!--開啓關聯屬性懶加載 默認false--> <setting name="aggressiveLazyLoading" value="true"/> <!--全局開啓駝峯映射--> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 註冊UserMapper.xml --> <mappers> <mapper resource="Mapper/UserMapper.xml"/> </mappers> </configuration>
由於mybatis-config.xml 中引入了用戶配置文件 Mapper/UserMapper.xml,需要創建UserMapper.xml
resources中新增目錄Mapper,Mapper目錄下創建UserMapper.xml
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"> <!--namespace=綁定一個指定的Dao/Mapper接口--> <mapper namespace="com.one5a.model.User"> <select id="getUserList" resultType="com.one5a.model.User"> select * from users </select> <select id="getUserbyId" resultType="com.one5a.model.User" parameterType="int"> select * from users where uid=#{id} </select> </mapper>
4、在main/java新建包 com.one5a.model並新增User類
package com.one5a.model; public class User { private int uid; public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } private String uname; public int getUage() { return uage; } public void setUage(int uage) { this.uage = uage; } private int uage; @Override public String toString() { return "User{" + "uid=" + uid + ", uname='" + uname + '\'' + ", uage=" + uage + '}'; } }
注意包名稱及Java類應該和UserMapper.XML中定義的一致,分別爲: com.one5a.model 、User
package com.one5a.model; public class User { private int uid; public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } private String uname; public int getUage() { return uage; } public void setUage(int uage) { this.uage = uage; } private int uage; @Override public String toString() { return "User{" + "uid=" + uid + ", uname='" + uname + '\'' + ", uage=" + uage + '}'; } }
5、書寫測試類
創建測試類 UnityTest
package com.one5a.test; import com.one5a.model.User; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.List; public class UnityTest { @Test public void getUserList() throws IOException { String resource = "mybatis-config.xml"; //使用類加載器加載mybatis的配置文件(它也加載關聯的映射文件) //InputStream is = Resources.getResourceAsStream(resource); //InputStream is = Tests.class.getClassLoader().getResourceAsStream(resource); InputStream is = Resources.getResourceAsStream(resource); //構建sqlSession的工廠 線程安全 建議使用單列模式 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); //絕對不能將它作爲靜態對象使用,不可共享 SqlSession session = sessionFactory.openSession(); /** * 映射sql的標識字符串, * com.oumyye.mapping.UserMapping是userMapper.xml文件中mapper標籤的namespace屬性的值, * getUser是select標籤的id屬性值,通過select標籤的id屬性值就可以找到要執行的SQL */ String statement = "com.one5a.model.User.getUserList";//映射sql的標識字符串 //執行查詢返回一個唯一user對象的sql List<User> user = session.selectList(statement); for (int i = 0; i < user.size(); i++) { System.out.println(user.toString()); } } @Test public void getUserbyId() throws IOException { String resource = "mybatis-config.xml"; //使用類加載器加載mybatis的配置文件(它也加載關聯的映射文件) //InputStream is = Resources.getResourceAsStream(resource); //InputStream is = Tests.class.getClassLoader().getResourceAsStream(resource); InputStream is =Resources.getResourceAsStream(resource); //構建sqlSession的工廠 線程安全 建議使用單列模式 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); //絕對不能將它作爲靜態對象使用,不可共享 SqlSession session = sessionFactory.openSession(); /** * 映射sql的標識字符串, * com.oumyye.mapping.UserMapping是userMapper.xml文件中mapper標籤的namespace屬性的值, * getUser是select標籤的id屬性值,通過select標籤的id屬性值就可以找到要執行的SQL */ String statement = "com.one5a.model.User.getUserbyId";//映射sql的標識字符串 //執行查詢返回一個唯一user對象的sql User user = session.selectOne(statement,1); System.out.println(user); } }
6、測試結果
入門程序,不看也罷
@天才臥龍的博科人