日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

MyBatis学习总结一

發(fā)布時(shí)間:2025/3/15 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis学习总结一 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Mybatis學(xué)習(xí)總結(jié)一

  • 1、Mybatis介紹
  • 2、Mybatis架構(gòu)圖
    • 2.1、架構(gòu)圖的意義
      • 2.1.1、JDBC編寫(xiě)
      • 2.1.2、反思問(wèn)題
    • 2.2、Mybatis架構(gòu)圖
  • 3、入門(mén)案例
    • 3.1、下載地址以及導(dǎo)入jar包
    • 3.2、工程目錄
    • 3.3、創(chuàng)建PO類(lèi)
    • 3.4、創(chuàng)建全局配置文件
    • 3.5、創(chuàng)建映射文件
    • 3.6、在全局配置文件中加載映射文件
    • 3.7、測(cè)試
    • 3.8、實(shí)驗(yàn)結(jié)果
  • 4、Mybatis開(kāi)發(fā)的兩種方式
    • 4.0、映射文件User.xml詳解
      • 4.0.1、mapper元素
      • 4.0.2、CRUD元素
      • 4.0.3、CRUD元素常用屬性
      • 4.0.4、#{id}與${id}的區(qū)別
    • 4.1、dao類(lèi)實(shí)現(xiàn)CRUD
      • 4.1.0、工程目錄
      • 4.1.1、UserDao
      • 4.1.2、UserDaoImp
      • 4.1.3、User.xml
      • 4.1.3、測(cè)試Dao的CRUD
      • 4.1.4、測(cè)試結(jié)果
      • 4.1.5、log4j.properties導(dǎo)入及其測(cè)試結(jié)果
        • 4.1.5.1、創(chuàng)建log4j.properties
        • 4.1.5.1、編寫(xiě)log4j.properties
        • 4.1.5.1、測(cè)試
      • 4.1.4、編寫(xiě)Dao類(lèi)的問(wèn)題
    • 4.2、使用動(dòng)態(tài)代理mapper實(shí)現(xiàn)CRUD
      • 4.2.0、Mapper代理的開(kāi)發(fā)規(guī)范
      • 4.2.1、開(kāi)發(fā)目錄
      • 4.2.2、創(chuàng)建UserDao
      • 4.2.3、配置mapper映射文件
      • 4.2.4、測(cè)試
      • 4.2.5、測(cè)試結(jié)果
  • 5、全局配置文件詳解
    • 5.1、properties元素
    • 5.2、settings
    • 5.3、typeAliases
      • 5.3.1、Mybatis支持的別名
      • 5.3.2、自定義別名
    • 5.4、mappers
  • 6、輸入映射與輸出映射
    • 6.1、輸入映射與簡(jiǎn)單類(lèi)型輸出映射
      • 6.1.1、簡(jiǎn)單類(lèi)型輸入
        • 映射文件
        • UserDao接口
        • 測(cè)試方法
        • 實(shí)驗(yàn)結(jié)果
      • 6.1.2、POJO類(lèi)型輸入
        • 映射文件
        • UserDao接口
        • 測(cè)試方法
        • 實(shí)驗(yàn)結(jié)果
      • 6.1.3、POJO類(lèi)型嵌套POPJ類(lèi)型的輸入映射
        • User
        • UserVo
        • 映射文件
        • UserDao接口
        • 測(cè)試方法
        • 實(shí)驗(yàn)結(jié)果
      • 6.1.4、Map類(lèi)型的輸入映射
        • 映射文件
        • UserDao接口
        • 測(cè)試
        • 測(cè)試結(jié)果
    • 6.2、簡(jiǎn)單類(lèi)型輸入映射與輸出映射
      • 6.2.1、resultMap屬性
        • 映射文件
        • UserDao接口
        • 測(cè)試
        • 測(cè)試結(jié)果
      • 復(fù)雜輸入類(lèi)型與復(fù)雜輸出類(lèi)型的一個(gè)例子
        • UserVo類(lèi)
        • UserDao接口
        • 映射文件
        • 測(cè)試
        • 測(cè)試結(jié)果
  • 7、動(dòng)態(tài)sql
    • 7.1、動(dòng)態(tài)sql介紹
    • 7.2、If標(biāo)簽/where標(biāo)簽
      • 映射文件
      • UserDao接口
      • 測(cè)試
      • 測(cè)試結(jié)果
    • 7.3、sql片段
        • 映射文件
    • 7.4、sql片段
    • 參考

1、Mybatis介紹

Mybatis是一個(gè)類(lèi)似于Hibernate的ORM持久化框架,支持普通SQL查詢(xún),存儲(chǔ)過(guò)程以及高級(jí)映射。Mybatis通過(guò)使用簡(jiǎn)單的XML或注解用于配置和原始映射,將接口和POJO對(duì)象映射成數(shù)據(jù)庫(kù)中的記錄。

Hibernate是一個(gè)完全的ORM框架,而Mybatis是一個(gè)不完全的orm框架。Mybatis讓程序員只關(guān)注sql本身,而不需要去關(guān)注如連接的創(chuàng)建、statement的創(chuàng)建等操作。Mybatis會(huì)將輸入?yún)?shù)、輸出結(jié)果進(jìn)行映射。

由于Mybatis是直接基于JDBC做了簡(jiǎn)單的映射包裝,所有從性能角度來(lái)看:JDBC > Mybatis > Hibernate。


2、Mybatis架構(gòu)圖

下圖來(lái)自于這里!

2.1、架構(gòu)圖的意義

2.1.1、JDBC編寫(xiě)

package com.csa.jdbc;import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import org.junit.jupiter.api.Test;public class App {@Testpublic void app() throws Exception {// 加載驅(qū)動(dòng)Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://127.0.0.1:3306/mybatis";String user = "root";String password = "3306";Connection connection = null;PreparedStatement statement = null;ResultSet resultSet = null;try {// 創(chuàng)建數(shù)據(jù)庫(kù)連接connection = DriverManager.getConnection(url, user, password);// 創(chuàng)建Statement對(duì)象String sql = "SELECT * FROM user WHERE username = ?";statement = connection.prepareStatement(sql);// 設(shè)置參數(shù),下標(biāo)從1開(kāi)始statement.setString(1, "rose");// 執(zhí)行sql,變量結(jié)果集resultSet = statement.executeQuery();while (resultSet.next()) {System.out.println("id: " + resultSet.getInt("id"));System.out.println("name: " + resultSet.getString("username"));System.out.println("age: " + resultSet.getString("age"));}} finally {// 釋放資源if (null != resultSet) {resultSet.close();}if (null != statement) {statement.close();}if (null != connection) {connection.close();}}} }

2.1.2、反思問(wèn)題

JDBC這種固定的東西,完全可以用框架加以實(shí)現(xiàn)。因?yàn)榫帉?xiě)的內(nèi)容都是一樣的!

