Mybatis第一天java
一、什麼是框架:Framework 模板. 簡化開發的工具。
二、框架學習難度
2.1 應用 =>簡單,編寫代碼簡單。
2.2 理解 =>瞭解框架的開發模式,底層實現,源代碼解讀。
2.3 開發 =>編寫框架,架構師難度。
三、MyBatis框架
3.1 歷史
Apache開源組織的開源框架. iBatis. 版本有1.x和2.x.
2010年,遷移到google code平臺下,改名爲MyBatis,版本爲3.x
2014年,遷移到github平臺下,沿用命名MyBatis,版本爲3.x.
3.2 框架由來
3.2.1 快速開發方式 JSP+Servlet+JavaBean開發方式
免容器啓動,能夠直接影響開發結果的開發方式.
結構不完整,維護成本高昂,可複用能力幾乎爲零.
3.2.2 MVC架構 JSP+Control開發方式
技術:JSP+Servlet+JDBC
優勢:結構清晰. 代碼部分複用
缺點:代碼結構繁瑣, 每次開發有大量重複代碼
重複代碼:處理請求參數(getParameter / getParameterValues / getParameterNames),處理文件上傳(FileItem),處理文件下載(設置響應類型[application/octet-stream],設置響應頭[content-dispositon;attchement;filename=xxxx]),處理AJAX數據返回(java對象->JSON字符串, response.getWriter().print(xxx) response.getWriter().flush())等.
3.2.3 框架開發(Spring+SpringMVC+MyBatis)
struts1,hibernate2.x,spring2.x,struts2,iBatis2.x, MyBatis,SpringMVC…….
優勢:使用框架代替基礎技術,實現針對性開發(只編寫有效的業務代碼,減小或杜絕編寫重複的邏輯代碼). 易於維護,易於升級,擴展
缺點:學習框架技術,XML配置文件大量出現。
四、MyBatis框架簡介
mybatis是ORM框架,也能夠稱爲OXM框架。
MyBatis框架對ORM作了小幅度改動,映射的結果集.不是數據庫表和數據,半封裝的數據訪問層框架。
全部操做都是針對查詢結果集實現的映射機制,就是JDBC中的ResultSet。
優勢:靈活
缺點:自定義SQL語法
4.1 什麼是ORM?
Object Relational Mapping 對象,關係型數據庫映射。
將java中的類和數據庫的表作映射,將java中的對象和數據庫中的行記錄作映射,將java對象中的屬性和數據庫中的字段作映射。
五、Mybatis入門案例(數據庫表user的全局查詢)
1.定義數據庫表格mysql
1 CREATE TABLE `user` ( 2 `userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用戶名ID', 3 `username` varchar(20) DEFAULT NULL COMMENT '用戶姓名', 4 `userage` int(5) DEFAULT NULL COMMENT '用戶年齡', 5 PRIMARY KEY (`userid`) 6 ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
2.提供測試數據
git
3.mybatis的環境的搭建
3.1 資源介紹
mybatis-x.x.x.jar 框架的核心jar包.
mybatis-x.x.x.pdf 官方提供的幫助文檔, 英文版.
lib目錄 MyBatis框架開發須要的依賴jar包.
github
3.2建立簡單的Java工程項目並導入相應的jar
mybatis-3.2.7.jar mybatis核心包
lib/*.jar mybatis全部的依賴包
數據庫驅動包
spring
3.3 提供核心配置文件
爲了提供數據庫訪問基礎信息的配置文件.
數據庫位置(URL), 登陸名(username), 密碼(password), 驅動類名(driver)
模板內容,核心配置文件的頭信息從官方幫助文檔中摘取.sql
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 7 </configuration>
導入離線dtd文件:mybatis-3-config.dtd(提示相應的根標籤,快捷開發)
數據庫
核心配置文件詳情apache
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <!-- 配置數據庫環境 --> 7 <environments default="development"> 8 <environment id="development"> 9 <!-- 配置Mybatis中的事物管理器 10 JDBC:使用jdbc的事物來處理 11 MANAGED:不作任何事物處理 12 --> 13 <transactionManager type="JDBC" /> 14 <!--數據庫鏈接信息 15 type: 16 UNPOOLED:直連 17 POOLED:池連 18 JNDI:使用容器的池連。須要依賴jndi獲取鏈接對象 19 --> 20 <dataSource type="UNPOOLED"> 21 <!-- 配置鏈接的具體參數 --> 22 <property name="driver" value="com.mysql.jdbc.Driver" /> 23 <property name="url" value="jdbc:mysql://localhost:3306/mybatis" /> 24 <property name="username" value="root" /> 25 <property name="password" value="123456" /> 26 </dataSource> 27 </environment> 28 </environments> 29 <!-- 引用映射配置文件 --> 30 <mappers> 31 <!-- resource:相對路徑查詢資源的屬性,至關於當前核心配置文件的位置開始查找 --> 32 <mapper resource="com/boom/pojo/User.xml"/> 33 </mappers> 34 </configuration>
3.4 編寫pojo實體類和建立mapper配置映射文件session
1 package com.boom.pojo; 2 3 import java.io.Serializable; 4 5 /** 6 * 實體對應的數據庫表 7 * @project_name mybatis-01 8 * @class_name User 9 * @author Dilraba 10 */ 11 public class User implements Serializable { 12 13 private Integer userid;//用戶名ID 14 private String username;//用戶姓名 15 private Integer userage;//用戶年齡 16 17 public Integer getUserid() { 18 return userid; 19 } 20 public void setUserid(Integer userid) { 21 this.userid = userid; 22 } 23 public String getUsername() { 24 return username; 25 } 26 public void setUsername(String username) { 27 this.username = username; 28 } 29 public Integer getUserage() { 30 return userage; 31 } 32 public void setUserage(Integer userage) { 33 this.userage = userage; 34 } 35 public User(Integer userid, String username, Integer userage) { 36 super(); 37 this.userid = userid; 38 this.username = username; 39 this.userage = userage; 40 } 41 42 public User() { 43 super(); 44 } 45 46 @Override 47 public String toString() { 48 return "User [userid=" + userid + ", username=" + username + ", userage=" + userage + "]"; 49 } 50 51 }
mapper映射配置文件的頭信息mybatis
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <mapper> 6 7 </mapper>
mapper配置信息的詳情(簡單的SQL語句的編寫)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <mapper namespace="suibian"> 6 <select id="selectUserAll" resultType="com.boom.pojo.User"> 7 select * from user; 8 </select> 9 </mapper>
3.5 MyBatis工廠工具類 MyBatisUtils
1 package com.boom.util; 2 3 import java.io.InputStream; 4 5 import org.apache.ibatis.io.Resources; 6 import org.apache.ibatis.session.SqlSession; 7 import org.apache.ibatis.session.SqlSessionFactory; 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 9 10 public class MybatisUtil { 11 private static SqlSessionFactory factory = null; 12 static{ 13 try { 14 if(factory == null){ 15 //經過工具類加載配置文件,返回讀取配置文件的IO流 16 InputStream is = Resources.getResourceAsStream("suibian.xml"); 17 //SqlSessionFactoryBuilder建立SqlSessionFactory對象的構建器 18 factory = new SqlSessionFactoryBuilder().build(is); 19 } 20 } catch (Exception e) { 21 e.printStackTrace(); 22 } 23 } 24 //獲取mybatis上下文對象 25 public static SqlSessionFactory getSqlSessionFactory(){ 26 return factory; 27 } 28 //獲取SqlSession 29 public static SqlSession openSession(){ 30 return factory.openSession(); 31 } 32 }
3.6 定義DAO層的接口和接口的實現類
1 package com.boom.dao; 2 3 import java.util.List; 4 5 import com.boom.pojo.User; 6 7 public interface IUserDao { 8 //查詢user表全部的數據 9 List<User> selectUserAll(); 10 11 }
1 package com.boom.dao.impl; 2 3 import java.util.List; 4 5 import org.apache.ibatis.session.SqlSession; 6 7 import com.boom.dao.IUserDao; 8 import com.boom.pojo.User; 9 import com.boom.util.MybatisUtil; 10 11 public class UserDaoImpl implements IUserDao { 12 13 /** 14 * 查詢user表全部的數據 15 */ 16 @Override 17 public List<User> selectUserAll() { 18 SqlSession session = MybatisUtil.openSession(); 19 return session.selectList("selectUserAll"); 20 } 21 22 }
3.7 編寫測試類測試代碼
1 package com.boom.test; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.List; 6 7 import org.apache.ibatis.io.Resources; 8 import org.apache.ibatis.session.SqlSession; 9 import org.apache.ibatis.session.SqlSessionFactory; 10 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 11 12 import com.boom.dao.IUserDao; 13 import com.boom.dao.impl.UserDaoImpl; 14 import com.boom.pojo.User; 15 16 public class MybatisTest { 17 18 public static void main(String[] args) { 19 20 /* 21 //1.指定配置文件的名稱與路徑 22 String resource = "suibian.xml"; 23 try { 24 //2.經過工具類加載配置文件,返回讀取配置文件的IO流 25 InputStream is = Resources.getResourceAsStream(resource); 26 //3 1.SqlSessionFactoryBuilder建立SqlSessionFactory對象的構建器 27 // 2.SqlSessionFactory:mybatis上下文對象, 28 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); 29 SqlSession session = factory.openSession(); 30 List<User> list = session.selectList("selectUserAll"); 31 for (User user : list) { 32 System.out.println(user); 33 } 34 } catch (IOException e) { 35 e.printStackTrace(); 36 } 37 */ 38 39 IUserDao ud = new UserDaoImpl(); 40 List<User> list = ud.selectUserAll(); 41 for (User user : list) { 42 System.out.println(user); 43 } 44 } 45 46 }
測試結果
查詢單條數據mapper寫法:
1 <select id="selectById" parameterType="int" resultType="com.boom.pojo.User"> 2 select * from user where userid = #{userid} 3 </select>
dao接口和實現類
1 //根據id查詢數據 2 User selectById(Integer userid);
1 /** 2 * 根據id查詢數據 3 */ 4 @Override 5 public User selectById(Integer userid) { 6 SqlSession session = MybatisUtil.openSession(); 7 return session.selectOne("selectById", userid); 8 }
測試類及結果:
1 //根據id查詢數據 2 IUserDao ud = new UserDaoImpl(); 3 User selectById = ud.selectById(new Integer(1)); 4 System.out.println(selectById);
四、MyBatis框架中的經常使用查詢方法
selectList
查詢多數據的方法.
方法定義: <T> List<T> selectList(String statement);
參數:statement - 映射文件中SQL語法對應的標籤的ID屬性值.
返回值:查詢結果
有查詢結果,返回對應長度的集合.
無查詢結果,返回長度爲0的集合對象.
selectOne
查詢單一數據的方法.
方法定義:<T> T selectOne(String statement);
參數:statement - 映射文件中SQL語法對應標籤的ID
返回值:查詢結果
無查詢結果,返回null
惟一查詢結果,返回對象
多查詢結果數據,拋出異常.
五、初試查詢結果的映射
MyBatis的映射是針對ResultSet實現的映射關係.
MyBatis(全部的數據訪問層框架)底層使用的技術都是JDBC.
能夠經過分析ResultSet內容數據,實現映射.
MyBatis框架的默認映射規則是:
根據ResultSet中的字段名做爲標準, 查詢resultType類型中的property,或field,作數據的設置.
MyBatis忽略property/field的字母大小寫.