mybatis mapper學習4-MyBatis的Mapper接口以及Example的實例函數及詳解


mybatis3系列文章目錄鏈接


mybatis能夠自動生成sql語句,也能夠添加自定義sql語句

使用mybatis generator生成XX.java,XXExample.java,XXmapper.java,XXmapper.xml四個數據庫表映射文件,

 

一、Example實例解析

mybatis的逆向工程中會生成實例及實例對應的XXExample.java,XXExample.java包含了對象的常用查詢方法

XXExample有三個內部類,GeneratedCriteria,Criteria,Criterion

創建內部類Criteria用於查詢,代碼示例如下看表達:

XXExample example = new  XXExample();//新建XX對象的example對象進行查詢,XXExample繼承XX
XXExample.Criteria  c = example.Criteria();//new一個當前example的內部類Criteria
c.andXXIsNull();//設置查詢條件,某值為空
c.andXXIsNotNull();//設置查詢條件,某值不空
//使用mapper進行查詢
List<XX> data = new XXMapper.selectByExample(example);

 

方法 說明
example.setOrderByClause(“字段名 ASC”); 添加升序排列條件,DESC為降序
example.setDistinct(false) 去除重復,boolean型,true為選擇不重復的記錄。
criteria.andXxxIsNull 添加字段xxx為null的條件
criteria.andXxxIsNotNull 添加字段xxx不為null的條件
criteria.andXxxEqualTo(value) 添加xxx字段等於value條件
criteria.andXxxNotEqualTo(value) 添加xxx字段不等於value條件
criteria.andXxxGreaterThan(value) 添加xxx字段大於value條件
criteria.andXxxGreaterThanOrEqualTo(value) 添加xxx字段大於等於value條件
criteria.andXxxLessThan(value) 添加xxx字段小於value條件
criteria.andXxxLessThanOrEqualTo(value) 添加xxx字段小於等於value條件
criteria.andXxxIn(List<?>) 添加xxx字段值在List<?>條件
criteria.andXxxNotIn(List<?>) 添加xxx字段值不在List<?>條件
criteria.andXxxLike(“%”+value+”%”) 添加xxx字段值為value的模糊查詢條件
criteria.andXxxNotLike(“%”+value+”%”) 添加xxx字段值不為value的模糊查詢條件
criteria.andXxxBetween(value1,value2) 添加xxx字段值在value1和value2之間條件
criteria.andXxxNotBetween(value1,value2) 添加xxx字段值不在value1和value2之間條件
 

二、mapper接口中的方法解析

mapper.java的函數及方法,按命名的字面意思理解用途。

countByExample,帶example的一般都是使用example查詢條目數。selectByPrimaryKey使用id查詢結果集

 

mapper中的方法和xml中的sql語句是對應的,

如果在mapper中傳入example對象,xml中會解析example的值,取值拼寫sql語句進行查詢

傳入String類型的key,id等,xml直接取值拼寫sql進行查詢 

方法 功能說明
int countByExample(UserExample example) thorws SQLException 按條件計數
int deleteByPrimaryKey(Integer id) thorws SQLException 按主鍵刪除
int deleteByExample(UserExample example) thorws SQLException 按條件查詢
String/Integer insert(User record) thorws SQLException 插入數據(返回值為ID)
User selectByPrimaryKey(Integer id) thorws SQLException 按主鍵查詢
ListselectByExample(UserExample example) thorws SQLException 按條件查詢
ListselectByExampleWithBLOGs(UserExample example) thorws SQLException 按條件查詢(包括BLOB字段)。只有當數據表中的字段類型有為二進制的才會產生。
int updateByPrimaryKey(User record) thorws SQLException 按主鍵更新
int updateByPrimaryKeySelective(User record) thorws SQLException 按主鍵更新值不為null的字段
int updateByExample(User record, UserExample example) thorws SQLException 按條件更新
int updateByExampleSelective(User record, UserExample example) thorws SQLException 按條件更新值不為null的字段

