mybatis之XMLLanguageDriver使用方式例子
来源:互联网 发布:小说我知女人心 编辑:程序博客网 时间:2024/06/06 19:30
mybatis中的XMLLanguageDriver类出现的一大原因在于:使用注解配置sql语句没有使用xml的方式灵活和强大,为了弥补这种缺陷,XMLLanguageDriver出现了。下面只是简单的举个例子,贴点代码,不多做解释。因为对于使用过mybatis的人,一看就明白。
SimpleSelectInLangDriver
package com.core.mybatis.languageDriver;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.apache.ibatis.mapping.SqlSource;import org.apache.ibatis.scripting.LanguageDriver;import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver;import org.apache.ibatis.session.Configuration;//一次编写即可public class SimpleSelectInLangDriver extends XMLLanguageDriver implements LanguageDriver { private static final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); @Override public SqlSource createSqlSource(Configuration configuration, String script, Class<?> parameterType) { Matcher matcher = inPattern.matcher(script); if (matcher.find()) { script = matcher.replaceAll("<foreach collection=\"$1\" item=\"_item\" open=\"(\" " + "separator=\",\" close=\")\" >#{_item}</foreach>"); } script = "<script>" + script + "</script>"; return super.createSqlSource(configuration, script, parameterType); }}
SimpleUpdateLangDriver
package com.core.mybatis.languageDriver;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.apache.ibatis.mapping.SqlSource;import org.apache.ibatis.scripting.LanguageDriver;import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver;import org.apache.ibatis.session.Configuration;public class SimpleUpdateLangDriver extends XMLLanguageDriver implements LanguageDriver{ private final Pattern inPattern = Pattern.compile("\\(#\\{(\\w+)\\}\\)"); @Override public SqlSource createSqlSource(Configuration configuration, String script, Class<?> parameterType) { Matcher matcher = inPattern.matcher(script); if (matcher.find()) { StringBuilder sb = new StringBuilder(); sb.append("<set>"); sb.append("<if test=\"name != null \"> name = #{name},</if>"); sb.append("<if test=\"price != null \"> price = #{price},</if>"); /* for (Field field : parameterType.getDeclaredFields()) { String tmp = "<if test=\"_field != null\">_column=#{_field},</if>"; sb.append(tmp.replaceAll("_field", field.getName()).replaceAll("_column", CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, field.getName()))); }*/ sb.deleteCharAt(sb.lastIndexOf(",")); sb.append("</set>"); script = matcher.replaceAll(sb.toString()); script = "<script>" + script + "</script>"; } return super.createSqlSource(configuration, script, parameterType); }}
BookDao是dao层
package com.springmvc.family.dao;import java.util.List;import org.apache.ibatis.annotations.Lang;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Param;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.annotations.Update;import com.core.mybatis.languageDriver.SimpleSelectInLangDriver;import com.core.mybatis.languageDriver.SimpleUpdateLangDriver;import com.springmvc.family.model.Book;/** * @author lihong 2016年6月24日 下午2:12:19 * @version v1.0 */@Mapperpublic interface BookDao{ /** * @param book * @author lihong 2016年6月24日 下午2:12:39 * @since v1.0 */ public void addBook(Book book); /** * 与addBook功能相同,此处是为了测试两种插入数据并获取主键的方法 * @param book void * @author lihong 2016年6月24日 下午2:58:33 * @since v1.0 */ public void insert(Book book); /** * @return List<Book> * @author lihong 2016年6月24日 下午2:12:59 * @since v1.0 */ public List<Book> getAll(Book book); @Select("SELECT * FROM book WHERE id IN (#{idList})") @Lang(SimpleSelectInLangDriver.class) List<Book> getBookByIdInBatch(@Param("idList") List<Integer> idList); @Update("UPDATE book (#{book}) WHERE id = #{id}") @Lang(SimpleUpdateLangDriver.class) void updateUsersById(Book book);}
Book 类是实体类
@Alias("Book")public class Book implements java.io.Serializable{ /** * @Fields serialVersionUID : */ private static final long serialVersionUID = -8019185784560242092L; private int id; private String name; private float price; /** * @author lihong 2016年6月24日 下午2:11:59 * @since v1.0 */ public Book() { } /** * @return the id */ public int getId() { return id; } /** * @param id the id to set */ public void setId(int id) { this.id = id; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the price */ public float getPrice() { return price; } /** * @param price the price to set */ public void setPrice(float price) { this.price = price; }}
BookDaoTest 类是使用测试用例
import java.util.ArrayList;import java.util.List;import org.junit.Test;import org.springframework.beans.factory.annotation.Autowired;import com.springmvc.AnnotationServiceTest;import com.springmvc.family.dao.BookDao;import com.springmvc.family.model.Book;/** * @author lihong 2016年6月24日 下午2:37:49 * @version v1.0 */public class BookDaoTest extends AnnotationServiceTest{ @Autowired private BookDao bookDao; private Book getBook() { Book book = new Book(); book.setName("测试生成的书名"); book.setPrice(2.32f); return book; } /** * 测试插入数据后返回自增的主键id值 * @author lihong 2016年6月24日 下午2:45:56 * @since v1.0 */ @Test public void testAdd() { for(int i = 0; i < 10; i++) { Book book = getBook(); bookDao.addBook(book); System.out.println("数据库自增主键策略返回的id是: " + book.getId() + " "); } } /** * 采用另外一种配置方式测试插入数据后返回自增的主键id值 * @author lihong 2016年6月24日 下午3:02:09 * @since v1.0 */ @Test public void testInsert() { for(int i = 0; i < 10; i++) { Book book = getBook(); bookDao.insert(book); System.out.println("数据库自增主键策略返回的id是: " + book.getId() + " "); } } /** * @author lihong 2016年6月24日 下午2:49:51 * @since v1.0 */ @Test public void testGetAll() { for(int i = 0; i < 4; i++) { //循环是为了验证是否有缓存,是否只是到数据库查询一次 Book book = new Book(); book.setName("测试生成的书名"); book.setPrice(2.32f); List<Book> all = bookDao.getAll(book); for(Book bk : all) { System.out.print("id: " + bk.getId() + " "); System.out.print("name: " + bk.getName() + " "); System.out.print("price: " + bk.getPrice() + " "); System.out.println("-----------------------------------------------------"); } } } @Test public void testGetInBatchById() { List<Integer> idList = new ArrayList<Integer>(); idList.add(24); idList.add(25); List<Book> books = bookDao.getBookByIdInBatch(idList); for(Book book : books) { System.out.print("id: " + book.getId() + " "); System.out.print("name: " + book.getName() + " "); System.out.print("price: " + book.getPrice() + " "); System.out.println("-----------------------------------------------------"); } } @Test public void testUpdateBookById() { Book book = new Book(); book.setId(23); book.setName("***************"); book.setPrice(2.32f); bookDao.updateUsersById(book); }}
阅读全文
0 0
- mybatis之XMLLanguageDriver使用方式例子
- mybatis blob使用方式
- MyBatis之 mapper代理方式
- mybatis 的 resultMap使用方式
- MyBatis Like语句使用方式
- mybatis学习之模糊查询用户例子
- mybatis学习之添加新用户例子
- mybatis入门例子之BindingException异常
- Mybatis笔记之四 -- mybatis与spring整合简单例子
- mybatis学习之路----动态sql之if条件判断各种使用方式
- Mybatis使用之分页
- mybatis 例子
- mybatis例子
- mybatis例子
- MyBatis之自查询使用递归实现 N级联动效果(两种实现方式)
- mybatis系列之 mybatis-generator的使用
- Mybatis之Mapper动态代理方式
- springboot之整合mybatis-annotation(注解方式)
- Linux大于2T的磁盘自动分区脚本
- Java_12 抽象类
- 第一行代码(六)持久化存储技术
- python 获取当前函数的 函数名 sys._getframe().f_code.co_name
- 积跬步,至千里
- mybatis之XMLLanguageDriver使用方式例子
- HDU 1222_Wolf and Rabbit (扩展欧几里德定理)
- python爬虫爬取NBA贴吧的所有精品贴
- Java取一年有多少周、某周的第一天和最后一天
- K
- 交错01串-网易2018校招内推
- 关于TB 编译:compile&elab
- 开始我的机器学习
- R语言svm支持向量机多元回归预测