beetlsql的基础概念

beetlSql是一个orm框架。

据官方文档所述:比hibernete和mybatis综合素质要强的太多。

它的核心是SQLManager

代码如下所示:

public static void main(String[] args) {
		String driver = "com.mysql.jdbc.Driver";
		String url ="jdbc:mysql://localhost:3306/test1";
		String userName="root";
		String password = "123456";
		DBStyle dbStyle = new MySqlStyle();
		SQLLoader sqlLoader = new ClasspathLoader();
		
		ConnectionSource ds = ConnectionSourceHelper.getSimple(driver, url, userName, password);
		NameConversion nc = new UnderlinedNameConversion();
		Interceptor[] inters =new Interceptor[]{new DebugInterceptor()};
		SQLManager sqlManager = new SQLManager(dbStyle, sqlLoader, ds, nc, inters);
		List list = sqlManager.all(User.class);
		System.out.println(list);
		
		
}

解释:

DBStyle:方言。不同的数据库总有些不同的sql,作者做了很多的方言处理。这里新建的是mysql

SQLLoader :sql模板加载器。hibernate是完全没有sql。mybatis是全部都是sql。而beetlsql对于一些简单的单表查询已经有现成的封装方法,可以直接使用。但项目中总会有些特殊的sql,这时候sql就要写到sql模板里面去。

ConnectionSource:这个不必说,数据源

NameConversion:表名和类名的映射关系,以及列名和属性名的映射关系。

官方包里给出了三个实现:

  • DefaultNameConversion 数据库名和java属性名保持一致,如数据库表User,对应Java类也是User,数据库列是sysytemId,则java属性也是systemId,反之亦然
  • UnderlinedNameConversion 将数据库下划线去掉,首字母大写,如数据库是SYS_USER(oralce数据库的表和属性总是大写的), 则会改成SysUser
  • JPA2NameConversion 支持JPA方式的映射,适合不能用确定的映射关系(2.7.4以前采用JPANameConversion过于简单,已经不用了)

Interceptor是拦截器,在执行sql前和sql后执行。它不能针对特殊的sql进行拦截,而是所有的sql都要拦截。本例添加了一个DebugInterceptor,当有sql执行时,会在控制台打印sql语句参数及返回值

SQLManager:核心管理器。

这里面方法很多。

比如:public List all(Class clazz) 

这是根据class类型返回所有的List.它是怎么做到的呢?它拿到了class的name,然后根据NameConversion推断出表的名字,接着就是select * from 表名了。

比如: public int insert(Class clazz, Object paras) 

这是个插入方法,也是根据clazz推测出表名,然后根据paras对象的fieldName/fieldvalue转换成

insert into 表名 (fieldName1,fieldName2,fieldName3....) values(fieldvalue1,fieldvalue2,fieldvalue3....)

这个要注意,beetsql有两个注解:

@AutoID:代表着自增id,标在pojo的id上

@AssignID:代表着非自增id,标在pojo的id上

在插入表有自增id的情况下,应该使用这个:

insert(Class clazz, Object paras, KeyHolder holder),这个KeyHolder还会返回自增id.

比如:public int updateById(Object obj)

这个是修改方法,根据object的class推测出表名,并且根据类里带@AutoID或者@AssignID的那个属性当作id去修改。如果属性为null,也会修改为null.如下sql语句:

update xxx set aaa= 1 ,bbb =2,ccc = null where id  =2

比如: public int updateTemplateById(Object obj)

这个和上个差不多,只是为null的属性不参与更新。

SqlManager有很多很多的方法供使用,但这些都是单表操作,满足不了日益增长的需要。对于特殊的sql语句,我们在下一章介绍。

你可能感兴趣的:(模板)