# SmartJdbc **Repository Path**: xiaoyangge/SmartJdbc ## Basic Information - **Project Name**: SmartJdbc - **Description**: 轻量级ORM框架SmartJdbc - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 20 - **Created**: 2018-04-13 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 轻量级ORM框架SmartJdbc(Spring Boot+SpringMVC+SmartJdbc) # 1 简介 SmartJdbc一个简单易用的ORM框架,它支持sql构建、sql执行、命名参数绑定、查询结果自动映射和通用DAO。 SmartJdbc可以让你不用写DAO,不用写SQL。 # 2 入门 ## 2.1 安装 要使用 SmartJdbc, 只需将 SmartJdbc-1.0.5.jar 文件置于 classpath 中即可。 如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中: ```xml com.github.icecooly SmartJdbc 1.0.5 com.github.icecooly SmartJdbc-Spring 1.0.0 ``` 如果使用 Gradle 来构建项目,则需将下面的代码置于 build.gradle 文件的 dependencies 代码块中: ```groovy compile 'com.github.icecooly:SmartJdbc:1.0.5' compile 'com.github.icecooly:SmartJdbc-Spring:1.0.0' ``` # 3 例子 ## 3.1 简单增删改 增加 ```java User user=new User(); user.name="刘备"; user.userName="liubei"; user.password="111111"; user.id=dao.add(user); ``` 修改 ```java User user=dao.getById(User.class, 1); user.name="刘备2"; user.userName="liubei2"; user.password="222222"; user.id=dao.update(user); ``` 删除 ```java dao.deleteById(User.class, 1); ``` ## 3.2 基本查询 ```java User user=dao.getById(User.class, 1); User user=dao.getDomain(User.class,QueryWhere.create().where("userName", "test")); ``` ## 3.3 列表查询 ```java //查询用户名包含test的用户列表,按照创建时间降序 UserQuery query=new UserQuery(); query.userName="test"; query.orderType=UserQuery.ORDER_BY_CREATE_TIME_DESC; List list=dao.getList(query); ``` ## 3.4 复杂查询(如果数据库设计是三范式,不冗余存储数据,查询时可以自动join,不用手工写sql) ```java //查询角色名称是总监是用户列表 @DomainDefine(domainClass=User.class) public class User extends BaseDomain{ public String name; public String userName; public String password; public boolean gender; public Date lastLoginTime; @ForeignKey(domainClass=Department.class) public int departmentId; @ForeignKey(domainClass=Role.class) public int roleId; public String description; } public class UserInfo extends User{ @DomainField(foreignKeyFields="departmentId",field="name") public String departmentName; @DomainField(foreignKeyFields="roleId",field="name") public String roleName; } UserInfoQuery query=new UserInfoQuery(); query.roleName="总监"; query.pageSize=20; List users=dao.getList(query); ``` 更多可参考test/DAOTestCase.java # 4 Spring Boot中使用SmartJdbc SmartJdbcConfig.java ```java @Configuration @EnableTransactionManagement @AutoConfigureAfter({DataSourceConfig.class}) public class SmartJdbcConfig implements TransactionManagementConfigurer { // private static final Logger logger = LoggerFactory.getLogger(SmartJdbcConfig.class); // @Autowired private DataSource dataSource; // @PostConstruct public void init() { SqlSessionFactory sessionFactory=new SqlSessionFactory(); sessionFactory.setDataSource(dataSource); ConnectionManager.setTransactionManager(sessionFactory); Config.setTableNameFunc(clazz->{return "t"+convertFieldName(clazz.getSimpleName());});//表结构映射User->t_user Config.setConvertFieldNameFunc(this::convertFieldName);//字段映射userName->user_name Config.addSqlInterceptor(sessionFactory); } protected String convertFieldName(String name) { StringBuffer result = new StringBuffer(); for (char c : name.toCharArray()) { if (Character.isUpperCase(c)) { result.append("_"); } result.append(Character.toLowerCase(c)); } return result.toString(); } @Bean(name="annotationDrivenTransactionManager") public PlatformTransactionManager annotationDrivenTransactionManager() { return new DataSourceTransactionManager(dataSource); } } ``` # 5 其他 * [项目主页](https://github.com/icecooly/SmartJdbc) # 6 更新日志