Mybatis常用工具类
所属分类 mybatis
浏览量 830
org.apache.ibatis.jdbc.SQL 构造 sql
org.apache.ibatis.jdbc.ScriptRunner 执行脚本
org.apache.ibatis.jdbc.SqlRunner 操作数据库
MetaObject 获取和设置对象的属性值
MetaClass 获取类相关的信息
ObjectFactory 创建结果对象
ProxyFactory 懒加载 代理对象生成
String newSql = new SQL()
.INSERT_INTO("PERSON")
.INTO_COLUMNS("ID", "NAME")
.INTO_VALUES("#{id}", "#{name}")
.toString();
org.apache.ibatis.jdbc.ScriptRunner 执行脚本
org.apache.ibatis.jdbc.SqlRunner 操作数据库
Connection connection = DriverManager.getConnection("jdbc:hsqldb:mem:testdb001","sa", "");
ScriptRunner scriptRunner = new ScriptRunner(connection);
scriptRunner.runScript(Resources.getResourceAsReader("init.sql"));
Map selectOne(String sql, Object... args)
查询行数不为1时,抛 SQLException 异常
List
Person person = new Person()
MetaObject metaObject = SystemMetaObject.forObject(person);
metaObject.hasGetter("name")
metaObject.getGetterNames()
metaObject.getGetterType("name")
MetaClass metaClass = MetaClass.forClass(Person.class, new DefaultReflectorFactory());
metaClass.hasDefaultConstructor()
Invoker invoker = metaClass.getGetInvoker("name");
Object name = invoker.invoke(person, null);
Invoker invoker = metaClass.getSetInvoker("name");
invoker.invoke(person, new String[]{"cat"});
ObjectFactory 默认实现 DefaultObjectFactory
create(type) 处理无参构造方法
create(type, constructorArgTypes, constructorArgs) 处理有参构造方法
setProperties(properties) 设置配置属性
isCollection(type) 判断是否为集合类型
ObjectFactory objectFactory = new DefaultObjectFactory();
Person person = objectFactory.create(Person.class);
ObjectFactory objectFactory = new DefaultObjectFactory();
Person person = objectFactory.create(Person.class,
Arrays.asList(Integer.class, String.class),
Arrays.asList(1, "tiger"));
ProxyFactory
JavassistProxyFactory
CglibProxyFactory
org.apache.ibatis.executor.loader.ProxyFactory
public interface ProxyFactory {
default void setProperties(Properties properties) {
// NOP
}
Object createProxy(Object target, ResultLoaderMap lazyLoader, Configuration configuration, ObjectFactory objectFactory, List< Class>> constructorArgTypes, List< Object> constructorArgs);
}
测试代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Date;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.jdbc.SQL;
import org.apache.ibatis.jdbc.ScriptRunner;
import org.apache.ibatis.jdbc.SqlRunner;
import org.apache.ibatis.reflection.DefaultReflectorFactory;
import org.apache.ibatis.reflection.MetaClass;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.SystemMetaObject;
import org.apache.ibatis.reflection.invoker.Invoker;
import dyyx.data.UserDTO;
public class UtilTest {
public static void main(String[] args) throws Exception {
System.out.println("hello,UtilTest,"+new Date());
Connection connection = DriverManager.getConnection("jdbc:h2:mem:testdb","sa", "");
ScriptRunner scriptRunner = new ScriptRunner(connection);
scriptRunner.runScript(Resources.getResourceAsReader("db/data.sql"));
SQL sql = new SQL();
sql.SELECT("id,name,birth,height,weight")
.FROM("t_user")
.WHERE("id=?");
SqlRunner sqlRunner = new SqlRunner(connection);
Map map = sqlRunner.selectOne(sql.toString(), 1);
connection.close();
System.out.println(sql);
System.out.println(map);
MetaClass metaClass = MetaClass.forClass(UserDTO.class, new DefaultReflectorFactory());
System.out.println(metaClass.hasDefaultConstructor());
System.out.println(metaClass.hasGetter("userName"));
System.out.println(StringUtils.join(metaClass.getGetterNames(),","));
UserDTO user = new UserDTO();
Invoker invoker = metaClass.getGetInvoker("userName");
Object userName = invoker.invoke(user, null);
System.out.println(userName);
invoker = metaClass.getSetInvoker("userName");
invoker.invoke(user, new Object[] {"tiger"});
System.out.println(user);
MetaObject metaObject = SystemMetaObject.forObject(user);
System.out.println(metaObject.hasGetter("userName"));
System.out.println(StringUtils.join(metaObject.getGetterNames(),","));
System.out.println(metaObject.getGetterType("userName"));
}
}
完整代码
https://gitee.com/dyyx/demos/blob/master/mybatis/src/main/java/dyyx/UtilTest.java
上一篇
下一篇
GO自定义模块实例
GO printf 格式化输出
mybatis 结果集处理
MySQL jdbc ResultSet
key忽略大小写的TreeMap
go select 与 定时器