jkami

jkami简介及特征

jkami是对jdbc轻量级的封装,不需要第三方jar包 实现 类似Hibernate实体维护和Mybaits SQL分离的两大优势。 具有以下特征:

Quick Start

 <dependency>
    <groupId>com.github.lftao</groupId>
    <artifactId>jkami</artifactId>
    <version>1.0.6</version>
</dependency> ## spring config
 <bean class="com.javatao.jkami.spring.MapperScannerConfigurer">
    <property name="dataSourceId" value="dataSource1" />
    <property name="basePackage" value="jkami.demo.dao" />
    <property name="dbType" value="mysql" />
    <property name="lazybean" value="true" />
    <!-- 默认对应dao同级下的sql文件夹 -->
    <!--<property name="sqlpath" value="/sql/" /> -->
 </bean>

接口实体[User.java]

@Depth(2)//嵌套实体查询深度,可不填写,默认为2层
@Table("tb_user")//对象表名
public class User implements Serializable {
    private static final long serialVersionUID = 1208054851593657045L;
  
    @Key
    private Long id;
    private String name;
    private Integer age;
    private Date birthday;
    // 默认是字段的 小驼峰命名规则 nick_name
    private String nickName;
    
    // 对应数据库字段
    @Column("tel")
    private String mobile;
    
    // 级联查询(如果开启懒加载只在第一次get时候读取) > 可选参数自身实体
    @ResultType(UserOrder.class)
    @Sql("select tb.* from tb_user_order tb where tb.user_id = :id")
    private List<UserOrder> userOrder;
	 ....

}

接口定义[IUserDao.java]

@KaMiDao
@ResultType(User.class)//默认查询返回类型
//继承接口提供单表的增删改查操作
public interface IUserDao extends KaMiDaoInterface<User>{
 
    User findUserByMobile(@Param("tel") Long mobile);
     
    List<User> findListByName(@Param("name") String name);

    // :age or ${age}
    @ResultType(Long.class)
    @Sql("select count(1) from tb_user where age > :age ")
    Long countAge(@Param("age") int age);
	   
    @ResultType(Map.class)
    List<Map<String, Object>> findMapByName(@Param("name") String name);
	    
    @PageQuery
    Page<User> findMyPage(@Param("map") Map<String, Object> map);
}  ### 接口定义[IUserOrderDao.java]
 
@KaMiDao
public interface IUserOrderDao {
    // 执行更新插入,需要返回值
    @ExecuteUpdate
    int[] insertOrders(@Param("orders") List<UserOrder> orders);

    // 执行更新插入,不需要返回值 可以不用 @ExecuteUpdate
    void insertOrdersVoid(@Param("orders") List<UserOrder> orders);
}

SQL文件[findMapByName.sql]

select
	*
from
	tb_user
where
	name = :name

SQL文件[findMyPage.sql]

select
	*
from
	tb_user
where
	1=1
<#if map["name"]??>
    and name like '%${map["name"]}%'
</#if>
<#if map["id"]??>
    and id = '${map["id"]}'
</#if>
<#if id??>
    and id = '${id}'
</#if>

SQL文件[insertOrders.sql]

<#list orders as os>
insert into tb_user_order(name,user_id,create_date) values('${os.name}',${os.user.id!os.userId},'${os.createDate?string("yyyy-MM-dd HH:mm:ss")}');
</#list>

测试代码

https://github.com/lftao/jkami-demo

其他

喜欢请右上角星星(star)点一点,谢谢