mybatis-01

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>
mybatis.xml

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 }
user-pojo

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>
user.xml

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 }
MybatisUtil

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 }
MybatisTest

測試結果

 查詢單條數據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的字母大小寫.

相關文章
相關標籤/搜索