差不多有以下幾個(gè)問(wèn)題:

  • 在創(chuàng)建連接時(shí),存在硬編碼
  • 在執(zhí)行statement時(shí)存在硬編碼
  • 頻繁的開(kāi)啟和關(guān)閉數(shù)據(jù)庫(kù)連接,會(huì)造成數(shù)據(jù)庫(kù)性能下降
  • 解決方案:配置xml文件來(lái)解決這些問(wèn)題,使得管理起來(lái)方便、高效!

    2.2、Mybatis架構(gòu)圖

    下圖來(lái)自于這里!


    3、入門(mén)案例

    3.1、下載地址以及導(dǎo)入jar包

    Mybatis下載地址

    別忘記連接數(shù)據(jù)庫(kù)的jar!

    3.2、工程目錄

    3.3、創(chuàng)建PO類(lèi)

    package com.csa.po;public class User {private Integer id;private String username;private Integer age;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 Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "User [id=" + id + ", username=" + username + ", age=" + age + "]";} }

    3.4、創(chuàng)建全局配置文件

    編寫(xiě)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><!-- 引入外部文件 --><properties resource="jdbc.properties"></properties><!-- 環(huán)境 --><environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment></environments><!-- 加載UserMapper.xml文件 <mappers><mapper resource="User.xml"/></mappers>--> </configuration>

    3.5、創(chuàng)建映射文件

    編寫(xiě)User.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="app"><select id="findUserById" parameterType="int" resultType="com.csa.po.User">select * from User where id = #{id}</select> </mapper>

    3.6、在全局配置文件中加載映射文件

    重新編寫(xiě)SqlMapConfig.xml(在最后添加一個(gè)mappers):

    <configuration>.........<environments ...>...</environments><!-- 加載UserMapper.xml文件 --><mappers><mapper resource="User.xml"/></mappers> </configuration>

    3.7、測(cè)試

    package com.csa.app;import java.io.InputStream;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 com.csa.po.User;public class App {public static void main(String[] args) throws Exception {// 讀取全局配置文件String resource = "SqlMapConfig.xml";InputStream input = Resources.getResourceAsStream(resource);// 創(chuàng)建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);// 創(chuàng)建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 調(diào)用SqlSession的增刪改查的方法User user = sqlSession.selectOne("app.findUserById",1);// 打印userSystem.out.println(user);// 關(guān)閉資源sqlSession.close();} }

    3.8、實(shí)驗(yàn)結(jié)果


    4、Mybatis開(kāi)發(fā)的兩種方式

    4.0、映射文件User.xml詳解

    4.0.1、mapper元素

    <mapper namespace="app">...</mapper>其中namespace是命名空間。

    4.0.2、CRUD元素

    分別是select、insert、update、delete元素。

    例如:

    <select id="findUserById" parameterType="int" resultType="com.csa.po.User">select *from User where id = #{id} </select>

    4.0.3、CRUD元素常用屬性

    CRUD元素的幾個(gè)常用屬性:

  • id:唯一,用于被程序調(diào)用
  • parameterType:參數(shù)類(lèi)型,POJO類(lèi)型或者基本數(shù)據(jù)類(lèi)型
  • parameterMap:參數(shù)類(lèi)型,一個(gè)Map集合
  • resultType:結(jié)果類(lèi)型,POJO類(lèi)型或者基本數(shù)據(jù)類(lèi)型
  • resultMap:結(jié)果類(lèi)型,一個(gè)Map集合
  • 4.0.4、#{id}與${id}的區(qū)別

    #{id}是占位符,安全

    ${id}是用于字符串連接的,不安全,會(huì)被sql注入。

    4.1、dao類(lèi)實(shí)現(xiàn)CRUD

    4.1.0、工程目錄

    4.1.1、UserDao

    package com.csa.dao;import java.util.List; import com.csa.po.User;public interface UserDao {/*** 添加用戶(hù) * @return 是否添加成功*/public boolean addUser(User user);/*** 刪除指定id的用戶(hù)* @param id */public boolean deleteUserById(Integer id);/*** 更新用戶(hù)信息* @param user*/public boolean updateUser(User user);/*** 通過(guò)id查找用戶(hù)* @param id* @return*/public User findUserById(Integer id);/*** 查找所有用戶(hù)* @return*/public List<User> selectUserList(); }

    4.1.2、UserDaoImp

    package com.csa.dao.imp;import java.util.List;import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory;import com.csa.dao.UserDao; import com.csa.po.User;public class UserDaoImp implements UserDao {// DI依賴(lài)注入private SqlSessionFactory sqlSessionFactory;public UserDaoImp(SqlSessionFactory sqlSessionFactory) {this.sqlSessionFactory = sqlSessionFactory;}@Overridepublic boolean addUser(User user) {// 創(chuàng)建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 調(diào)用SqlSession的增刪改查的方法int insert = sqlSession.insert("app.addUser", user);// 提交事務(wù)sqlSession.commit();// 關(guān)閉資源sqlSession.close();return insert != 0;}@Overridepublic boolean deleteUserById(Integer id) {// 創(chuàng)建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 調(diào)用SqlSession的增刪改查的方法int delete = sqlSession.delete("app.deleteUserById", id);// 提交事務(wù)sqlSession.commit();// 關(guān)閉資源sqlSession.close();return delete != 0;}@Overridepublic boolean updateUser(User user) {// 創(chuàng)建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 調(diào)用SqlSession的增刪改查的方法int update = sqlSession.update("app.updateUser", user);// 提交事務(wù)sqlSession.commit();// 關(guān)閉資源sqlSession.close();return update != 0;}@Overridepublic User findUserById(Integer id) {// 創(chuàng)建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 調(diào)用SqlSession的增刪改查的方法User user = sqlSession.selectOne("app.findUserById", id);// 關(guān)閉資源sqlSession.close();return user;}@Overridepublic List<User> selectUserList() {// 創(chuàng)建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 調(diào)用SqlSession的增刪改查的方法List<User> userList = sqlSession.selectList("app.selectUserList");// 關(guān)閉資源sqlSession.close();return userList;} }

    4.1.3、User.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="app"><!-- 增加 --><insert id="addUser" parameterType="com.csa.po.User"><!-- 對(duì)于這個(gè)例子keyProperty:查找的結(jié)果放在id中order:在執(zhí)行insert語(yǔ)句''之后(AFTER)"再執(zhí)行select last_insert_id()--><selectKey keyProperty="id" resultType="int" order="AFTER">select last_insert_id()</selectKey>insert into User(username,age) values(#{username},#{age})</insert><!-- 刪除 --><delete id="deleteUserById" parameterType="int">delete from User where id=#{id}</delete><!-- 改 --><update id="updateUser" parameterType="com.csa.po.User">update User set username=#{username},age=#{age} where id like #{id}</update><!-- 查詢(xún)一個(gè)對(duì)象 --><select id="findUserById" parameterType="int" resultType="com.csa.po.User">select * from User where id = #{id}</select><!-- 查詢(xún)多個(gè)對(duì)象 --><select id="selectUserList" resultType="com.csa.po.User">select * from User</select> </mapper>

    4.1.3、測(cè)試Dao的CRUD

    package com.csa.app;import java.io.InputStream; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.csa.dao.UserDao; import com.csa.dao.imp.UserDaoImp; import com.csa.po.User;public class App {public static void main(String[] args) throws Exception {// 讀取全局配置文件String resource = "SqlMapConfig.xml";InputStream input = Resources.getResourceAsStream(resource);// 創(chuàng)建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);// 創(chuàng)建dao類(lèi)UserDao userDao = new UserDaoImp(sqlSessionFactory);// 調(diào)用增刪改查方法// 1.增User user = new User();user.setUsername("hack");user.setAge(19);boolean insert = userDao.addUser(user);if(insert) {System.out.println("增加"+user+"成功");}else {System.out.println("增加失敗:"+user);}// 2.改user.setUsername("mybatis");user.setAge(0);boolean update = userDao.updateUser(user);if(update) {System.out.println("更新"+user+"成功");}else {System.out.println("更新失敗:"+user);}// 3.刪boolean delete = userDao.deleteUserById(user.getId());if(delete) {System.out.println("刪除"+user+"成功");}else {System.out.println("刪除失敗:"+user);}// 4.查// 4.1查詢(xún)單個(gè)user = userDao.findUserById(user.getId());if(user!=null) {System.out.println("查詢(xún)"+user+"成功");}else {System.out.println("查詢(xún)失敗:"+user);}// 4.2查詢(xún)所有List list = userDao.selectUserList();System.out.println(list);} }

    4.1.4、測(cè)試結(jié)果

    如果發(fā)現(xiàn)WARN這種結(jié)果,是因?yàn)闆](méi)有l(wèi)og4j.properties文件。

    4.1.5、log4j.properties導(dǎo)入及其測(cè)試結(jié)果

    4.1.5.1、創(chuàng)建log4j.properties

    4.1.5.1、編寫(xiě)log4j.properties

    log4j.rootLogger=DEBUG, Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n log4j.logger.org.apache=INFO

    4.1.5.1、測(cè)試

    4.1.4、編寫(xiě)Dao類(lèi)的問(wèn)題

    我們發(fā)現(xiàn)一個(gè)問(wèn)題:編寫(xiě)了很多重復(fù)性的代碼,而且都是固定(模板)形式!

    解決方案:使用動(dòng)態(tài)代理(Mapper)來(lái)解決!

    4.2、使用動(dòng)態(tài)代理mapper實(shí)現(xiàn)CRUD

    4.2.0、Mapper代理的開(kāi)發(fā)規(guī)范

  • mapper接口的全限定名要和mapper映射文件的namespace值一致
  • mapper接口的方法名稱(chēng)要和mapper映射文件的statement的id一致
  • mapper接口的方法參數(shù)類(lèi)型要和mapper映射文件的statement的parameterType的值一致,而且它的參數(shù)是一個(gè)
  • mapper接口的方法返回值類(lèi)型要和mapper映射文件的statement的resultType的值一致
  • 4.2.1、開(kāi)發(fā)目錄

    與上一個(gè)相比,只是少了實(shí)現(xiàn)類(lèi)

    4.2.2、創(chuàng)建UserDao

    與上面一樣。

    4.2.3、配置mapper映射文件

    不同的地方就只有一處:注意看namespace屬性的不同。

    <mapper namespace="com.csa.dao.UserDao">內(nèi)容與上面的一樣</mapper>

    4.2.4、測(cè)試

    不同之處也只在于這兩行:

    // 創(chuàng)建sqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // 創(chuàng)建dao類(lèi) UserDao userDao = sqlSession.getMapper(UserDao.class);

    下面是一個(gè)完整的:

    package com.csa.app;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 com.csa.dao.UserDao; import com.csa.po.User;public class App {public static void main(String[] args) throws Exception {// 讀取全局配置文件String resource = "SqlMapConfig.xml";InputStream input = Resources.getResourceAsStream(resource);// 創(chuàng)建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);// 創(chuàng)建sqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 創(chuàng)建dao類(lèi)UserDao userDao = sqlSession.getMapper(UserDao.class);// 調(diào)用增刪改查方法// 1.增User user = new User();user.setUsername("hack");user.setAge(19);boolean insert = userDao.addUser(user);if(insert) {System.out.println("增加"+user+"成功");}else {System.out.println("增加失敗:"+user);}// 2.改...// 3.刪...// 4.查// 4.1查詢(xún)單個(gè)...// 4.2查詢(xún)所有...} }

    4.2.5、測(cè)試結(jié)果


    5、全局配置文件詳解

    5.1、properties元素

    用于加載配置文件。比如<properties resource="配置文件的路徑"></properties>。使用時(shí)${屬性名}即可。

    5.2、settings



    <!--參數(shù)說(shuō)明:cacheModelsEnabled:啟用或禁用SqlMapClient的所有緩存model。調(diào)試程序時(shí)使用。enhancementEnabled:啟用或禁用運(yùn)行時(shí)字節(jié)碼增強(qiáng),以?xún)?yōu)化訪(fǎng)問(wèn)Java Bean屬性的性能,同時(shí)優(yōu)化延遲加載的性能。lazyLoadingEnabled:啟用或禁用SqlMapClient的所有延遲加載。調(diào)試程序時(shí)使用。maxRequests:同時(shí)執(zhí)行SQL語(yǔ)句的最大線(xiàn)程數(shù)。大于這個(gè)值的線(xiàn)程將阻塞直到另一個(gè)線(xiàn)程執(zhí)行完成。不同的DBMS有不同的限制值,但任何數(shù)據(jù)庫(kù)都有這些限制。通常這個(gè)值應(yīng)該至少是maxTransactions的10倍,并且總是大于maxSessions和maxTranactions。減小這個(gè)參數(shù)值通常能提高性能。maxSessions:同一時(shí)間內(nèi)活動(dòng)的最大session數(shù)。一個(gè)session可以是代碼請(qǐng)求的顯式session,也可以是當(dāng)線(xiàn)程使用SqlMapClient實(shí)例(即執(zhí)行一條語(yǔ)句)自動(dòng)獲得的session。它應(yīng)該總是大于或等于maxTransactions并小于maxRequests。減小這個(gè)參數(shù)值通常能減少內(nèi)存使用。maxTransactions:同時(shí)進(jìn)入SqlMapClient.startTransaction()的最大線(xiàn)程數(shù)。大于這個(gè)值的線(xiàn)程將阻塞直到另一個(gè)線(xiàn)程退出。不同的DBMS有不同的限制值,但任何數(shù)據(jù)庫(kù)都有這些限制。這個(gè)參數(shù)值應(yīng)該總是小于或等于maxSessions并總是遠(yuǎn)遠(yuǎn)小于maxRequests。減小這個(gè)參數(shù)值通常能提高性能。useStatementNamespaces:如果啟用本屬性,必須使用全限定名來(lái)引用mapped statement。Mapped statement的全限定名由sql-map的名稱(chēng)和mapped-statement的名稱(chēng)合成,例如queryForObject(“sqlMapName.statementName”)--><settings cacheModelsEnabled="true"enhancementEnabled="false"lazyLoadingEnabled="false"maxRequests="3000"maxSessions="3000"maxTransactions="3000"useStatementNamespaces="false"/>

    5.3、typeAliases

    5.3.1、Mybatis支持的別名

    別名映射的類(lèi)型
    _bytebyte
    _longlong
    _shortshort
    _intint
    _integerint
    _doubledouble
    _floatfloat
    _booleanboolean
    stringString
    byteByte
    longLong
    shortShort
    intInteger
    integerInteger
    doubleDouble
    floatFloat
    booleanBoolean
    dateDate
    decimalBigDecimal
    bigdecimalBigDecimal

    5.3.2、自定義別名

    <typeAliases><!--定義單個(gè)別名 --><typeAlias type="com.csa.po.User" alias="user"/><!-- 批量定義別名規(guī)則:類(lèi)首字母小寫(xiě)--><package name="com.csa.po"/> </typeAliases>

    5.4、mappers

    以下4種形式,加載映射文件:

    <!-- 加載UserMapper.xml文件 --> <mappers><!-- 相對(duì)路徑 --><mapper resource="User.xml"/><!-- 完全限定路徑 --><mapper url="file:///D:\Mybatis\MybatisPro2\src\User.xml"/><!-- 接口路徑 --><mapper class="com.csa.dao.UserDao"/><!-- 包路徑(常用) --><package name="com.csa.dao"/> </mappers>

    6、輸入映射與輸出映射

    6.1、輸入映射與簡(jiǎn)單類(lèi)型輸出映射

    6.1.1、簡(jiǎn)單類(lèi)型輸入

    映射文件

    <!-- 查詢(xún)對(duì)應(yīng)ID的用戶(hù)名 --> <select id="findUsernameById" parameterType="int" resultType="string">select username from User where id = #{id} </select>

    UserDao接口

    /*** 通過(guò)id查找用戶(hù)名* @param id* @return 用戶(hù)名*/ public String findUsernameById(Integer id);

    測(cè)試方法

    public static void main(String[] args) throws Exception {// 讀取全局配置文件String resource = "SqlMapConfig.xml";InputStream input = Resources.getResourceAsStream(resource);// 創(chuàng)建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);// 創(chuàng)建sqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 創(chuàng)建dao類(lèi)UserDao userDao = sqlSession.getMapper(UserDao.class);// 執(zhí)行簡(jiǎn)單類(lèi)型的查找userDao.findUsernameById(16);System.out.println(username);// 關(guān)閉sqlSessionsqlSession.close(); }

    實(shí)驗(yàn)結(jié)果

    6.1.2、POJO類(lèi)型輸入

    映射文件

    <!-- 查詢(xún)符合年齡和出生月份的用戶(hù) --> <select id="selectUsernamesByBrithday" parameterType="com.csa.po.User" resultType="string">select username from User where age=${age} and brithdayMonth=${brithdayMonth} </select>

    UserDao接口

    /*** 查找與User的同年同月生的用戶(hù)的用戶(hù)名* @param user* @return*/ public List<String> selectUsernamesByBrithday(User user);

    測(cè)試方法

    public static void main(String[] args) throws Exception {// 讀取全局配置文件String resource = "SqlMapConfig.xml";InputStream input = Resources.getResourceAsStream(resource);// 創(chuàng)建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);// 創(chuàng)建sqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 創(chuàng)建dao類(lèi)UserDao userDao = sqlSession.getMapper(UserDao.class);User user = userDao.findUserById(15);System.out.println(user);List<String> usernames = userDao.selectUsernamesByBrithday(user);System.out.println(usernames);// 關(guān)閉sqlSessionsqlSession.close(); }

    實(shí)驗(yàn)結(jié)果

    6.1.3、POJO類(lèi)型嵌套POPJ類(lèi)型的輸入映射

    User

    package com.csa.po;public class User {private Integer id;private String username;private Integer age;private Integer brithdayMonth;// set/get...@Overridepublic String toString() {return "User [id=" + id + ", username=" + username + ", age=" + age + ", brithdayMonth=" + brithdayMonth + "]";} }

    UserVo

    package com.csa.po;public class UserVo {private User user;// set/get...@Overridepublic String toString() {return "UserVo [user=" + user + "]";} }

    映射文件

    <!-- POJO類(lèi)型嵌套POPJ類(lèi)型的輸入映射,查詢(xún)符合年齡和出生月份的用戶(hù) --><select id="selectUserVonamesByBrithday" parameterType="com.csa.po.UserVo" resultType="string">select username from User where age=${user.age} and brithdayMonth=${user.brithdayMonth}</select>

    UserDao接口

    /*** POJO類(lèi)型嵌套POPJ類(lèi)型的輸入映射* 查找與UserVo的同年同月生的用戶(hù)的用戶(hù)名* @param userVo* @return*/ public List<String> selectUserVonamesByBrithday(UserVo userVo);

    測(cè)試方法

    public static void main(String[] args) throws Exception {// 讀取全局配置文件String resource = "SqlMapConfig.xml";InputStream input = Resources.getResourceAsStream(resource);// 創(chuàng)建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);// 創(chuàng)建sqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 創(chuàng)建dao類(lèi)UserDao userDao = sqlSession.getMapper(UserDao.class);User user = userDao.findUserById(15);UserVo userVo = new UserVo();userVo.setUser(user);System.out.println(userVo);List<String> usernames = userDao.selectUserVonamesByBrithday(userVo);System.out.println(usernames);// 關(guān)閉sqlSessionsqlSession.close(); }

    實(shí)驗(yàn)結(jié)果

    6.1.4、Map類(lèi)型的輸入映射

    映射文件

    <!-- 查詢(xún)?cè)谀衬昴吃鲁錾挠脩?hù)的用戶(hù)名 --> <select id="findUsernamesByBrithday" parameterType="hashmap" resultType="string">select username from User where age=${age} and brithdayMonth=${brithdayMonth} </select>

    UserDao接口

    /*** 通過(guò)hashmap查詢(xún)?cè)谀衬昴吃鲁錾挠脩?hù)的用戶(hù)名* @param map* @return*/ public List<String> findUsernamesByBrithday(Map<String,Object> map);

    測(cè)試

    public static void main(String[] args) throws Exception {//讀取全局配置文件String resource = "SqlMapConfig.xml";InputStream input = Resources.getResourceAsStream(resource);// 創(chuàng)建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);// 創(chuàng)建sqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 創(chuàng)建dao類(lèi)UserDao userDao = sqlSession.getMapper(UserDao.class);Map<String,Object> map = new HashMap<>();map.put("age", 12);map.put("brithdayMonth", 10);List<String> usernames = userDao.findUsernamesByBrithday(map);System.out.println(usernames);// 關(guān)閉sqlSessionsqlSession.close(); }

    測(cè)試結(jié)果

    6.2、簡(jiǎn)單類(lèi)型輸入映射與輸出映射

    6.2.1、resultMap屬性

    映射文件

    <!-- 定義一個(gè)resultMap,id唯一標(biāo)識(shí) --> <resultMap type="com.csa.po.User" id="userMap"><result column="_id" property="id"/><result column="_username" property="username"/><result column="_age" property="age"/><result column="_brithdayMonth" property="brithdayMonth"/> </resultMap><!-- 使用resultMap,通過(guò)id查詢(xún)User --> <select id="selectUserMap" parameterType="int" resultMap="userMap">select id _id,username _username,age _age,brithdayMonth _brithdayMonth from User where id=#{id} </select>

    UserDao接口

    /*** 通過(guò)id查詢(xún)User* @param id* @return*/ public User selectUserMap(Integer id);

    測(cè)試

    public static void main(String[] args) throws Exception {// 讀取全局配置文件String resource = "SqlMapConfig.xml";InputStream input = Resources.getResourceAsStream(resource);// 創(chuàng)建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);// 創(chuàng)建sqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 創(chuàng)建daoUserDao userDao = sqlSession.getMapper(UserDao.class);User user = userDao.selectUserMap(15);System.out.println(user);// 關(guān)閉sqlSessionsqlSession.close(); }

    測(cè)試結(jié)果

    復(fù)雜輸入類(lèi)型與復(fù)雜輸出類(lèi)型的一個(gè)例子

    輸入類(lèi)型是map,輸出類(lèi)型是一個(gè)UserVo。

    UserVo類(lèi)

    package com.csa.po; public class UserVo {private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}@Overridepublic String toString() {return "UserVo [user=" + user + "]";} }

    UserDao接口

    /*** 通過(guò)map類(lèi)型查找UserVo* @param map* @return*/ public List<UserVo> selectUserVosMap(Map<String,Object> map);

    映射文件

    <!-- 復(fù)雜輸入類(lèi)型與復(fù)雜輸出類(lèi)型的一個(gè)例子 --> <!-- resultmap --> <resultMap type="com.csa.po.UserVo" id="userVoMap"><result column="id" property="user.id"/><result column="username" property="user.username"/><result column="age" property="user.age"/><result column="brithdayMonth" property="user.brithdayMonth"/> </resultMap> <!-- 使用resultMap,查詢(xún)?cè)谀衬昴吃鲁錾腢ser并封裝到UserVo --> <select id="selectUserVosMap" parameterType="hashmap" resultMap="userVoMap">select * from User where age=#{age} and brithdayMonth=#{brithdayMonth} </select>

    測(cè)試

    public static void main(String[] args) throws Exception {// 讀取全局配置文件String resource = "SqlMapConfig.xml";InputStream input = Resources.getResourceAsStream(resource);// 創(chuàng)建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);// 創(chuàng)建sqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 創(chuàng)建daoUserDao userDao = sqlSession.getMapper(UserDao.class);Map<String,Object> map = new HashMap<>();map.put("age", 12);map.put("brithdayMonth", 10);List<UserVo> userVo = userDao.selectUserVosMap(map);System.out.println(userVo);// 關(guān)閉sqlSessionsqlSession.close(); }

    測(cè)試結(jié)果


    7、動(dòng)態(tài)sql

    7.1、動(dòng)態(tài)sql介紹

    在mybatis中,它提供了一些動(dòng)態(tài)sql標(biāo)簽,可以讓程序員更快的進(jìn)行mybatis的開(kāi)發(fā),這些動(dòng)態(tài)sql可以通過(guò)sql的可重用性。

    常用的動(dòng)態(tài)sql標(biāo)簽:if標(biāo)簽、where標(biāo)簽、sql片段、foreach標(biāo)簽

    7.2、If標(biāo)簽/where標(biāo)簽

    映射文件

    <!-- 復(fù)雜輸入類(lèi)型與復(fù)雜輸出類(lèi)型的一個(gè)例子 --> <!-- resultmap --> <resultMap type="com.csa.po.UserVo" id="userVoMap"><result column="id" property="user.id"/><result column="username" property="user.username"/><result column="age" property="user.age"/><result column="brithdayMonth" property="user.brithdayMonth"/> </resultMap><!-- 輸入類(lèi)型:UserVo輸出類(lèi)型:UserVo查詢(xún)特定某年某月出生的用戶(hù),如果這個(gè)用戶(hù)年齡和月份沒(méi)有透露完全,則根據(jù)對(duì)應(yīng)的去查找--> <select id="selectUserVoList" parameterType="com.csa.po.UserVo" resultMap="userVoMap">select * from User<!-- where標(biāo)簽:默認(rèn)去掉后面第一個(gè)and,如果沒(méi)有參數(shù),則把自己干掉 --><where><!-- if標(biāo)簽:可以對(duì)輸入的參數(shù)進(jìn)行判斷 --><!-- 與OGNL表達(dá)式類(lèi)似 --><if test="user != null"><if test="user.age != null">and age=#{user.age}</if><if test="user.brithdayMonth != null">and brithdayMonth=#{brithdayMonth}</if></if></where> </select>

    UserDao接口

    /*** 查詢(xún)特定某年某月出生的用戶(hù),如果這個(gè)用戶(hù)年齡和月份沒(méi)有透露完全,則根據(jù)對(duì)應(yīng)的去查找* @param userVo* @return*/ public List<UserVo> selectUserVoList(UserVo userVo);

    測(cè)試

    public static void main(String[] args) throws Exception {// 讀取全局配置文件String resource = "SqlMapConfig.xml";InputStream input = Resources.getResourceAsStream(resource);// 創(chuàng)建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);// 創(chuàng)建sqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 創(chuàng)建daoUserDao userDao = sqlSession.getMapper(UserDao.class);User user = new User();UserVo userVo = new UserVo();user.setAge(12);userVo.setUser(user);List<UserVo> userVoList = userDao.selectUserVoList(userVo);System.out.println(userVoList);// 關(guān)閉sqlSessionsqlSession.close(); }

    測(cè)試結(jié)果

    7.3、sql片段

    映射文件

    <!-- 輸入類(lèi)型:UserVo輸出類(lèi)型:UserVo查詢(xún)特定某年某月出生的用戶(hù),如果這個(gè)用戶(hù)年齡和月份沒(méi)有透露完全,則根據(jù)對(duì)應(yīng)的去查找--> <select id="selectUserVoList" parameterType="com.csa.po.UserVo" resultMap="userVoMap">select * from User<include refid="whereUser"></include> </select><sql id="whereUser"><!-- where標(biāo)簽:默認(rèn)去掉后面第一個(gè)and,如果沒(méi)有參數(shù),則把自己干掉 --><where><!-- if標(biāo)簽:可以對(duì)輸入的參數(shù)進(jìn)行判斷 --><!-- 與OGNL表達(dá)式類(lèi)似 --><if test="user != null"><if test="user.age != null">and age=#{user.age}</if><if test="user.brithdayMonth != null">and brithdayMonth=#{brithdayMonth}</if></if></where> </sql>

    7.4、sql片段

    <foreach collection="迭代集合" item="迭代對(duì)象" open="()" close=")" separator=",">#{迭代對(duì)象.屬性} </foreach>

    參考

    黑馬筆記和各種博客!

    總結(jié)

    以上是生活随笔為你收集整理的MyBatis学习总结一的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    色综合人人 | 亚洲一区二区天堂 | 探花视频在线观看+在线播放 | 免费进去里的视频 | 五月开心婷婷网 | 九九九热精品 | 九九电影在线 | 人人dvd| 国产成人精品a | 人人爽人人爽人人片av免 | 最近中文字幕免费av | 精品久久片 | 日本一区二区免费在线观看 | www.人人草 | 日韩欧美视频在线 | 国产精品精品 | 成人a视频在线观看 | 一区二区三区精品在线 | 亚洲伦理一区 | 久久y | 又黄又刺激的网站 | 2018好看的中文在线观看 | av不卡中文字幕 | 久在线观看视频 | 开心激情五月婷婷 | 精品96久久久久久中文字幕无 | 久久综合久色欧美综合狠狠 | 国产高清视频在线播放一区 | 高清av网 | 久久久免费在线观看 | 日韩午夜一级片 | 欧美男男tv网站 | 麻豆一区二区 | 麻豆视频免费入口 | 国产精品久久久久久久免费大片 | 国产成人精品一区二区三区福利 | 青青河边草观看完整版高清 | 久久久久国产一区二区三区 | 日韩电影一区二区三区 | 91av精品| 日批视频在线 | 成人黄色中文字幕 | www操操| 99综合电影在线视频 | 日韩天堂在线观看 | www.福利视频 | 永久免费看av | 国内精品在线一区 | 夜夜爽天天爽 | 久草热久草视频 | 深夜免费小视频 | 亚洲国产成人高清精品 | 亚洲激情在线观看 | 久久精品成人欧美大片古装 | 中文字幕在线观看视频免费 | 日韩欧美91 | 免费在线观看国产精品 | 亚洲成人网在线 | 久久久久久久久久电影 | 免费看的黄色录像 | 成人午夜电影网站 | av久久久 | 午夜视频在线观看一区二区三区 | 丝袜美腿在线视频 | 91亚洲精品久久久久图片蜜桃 | 99久久99久久精品国产片 | 国产激情久久久 | 91高清免费看 | 伊人一级 | 国产色秀视频 | 天天爽人人爽 | 久久99精品国产99久久 | 国产色综合 | 欧美日韩精品在线观看视频 | 婷婷五月情 | 色婷婷福利视频 | 久草新在线 | 狠狠88综合久久久久综合网 | 99视频在线免费 | 激情网色 | 久久国产美女 | 91香蕉国产| 日产中文字幕 | 国产成人一区二区三区影院在线 | 黄色片毛片 | 日韩试看 | 成人资源在线播放 | 91欧美日韩国产 | 草久视频在线观看 | 正在播放国产一区 | 综合av在线| 五月天中文字幕mv在线 | 波多野结衣电影一区二区三区 | 欧美日韩在线播放 | 久久99热精品这里久久精品 | 99视频免费观看 | 九九热精品视频在线播放 | 天天干天天天 | 狠狠狠色丁香综合久久天下网 | 久久国产精品一区二区 | 99人久久精品视频最新地址 | 国产精品永久免费在线 | 久久大片 | 婷婷去俺也去六月色 | 久久夜色精品国产欧美一区麻豆 | 色在线免费观看 | 成人免费视频播放 | 免费福利小视频 | 最近中文字幕免费av | 一区二区三区av在线 | 日本中文字幕电影在线免费观看 | 最新中文字幕在线资源 | 日韩高清一区二区 | 成人中文字幕av | 久久这里有 | 成年人黄色免费看 | 丁香影院在线 | 久久综合9988久久爱 | 精品在线视频一区 | 深爱激情五月婷婷 | 天天干天天在线 | 国产成本人视频在线观看 | 中文永久免费观看 | 亚洲视频免费在线观看 | 综合久久久久久久久 | 亚洲黄色区 | 精品久久99 | 国产在线精品国自产拍影院 | 国产一区欧美日韩 | 日韩簧片在线观看 | 黄色av播放 | 天天色棕合合合合合合 | 黄色国产在线 | 日韩免费观看高清 | 在线观看国产v片 | 在线观看91网站 | 国产日韩av在线 | 久久黄色片| 国产精品久久在线观看 | 高清一区二区 | 久久免费中文视频 | av日韩国产| 中文在线字幕观看电影 | 国产精品永久免费观看 | 色在线中文字幕 | 日韩精品首页 | 亚洲人成人天堂h久久 | 精品久久久免费 | 久久视频精品在线观看 | 国产不卡在线观看视频 | 涩涩爱夜夜爱 | 91精品国产乱码 | 久久黄色a级片 | 中文一区在线 | 色多多污污 | 日韩免费电影一区二区 | 天天爱综合 | av免费网站在线观看 | 97看片吧| 狠狠色噜噜狠狠狠 | 伊人五月 | 中文字幕亚洲欧美日韩 | 热re99久久精品国产66热 | 久草资源免费 | 日韩午夜大片 | 天天射夜夜爽 | 嫩草av影院 | 欧美做受高潮电影o | 最新av在线免费观看 | 天天爽夜夜爽精品视频婷婷 | 最新av免费在线 | 久久精品国产精品亚洲 | 久草在线免费电影 | 久久久久久久18 | 成人中文字幕+乱码+中文字幕 | 九九免费在线观看 | 精品伊人久久久 | 五月天激情综合网 | 亚洲欧洲国产日韩精品 | 久久亚洲婷婷 | 日韩精品免费在线播放 | www99精品| 成人久久久精品国产乱码一区二区 | 天天天天爱天天躁 | 日韩精品欧美一区 | 免费成人黄色 | 日韩免费在线观看 | 天天干夜夜想 | 亚洲在线观看av | 国产亚洲综合性久久久影院 | av中文字幕网 | 在线有码中文 | 正在播放 国产精品 | 91高清视频 | 狠狠操综合 | 黄色视屏在线免费观看 | 日韩欧美视频在线观看免费 | 美女网站在线看 | 久久少妇av | 欧美精品视| 最近最新最好看中文视频 | 国产成人精品一区二区三区在线观看 | 久久国产精品小视频 | 欧美日韩免费一区二区 | 91视频久久久 | 国产精品人人做人人爽人人添 | 久久国产精品免费一区 | 日韩欧美视频一区 | 最近高清中文字幕 | 麻豆91精品视频 | 精品国产一区二区三区久久久 | 999视频网 | 亚洲欧美日韩国产精品一区午夜 | 天干啦夜天干天干在线线 | 在线 视频 一区二区 | 伊人婷婷色 | 97超在线视频 | 在线免费观看羞羞视频 | 91亚洲免费| 亚洲人成网站精品片在线观看 | 国产精品久久毛片 | 亚洲干 | 亚洲欧美日韩精品久久奇米一区 | 天天操福利视频 | 免费看搞黄视频网站 | 99久久精品国产系列 | 欧美精品在线观看免费 | 免费污片 | 久久久国产精品久久久 | 在线观看免费成人 | 天天艹 | 久久a级片 | 婷婷九九| 国产在线a | www.超碰| 黄色看片| 黄色软件视频大全免费下载 | 网站免费黄 | 欧美成年黄网站色视频 | 九九色综合| 日本护士撒尿xxxx18 | 99久视频| 久久久影视 | 亚洲精品视频大全 | 国产一级片免费播放 | 日韩综合精品 | www.天天综合 | 亚洲精色| 精品免费国产一区二区三区四区 | 国产一级免费在线观看 | 国产精品一区二区 91 | 午夜精品久久久久久久99热影院 | 91一区啪爱嗯打偷拍欧美 | 亚洲成人一二三 | 超碰在线最新网址 | 欧美午夜寂寞影院 | 国产特级毛片aaaaaa高清 | 91精品啪在线观看国产 | 91丨porny丨九色| 久久精品8| 亚洲精品理论片 | 综合天天 | 五月婷网站 | 中文字幕一区二区三区久久蜜桃 | 久久一区二区三区日韩 | 久久精品这里热有精品 | 成人永久免费 | 国产精品久久久久毛片大屁完整版 | 中文字幕精品www乱入免费视频 | 国产乱码精品一区二区蜜臀 | 国内偷拍精品视频 | 国内精品免费久久影院 | 久久国产亚洲精品 | 婷婷久久国产 | 国产黄影院色大全免费 | 国产精品福利久久久 | 91精品小视频 | 99爱视频 | 亚洲高清视频在线观看免费 | 亚洲精品视频一 | 99在线热播 | 91精品国产自产在线观看永久 | 亚洲资源视频 | 国产亚洲视频在线免费观看 | 亚洲国产日韩一区 | 婷婷成人综合 | 国产九九九九九 | 亚洲国产欧美一区二区三区丁香婷 | 天天干天天射天天操 | 丁香激情综合久久伊人久久 | 91免费高清视频 | 国产一级片免费播放 | 91视频 - x99av | 97av超碰| 日日夜夜天天人人 | 中文av字幕在线观看 | 免费av视屏 | 91黄色小网站 | 十八岁免进欧美 | 婷婷福利影院 | 久操久 | 精品免费久久久久 | 国产成人三级在线观看 | 亚洲欧美视屏 | 欧洲精品二区 | 国产破处精品 | www蜜桃视频| 探花视频在线观看免费 | 日日干夜夜草 | 天天操伊人 | 又黄又爽又刺激视频 | 国产一区观看 | 天天操天天干天天综合网 | 2024国产在线 | av在线最新 | www久久九| 超碰人人乐 | 伊人小视频 | 欧美一级片在线 | 中文在线免费一区三区 | 丁香激情综合久久伊人久久 | 国产 色 | 波多野结衣亚洲一区二区 | 国产免费又粗又猛又爽 | 久久久久久毛片精品免费不卡 | 国产精品久久久久国产精品日日 | 在线 影视 一区 | 亚洲黄色网络 | 69视频网站 | 亚洲免费在线观看视频 | 国产高清av免费在线观看 | 久久人91精品久久久久久不卡 | 一区二区三区中文字幕在线观看 | 久久综合九色欧美综合狠狠 | 美女啪啪图片 | 91免费在线看片 | 国产高清免费在线观看 | 日本久久91 | 久久精品国产亚洲精品2020 | 久久久www成人免费毛片麻豆 | 免费在线观看午夜视频 | 国产精品美女久久久久久网站 | 蜜臀一区二区三区精品免费视频 | 国产香蕉久久 | 国产视频一区二区在线播放 | 麻豆精品国产传媒 | 色婷婷在线观看视频 | 中文字幕在线观看资源 | 国产免费又粗又猛又爽 | 中文字幕二区三区 | 99精品视频在线观看视频 | 日韩资源在线观看 | 免费男女羞羞的视频网站中文字幕 | 女人18精品一区二区三区 | 国产又粗又硬又爽的视频 | 欧美性大战久久久久 | 成人av播放 | 狠狠躁日日躁夜夜躁av | 国产区在线 | 国产视频97 | 日韩欧美高清一区二区 | 久久不卡av | 国产美女免费 | 国产一级黄大片 | 美女视频黄免费网站 | 欧美最新大片在线看 | 天天草天天干天天 | 最新日韩在线 | 特级a老妇做爰全过程 | 91麻豆高清视频 | 日韩精品一区二区三区不卡 | 国产999精品久久久久久麻豆 | 国产99久久 | 国产精品门事件 | 91在线看 | 国产亚洲精品日韩在线tv黄 | 日韩欧美电影 | 国内精品美女在线观看 | 国产黄色精品在线观看 | 亚洲最大成人免费网站 | 国产精品久久久777 成人手机在线视频 | 日韩av一区二区三区在线观看 | 超碰个人在线 | 免费婷婷 | 丝袜美腿在线播放 | www操操操 | 2021国产在线 | 国产精品自在线 | 免费成人av在线看 | 六月丁香综合 | 97在线观看免费观看 | 岛国精品一区二区 | 久久精品美女视频网站 | 四虎国产精品免费观看视频优播 | 黄色字幕网 | 久久久久免费精品国产 | 特级西西人体444是什么意思 | 中文国产在线观看 | 国产精品毛片久久久久久久久久99999999 | 最新av在线播放 | 成人黄色电影在线播放 | 国产在线国偷精品产拍 | 香蕉视频日本 | 99久久超碰中文字幕伊人 | 伊色综合久久之综合久久 | 国产成人精品一区二区三区福利 | 久久视讯 | 国产成人精品不卡 | 国产色视频一区二区三区qq号 | 日韩美av在线 | 国产精品视频久久 | 国产理论片在线观看 | 国产精品免费成人 | 一本一道久久a久久精品蜜桃 | 三级黄色网址 | 开心丁香婷婷深爱五月 | 国产色女| 婷婷丁香国产 | 久久玖 | www.精选视频.com | 久久久久五月 | 久久精品久久精品 | 91福利视频久久久久 | 精品影院一区二区久久久 | 在线观看黄网 | 99久久99 | 最近中文字幕高清字幕免费mv | 91桃色在线播放 | 午夜aaaa| 黄网站色 | 激情av在线播放 | 黄色毛片大全 | 天天伊人狠狠 | 免费成人黄色片 | 久久久久国产精品厨房 | 亚洲激情综合网 | 黄色www免费 | 国产黄色精品在线 | 国产综合香蕉五月婷在线 | 在线三级av | 色婷婷av国产精品 | 丁香六月伊人 | 国产精品入口久久 | 日韩av免费一区二区 | 亚洲视频在线播放 | 免费视频xnxx com | 欧美一二在线 | 色综合久久久久综合 | 狠狠插狠狠干 | 精精国产xxxx视频在线播放 | www.久久色| 亚洲成人av片 | 麻豆久久久久 | 免费一级日韩欧美性大片 | 天堂av免费看 | 免费高清av在线看 | 国产精品久久在线 | 91精品免费在线观看 | 欧美日韩一区二区在线观看 | 久久夜夜操 | 色综合久久久久综合体桃花网 | 亚洲天堂社区 | 日韩视频一区二区三区在线播放免费观看 | av福利资源| 免费看的黄色 | 人人狠| 91av欧美| 一区二区三区免费在线播放 | 日韩区欧美久久久无人区 | 在线99| 日日夜夜91 | 久久夜夜夜 | adn—256中文在线观看 | 欧美日韩免费观看一区二区三区 | av电影不卡| 91香蕉国产在线观看软件 | 91免费视频网站在线观看 | av成人免费在线 | 久久久久亚洲精品成人网小说 | 毛片基地黄久久久久久天堂 | 国产精品中文久久久久久久 | 久久久精品久久日韩一区综合 | 国内亚洲精品 | 天天干 天天摸 天天操 | 亚洲精品一区二区三区在线观看 | 久久草在线视频国产 | 久久视频免费 | 婷婷中文在线 | 日本中文在线播放 | 欧美二区三区91 | 亚洲经典视频 | 99久久www| 91av视频在线观看免费 | 日日夜日日干 | 久草| 日韩在线大片 | 精品 一区 在线 | 波多野结衣电影一区二区 | 天天插日日插 | 国产午夜精品一区二区三区在线观看 | a在线观看免费视频 | 中文字幕视频观看 | 欧美日本啪啪无遮挡网站 | 国产黄大片| 婷婷在线色 | 天堂av色婷婷一区二区三区 | 天天射天天爱天天干 | 91人人爱| 四虎影视精品 | 国产精选视频 | 激情五月在线视频 | 精品久久久久久久久久久院品网 | 亚洲激情视频在线观看 | 最近中文字幕 | 亚洲国产精品日韩 | 日本久久久精品视频 | 国产精久久久久久妇女av | 成人在线免费小视频 | 一级做a爱片性色毛片www | 六月丁香在线观看 | 日韩午夜大片 | 人人看人人爱 | 日韩婷婷 | 成人一区在线观看 | av在线a| 一区二区三区精品在线 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 亚洲国产精品一区二区久久,亚洲午夜 | 91污污视频在线观看 | 在线国产激情视频 | 精品v亚洲v欧美v高清v | 色网站黄 | 亚洲影音先锋 | 久草在线免费资源站 | 人人爱人人爽 | 欧美日韩国产在线精品 | 99色免费视频 | 色吧久久| 免费精品人在线二线三线 | 国产精品久久久久一区二区三区 | a视频在线播放 | 久久黄色影视 | www.日本色 | 99激情网| 天天做综合网 | 国产精品一区二区三区在线看 | 黄色资源网站 | 日韩免费福利 | 亚洲狠狠丁香婷婷综合久久久 | 免费的国产精品 | 在线观看国产永久免费视频 | 日韩欧美黄色网址 | 黄a网| 激情综合五月网 | 天天干天天摸天天操 | 精品国产成人在线 | 国产一区在线视频 | 欧美日韩综合在线观看 | 91在线看视频 | 91重口视频 | 午夜丰满寂寞少妇精品 | 美女黄色网在线播放 | 伊人天天色 | 国产成人av片 | 国产理论一区二区三区 | 欧美一区二区三区在线 | 国产精品久久久久av免费 | 欧美天天干 | 96精品视频 | 免费av网址在线观看 | 国产成人99av超碰超爽 | 337p日本欧洲亚洲大胆裸体艺术 | 亚洲综合欧美精品电影 | 又黄又爽又色无遮挡免费 | 91福利免费 | 久久男人中文字幕资源站 | 观看免费av| 欧美视频不卡 | 久久久九九 | 免费观看v片在线观看 | 色综合欧洲 | 粉嫩av一区二区三区四区五区 | 国产精品综合久久 | 日日夜精品 | 国产精品理论片在线观看 | 人人草在线视频 | 欧美夫妻生活视频 | 99自拍视频在线观看 | 久久久电影 | 国产黄色网 | 日韩无在线 | 久爱精品在线 | 国产精品久久久久久久久久免费 | 麻豆91在线观看 | 国产精品一区二区三区久久久 | 久热av | 成人av一区二区兰花在线播放 | 午夜精品久久久久99热app | 日韩一区二区三区在线看 | 中文字幕精品在线 | 午夜精品99久久免费 | 91激情视频在线播放 | 亚洲在线视频免费 | 天天干天天干天天操 | 最近中文字幕mv免费高清在线 | 免费看黄色大全 | 日韩亚洲国产精品 | 日韩超碰在线 | 就操操久久 | 国产精品123 | 日韩视频免费在线观看 | 日本黄色大片免费 | 亚洲精品免费在线播放 | 五月天亚洲综合 | 99久久这里有精品 | 亚洲2019精品 | 夜夜操天天| 日韩精品中文字幕av | 99999精品| 日韩中文字幕免费电影 | 久久精彩免费视频 | 久久久久久久久久影院 | 青青河边草手机免费 | 成人亚洲综合 | 国产精品免费一区二区三区在线观看 | 最近2019中文免费高清视频观看www99 | 久久96| 天天综合网久久综合网 | 伊人五月 | 精品在线视频一区二区三区 | 成人av中文字幕 | 成人免费毛片aaaaaa片 | 97成人资源站 | 在线免费视频一区 | 日本中文在线观看 | a√资源在线 | 久久久久人人 | 国产一区二区在线免费观看 | 婷婷激情久久 | 亚洲国产精品一区二区久久,亚洲午夜 | 精品免费久久久久久 | 人人澡人| 国产一区二区三区高清播放 | 免费a视频在线 | 在线观看国产区 | 欧美一级欧美一级 | 久久字幕精品一区 | 色亚洲网 | 手机在线看片日韩 | 日韩美视频 | 成人黄色视 | 亚洲国产精品电影 | 高清国产一区 | 久久久久国产一区二区三区 | 三上悠亚在线免费 | 91香蕉视频在线下载 | 在线 国产一区 | 人人爽人人av | 久久99网站 | 一级国产视频 | 人成在线免费视频 | 性色av香蕉一区二区 | a精品视频| 91精品国产一区二区三区 | 欧美在线视频二区 | 看黄色91 | av在线网站观看 | 亚洲午夜精品一区二区三区电影院 | 9色在线视频 | 亚洲理论片 | 成人99免费视频 | www.日韩免费 | av在线网站免费观看 | 2022中文字幕在线观看 | 亚洲精品国产视频 | 成人免费 在线播放 | 久久久久久久久久久综合 | 免费色av| 六月丁香婷婷网 | 天天艹| 在线中文字幕av观看 | 亚洲欧美日韩一二三区 | 日本h在线播放 | 久久久久国产成人免费精品免费 | 夜又临在线观看 | 午夜精品久久久久久久爽 | 日韩免费在线观看网站 | 日本天天色 | 中文字幕成人一区 | 国产精品久久99综合免费观看尤物 | 亚洲三级黄色 | 免费一级日韩欧美性大片 | 最近字幕在线观看第一季 | 国产资源精品在线观看 | 青青河边草免费 | 美女视频免费一区二区 | 午夜精品久久久久久久99水蜜桃 | 日韩色av色资源 | 国产91精品看黄网站在线观看动漫 | 亚洲精品久久在线 | 在线观看亚洲a | 免费看一及片 | 97电院网手机版 | 91av视频免费在线观看 | 色网av| 超薄丝袜一二三区 | 日日综合 | 久久黄色网 | 一 级 黄 色 片免费看的 | 91日韩精品一区 | 婷婷国产在线观看 | 国产精品剧情 | 国产福利一区二区三区视频 | 天天射日 | 99热免费在线 | 成人午夜影院在线观看 | 国内精品视频免费 | 日韩黄色免费 | 国产专区视频在线观看 | 欧美人人| 操操操日日日干干干 | 久久久久国产精品厨房 | 视频国产一区二区三区 | 麻豆视传媒官网免费观看 | 久久图| 精品麻豆入口免费 | 国产大陆亚洲精品国产 | 在线成人一区 | 欧美日韩视频免费看 | 美女网站视频免费黄 | 欧美一区免费在线观看 | 91日韩在线视频 | 国产在线观看免费av | 一区二区三区精品在线视频 | 黄色在线观看污 | 亚洲三级黄色 | 手机av在线网站 | 免费久久片| 久久99亚洲精品 | 国产精品av在线免费观看 | 日韩免费在线观看网站 | 精品视频在线视频 | 韩国中文三级 | 激情五月婷婷丁香 | www.伊人网.com | 午夜精品久久久久久99热明星 | 在线免费色 | 有没有在线观看av | 久久国产女人 | 日韩欧美网址 | 在线观看国产日韩欧美 | 在线播放一区二区三区 | 国产成人三级在线 | 日韩精品在线免费播放 | 久久精品视频18 | 天天做天天爱天天综合网 | 园产精品久久久久久久7电影 | 国产小视频免费在线网址 | 欧美午夜寂寞影院 | 日韩av在线免费播放 | 国产精品一区二区三区电影 | 美女禁18| 婷婷在线观看视频 | 在线观看的a站 | 国产亚洲va综合人人澡精品 | 久热香蕉视频 | 亚洲欧美日韩一区二区三区在线观看 | 91精品国产乱码 | 日韩在线电影观看 | 亚一亚二国产专区 | 国产精品一区二区精品视频免费看 | 午夜三级毛片 | 超级碰碰碰碰 | 高清久久久 | 白丝av在线 | 亚洲欧洲日韩 | 一级一片免费看 | 欧美夫妻性生活电影 | 国产精品久久久久久久久久久不卡 | 天天天操天天天干 | 人人干天天干 | 久久久免费少妇 | 337p西西人体大胆瓣开下部 | 丁香资源影视免费观看 | 国产成人1区 | 有码中文在线 | 成人香蕉视频 | 中文字幕在线观看三区 | 欧美一区二区免费在线观看 | 丝袜美腿在线播放 | 99视频偷窥在线精品国自产拍 | 精品国产乱码久久 | 亚洲午夜在线视频 | 日韩在线视频观看免费 | 探花系列在线 | 天天操天天舔天天干 | 欧美激情综合五月 | 久草久草在线 | 免费观看国产精品视频 | 日韩videos高潮hd | 福利二区视频 | 成人激情开心网 | 精品国产伦一区二区三区 | 91精品日韩 | a国产精品 | 91九色视频导航 | 婷婷丁香导航 | 国产成人免费在线观看 | 中文字幕三区 | 一区二区伦理电影 | 久久久久久久久久久久久影院 | 久久 精品一区 | 日本三级久久久 | 久久大视频 | 激情综合网五月 | 成人黄色电影免费观看 | 成人精品国产 | 中文字幕一区二区三区四区在线视频 | 国产欧美久久久精品影院 | 国内精品在线看 | 日韩久久久久久 | 又爽又黄又刺激的视频 | 精品在线观看一区二区三区 | 欧美精品999 | 精品久久一区 | 国产精品11 | 亚洲精品午夜一区人人爽 | 久久人人艹 | 超碰在线人人爱 | 麻豆观看| 久久avav| 97超碰总站 | 亚洲最快最全在线视频 | 国产欧美久久久精品影院 | 91九色精品女同系列 | 免费观看成年人视频 | 91精品第一页 | 久久人人爽人人爽人人 | 天天干夜夜操视频 | 亚洲色五月 | 开心激情网五月天 | 97人人澡人人添人人爽超碰 | 日韩免费三区 | 激情一区二区三区欧美 | 99热免费在线 | 成人午夜电影在线观看 | 2017狠狠干| 超碰人人做| 91大神视频网站 | 国产视频在线观看免费 | 亚洲综合欧美日韩狠狠色 | 国产精品第7页 | 免费观看成人网 | 热精品 | 中文一区在线 | 亚洲日本va午夜在线影院 | 青草草在线视频 | 96精品视频 | 国产精品久久久久一区二区三区共 | 国产高清精 | 天天干天天操天天 | 日韩欧美网址 | 在线观看激情av | 中文字幕在线观看av | 久久伊人综合 | 国产中出在线观看 | 四虎永久网站 | 免费看三片 | 色综合久 | 久久香蕉电影网 | 国产99久久久国产精品免费二区 | 在线观看久 | 国产高清一区二区 | 中文字幕三区 | 国产精品婷婷午夜在线观看 | 二区视频在线 | 2019天天干天天色 | 亚洲视频久久 | 色综合色综合久久综合频道88 | 精品99在线 | 黄色大片免费播放 | 国产69熟 | 97福利视频 | 午夜12点 | 18岁免费看片 | 五月开心激情网 | 国产vs久久| 欧美性做爰猛烈叫床潮 | 亚洲免费观看视频 | 久久久国产影院 | 手机av观看 | 菠萝菠萝在线精品视频 | 日韩二区三区在线 | www.亚洲黄 | 日韩久久精品一区二区三区 | 成人久久久久 | 成人小视频在线播放 | 欧美日韩高清不卡 | 91三级视频| 一区av在线播放 | 久久久免费看 | 日韩激情视频在线观看 | 99精品国产99久久久久久福利 | 欧美91视频 | 99久久这里有精品 | 三上悠亚一区二区在线观看 | 欧美黄网站 | 久久精美视频 | 精品一区二区在线免费观看 | 91视频这里只有精品 | 美女久久网站 | 成人在线播放免费观看 | 97狠狠干| 久久国产露脸精品国产 | 91亚洲免费| 91最新网址 | 国产剧情在线一区 | 午夜精品一区二区三区四区 | 五月天综合在线 | 在线三级播放 | 久久精品国产亚洲a | 国产精品久久一区二区无卡 | 国产尤物在线视频 | 天天综合狠狠精品 | 精品亚洲一区二区三区 | 999成人国产 | 国产高清不卡 | 国产亚洲午夜高清国产拍精品 | 国产视频精品免费播放 | 中文字幕视频在线播放 | 国产网站在线免费观看 | 亚洲第一区在线播放 | 国产一级片直播 | 九九九九精品九九九九 | 青春草视频在线播放 | 日韩欧美大片免费观看 | 亚洲电影一区二区 | 狠狠狠干 | 午夜视频在线观看一区二区三区 | 四虎永久免费在线观看 | 久久亚洲在线 | 欧美性生活一级片 | 在线观看一级片 | 国产四虎影院 | 亚洲欧洲精品一区 | a色视频| 久久麻豆视频 | 亚洲激情精品 | 国产精品第52页 | 91亚洲精品久久久 | 91chinese在线| 日韩免费福利 | www.eeuss影院av撸 | 欧美日韩调教 | 免费看麻豆 | 日日夜夜狠狠干 | 天天爽夜夜爽人人爽曰av | 九九导航 | 日日操夜夜操狠狠操 | 久久国产精品一区二区三区四区 | 久久久久综合视频 | 亚洲精品视频在线免费 | 午夜视频在线观看一区 | 久久久久婷 | 四虎永久国产精品 | 国产成人精品一区二区三区在线 | 成人蜜桃 | 国产日韩欧美自拍 | 免费看一级特黄a大片 | 青青看片 | 亚洲国内精品在线 | 好看av在线 | 国产一区播放 | 天天射天天操天天 | 亚洲精品乱码久久久久 | 久草新在线 | 日韩激情免费视频 | 婷婷丁香激情网 | 久久久精品亚洲 | 久久五月婷婷丁香社区 | 色婷婷av在线 | h文在线观看免费 | 91女人18片女毛片60分钟 | 欧美一级高清片 | 狠狠综合久久 | 成人全视频免费观看在线看 | 视频在线观看国产 | 日韩a在线 | 99在线热播精品免费99热 | 亚洲精品在线视频网站 | 久久综合九色综合欧美狠狠 | 久久久久久中文字幕 | 欧美精品亚州精品 | 国产精品久久久久久久久久久不卡 | 99在线免费视频 | 国产精品日韩欧美一区二区 | 青青久视频| 视频在线国产 |