三、XML文件解析

舉例一個xml文件中的一條語句

  <select id="countByExample" parameterType="com.ctvit.cportal.core.config.entity.XXExample" resultType="java.lang.Integer" >
    select count(*) from t_app_second_config_item
    <if test="_parameter != null" >
      <include refid="Example_Where_Clause" />
    </if>
  </select>

語句的id與mapper.java中的方法名對應,

parameterType是傳入參數的類型,resultType是返回結果的類型,傳參和返回有很多種情況,另開文章講

這樣對照起來的話,我們可以自主在mapper.java和mapper.xml中增加或刪除相應的查詢語句,以供調用

比如增加一條新增版本批量復制語句“copyBatchByVersion”

mapper.java中增加方法

int copyBatchByVersion(String old_version,String new_version) thorws SQLException;
/*根據舊版本號old_version查找記錄
復制記錄
同時將其中的old_version替換為new_version
返回值為復制成功的條數
*/

mapper.xml中增加語句

  <insert id="copyBatchByVersion">
    insert into t_xx
    (XX_id,xx_value,xx_version)
    (select
    XX_id,xx_value,#{1})
    from t_xx where xx_version = #{0})
  </insert>

其中#{0},#{1}代表輸入的第1,2個參數

 

四、應用舉例

1.查詢

① selectByPrimaryKey()

User user = XxxMapper.selectByPrimaryKey(100); //相當於select * from user where id = 100    

② selectByExample() 和 selectByExampleWithBLOGs()

UserExample example = new UserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("wyw");
criteria.andUsernameIsNull();
example.setOrderByClause("username asc,email desc");
List<?>list = XxxMapper.selectByExample(example);
//相當於:select * from user where username = 'wyw' and  username is null order by username asc,email desc

注:在iBator逆向工程生成的文件XxxExample.Java中包含一個static的內部類Criteria,Criteria中的方法是定義SQL 語句where后的查詢條件。

2.插入數據

①insert()

User user = new User();
user.setId("dsfgsdfgdsfgds");
user.setUsername("admin");
user.setPassword("admin")
user.setEmail("wyw@163.com");
XxxMapper.insert(user);
//相當於:insert into user(ID,username,password,email) values ('dsfgsdfgdsfgds','admin','admin','wyw@126.com');

3.更新數據

①updateByPrimaryKey()

User user =new User();
user.setId("dsfgsdfgdsfgds");
user.setUsername("wyw");
user.setPassword("wyw");
user.setEmail("wyw@163.com");
XxxMapper.updateByPrimaryKey(user);
//相當於:update user set username='wyw', password='wyw', email='wyw@163.com' where id='dsfgsdfgdsfgds'

②updateByPrimaryKeySelective()

User user = new User();
user.setId("dsfgsdfgdsfgds");
user.setPassword("wyw");
XxxMapper.updateByPrimaryKey(user);
//相當於:update user set password='wyw' where id='dsfgsdfgdsfgds'

③ updateByExample() 和 updateByExampleSelective()

UserExample example = new UserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("admin");
User user = new User();
user.setPassword("wyw");
XxxMapper.updateByPrimaryKeySelective(user,example);
//相當於:update user set password='wyw' where username='admin'

updateByExample()更新所有的字段,包括字段為null的也更新,建議使用 updateByExampleSelective()更新想更新的字段

4.刪除數據

①deleteByPrimaryKey()

XxxMapper.deleteByPrimaryKey(1);  //相當於:delete from user where id=1

②deleteByExample()

UserExample example = new UserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("admin");
XxxMapper.deleteByExample(example);
//相當於:delete from user where username='admin'

5.查詢數據數量

①countByExample()

UserExample example = new UserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("wyw");
int count = XxxMapper.countByExample(example);
//相當於:select count(*) from user where username='wyw'

countByExample


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM