Tk.mybatis零sql語句實現動態sql查詢的方法(4種)
有時候,查詢數據需要根據條件使用動態查詢,這時候需要使用動態sql,通常我們會自己寫動態sql來實現,比如:
<select id="findStudentByCondition" resultType="com.example.service.entity.Student"> SELECT id, name, score FROM tbl_student <where> <if test="score !=null and score > 0"> score > #{score} </if> <if test="name !=null and name != ''"> <bind name="pattern" value=" '%' + name + '%' "/> AND name LIKE #{pattern} </if> </where> ORDER BY score DESc </select>
這個sql是查詢成績大於90並且名字包含“i”的學生信息。但是有時候又加瞭一個條件,又要去改sql,改入參,有沒有一種方式可以將寫動態sql像寫代碼一樣實現呢?如果你有這個想法,推薦你瞭解一下Tk.mybatis。
關於Tk.mybatis的介紹以及如何配置,本文暫不介紹,不瞭解的請自行百度,本文隻介紹如何基於tk.mybatis實現不寫sql語句也能實現動態sql查詢。
實現方式:
1. 使用Example實現
2. 使用Example.createCriteria
3. 使用Example.builder實現
4. 使用WeekendSqls實現
方式一:使用Example實現
/** * 第一種:使用example查詢 */ @Test public void testSelectByExample() { Example example = new Example(Student.class); // 設置查詢列 example.selectProperties("id","name","score"); // 動態sql example.and() .andGreaterThan("score",90) .andLike("name", "%i%"); // 去重 example.setDistinct(true); // 排序 example.orderBy("score").desc(); List<Student> students = studentMapper.selectByExample(example); System.out.println(students); }
方式二:使用example.createCriteria實現
/** * 第二種:使用example.createCriteria查詢 */ @Test public void testSelectByExampleCriteria() { Example example = new Example(Student.class); // 設置查詢列 example.selectProperties("id","name","score"); // 動態查詢 example.createCriteria() .andGreaterThan("score",90) .andLike("name", "%i%"); // 去重 example.setDistinct(true); // 排序 example.orderBy("score").desc(); List<Student> students = studentMapper.selectByExample(example); System.out.println(students); }
方式三:使用Example.builder實現
/** * 第三種:使用Example.builder實現 */ @Test public void testSelectByExampleBuilder() { Example example = Example.builder(Student.class) // 查詢列 .select("id","name","score") // 動態sql .where(Sqls.custom() .andGreaterThan("score",90) .andLike("name","%i%")) // 去重 .distinct() // 排序 .orderByDesc("score") .build(); List<Student> students = studentMapper.selectByExample(example); System.out.println(students); }
方式四:使用weekendSqls實現
/** * 第四種:使用weekendSqls實現 */ @Test public void testSelectByWeekendSqls() { WeekendSqls<Student> sqls = WeekendSqls.custom(); sqls = sqls .andGreaterThan(Student::getScore,90) .andLike(Student::getName,"%i%"); List<Student> sysRoles = studentMapper.selectByExample(Example.builder(Student.class) .select("id","name","score") .where(sqls) .distinct() .orderByDesc("score") .build()); System.out.println(sysRoles); }
到此這篇關於Tk.mybatis零sql語句實現動態sql查詢的方法(4種)的文章就介紹到這瞭,更多相關Tk.mybatis 動態sql查詢內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- idea使用Mybatis逆向工程插件詳情
- MyBatis圖文並茂講解註解開發一對多查詢
- MyBatis通用Mapper中的通用example(排序)詳解
- Mybatis入門指南之實現對數據庫增刪改查
- mybatis example如何自動生成代碼 排序語句