目錄
- MyBatis
- 第一章:框架的概述
- 1. MyBatis框架的概述
- 第二章:MyBatis的入門程序
- 1. 創建數據庫和表結構
- 2. MyBatis的入門步驟
MyBatis
第一章:框架的概述
1. MyBatis框架的概述
- MyBatis是一個優秀的基于Java的持久層框架,內部對JDBC做了封裝,使開發者只需要關注SQL語句,而不用關注JDBC的代碼,使開發變得更加的簡單。
- MyBatis通過XML或者注解的方式將要執行的各種Statement對象配置起來,通過Java對象和statement中SQL的動態參數進行映射,并最終執行SQL語句。執行SQL后,最終將結果已Java對象返回。
- 采用了ORM的思想。
第二章:MyBatis的入門程序
1. 創建數據庫和表結構
create database mybatis_db;
use mybatis_db;CREATE TABLE `user` (`id` int(11) NOT NULL auto_increment,`username` varchar(32) NOT NULL COMMENT '用戶名稱',`birthday` datetime default NULL COMMENT '生日',`sex` char(1) default NULL COMMENT '性別',`address` varchar(256) default NULL COMMENT '地址',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (1,'老王','2018-02-27 17:47:08','男','北京'),(2,'熊大','2018-03-02 15:09:37','女','上海'),(3,'熊二','2018-03-04 11:34:34','女','深圳'),(4,'光頭強','2018-03-04 12:04:06','男','廣州');
2. MyBatis的入門步驟
-
創建maven的項目,創建Java工程即可。
-
引入坐標
-
引入MyBatis的3.4.5的版本的坐標
-
引入MySQL驅動的jar包,5.1.6版本
-
引入Junit單元測試的jar包
-
引入log4j的jar包,1.2.12版本(需要引入log4j.properties的配置文件)
<dependencies><!--mybatis核心包--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!--mysql驅動包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><!-- 單元測試 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency><!-- 日志 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies>
-
-
編寫User的實現類,屬性盡量使用包裝類型,具體的代碼如下
package cn.tx.domain;import java.io.Serializable; import java.util.Date;/***** */ public class User implements Serializable{private static final long serialVersionUID = 525400707336671154L;private Integer id;private String username;private Date birthday;private String sex;private String address;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", birthday=" + birthday +", sex='" + sex + '\'' +", address='" + address + '\'' +'}';} }
-
編寫UserMapper的接口和方法(就是咱們以前的UserDao接口)
package cn.tx.mapper;import java.util.List; import cn.tx.domain.User;public interface UserMapper {/*** 查詢所有的用戶* @return*/public List<User> findAll();}
-
在resources目錄下,創建mapper文件夾。編寫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.qcbyjy.mapper.UserMapper"><select id="findAll" resultType="com.qcbyjy.domain.User">select * from user;</select> </mapper>
- mapper namespace=“com.qcbyjy.mapper.UserMapper”,叫名稱空間,表明以后查找UserMapper接口中的findAll的方法。
- select id="findAll"中的id屬性編寫的UserMapper接口中的方法的名稱,固定的。
- resultType="com.qcbyjy.domain.User"表明的是findAll方法的返回值類型。
-
編寫主配置文件,在resources目錄下創建SqlMapConfig.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="mysql"><!-- 配置具體的環境 --><environment id="mysql"><!-- 配置事務管理類型 --><transactionManager type="JDBC"/><!-- 配置是否需要使用連接池,POOLED使用,UNPOOLED不使用 --><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql:///mybatis_db"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!-- 加載映射的配置文件 --><mappers><mapper resource="mappers/UserMapper.xml"/></mappers> </configuration>
1.配置環境(environments)
default=“mysql”:指定默認使用的數據庫環境。
子標簽 定義了名為 mysql 的環境。
transactionManager type=“JDBC”:聲明使用 JDBC 事務管理方式。
配置數據源,類型為連接池(POOLED)。
包括數據庫驅動類、連接 URL、用戶名和密碼。
2.加載映射文件(mappers)
:加載位于 resources/mappers/ 目錄下的 UserMapper.xml 文件,定義 SQL 語句和接口映射關系
-
編寫入門程序
1.加載配置文件
使用 MyBatis 提供的 Resources 工具類加載 SqlMapConfig.xml。
2.構建 SqlSessionFactory
通過 SqlSessionFactoryBuilder 構建 SqlSessionFactory 工廠,用于創建 SqlSession。
3.獲取 SqlSession
調用 openSession() 方法創建 SqlSession,用于執行 SQL 語句。
4.調用 Mapper 接口
使用 getMapper(UserMapper.class) 獲取 UserMapper 接口的動態代理對象。
調用 findAll() 方法執行 SQL 查詢。
5.輸出結果
遍歷查詢結果,打印用戶信息。
6.釋放資源
關閉 SqlSession 和 InputStream,避免資源泄漏。
package cn.tx.test;import java.io.InputStream; import java.util.List;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 cn.tx.domain.User; import cn.tx.mapper.UserMapper;public class UserTest {/*** 測試查詢所有的方法* @throws Exception */@Testpublic void testFindAll() throws Exception {// 加載主配置文件,目的是構建SqlSessionFactory的對象InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");// 創建SqlSessionFactory對象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);// 使用SqlSessionFactory工廠對象創建SqlSession對象SqlSession session = factory.openSession();// 通過session創建UserMapper接口的代理對象UserMapper mapper = session.getMapper(UserMapper.class);// 調用查詢所有的方法List<User> list = mapper.findAll();// 遍歷集合for (User user : list) {System.out.println(user);}// 釋放資源session.close();in.close();}@Testpublic void run2() throws Exception {// 加載配置文件InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");// 構建SqlSessionFactory對象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);// 獲取到session對象SqlSession session = factory.openSession();// 查詢所有的數據List<User> list = session.selectList("com.qcbyjy.mapper.UserMapper.findAll");// 變量集合for (User user : list) {System.out.println(user);}// 關閉資源session.close();inputStream.close();} }