selectByObjectToCount
方法,用于单表查询总数ListDynamicSearch
,用于处理sort、limit、>=、<=、in函数处理
java
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
ListDynamicSearch listDynamicSearch = ListDynamicSearch.newBuilder().addInSearches("id", list).build();
List<TTest> tTests = testDao.getTestList2(test, listDynamicSearch);
@FieldParam注
解,用于传递普通非Model对象处理
java
public TTest selectByName(@FieldParam("id") String id, @FieldParam("username") String username);
新增@EnableElabDB
注解,适用于SpringBoot启用DB配置
新增批量新增功能
批量修改,参考IBaseDaoSupport
新增SQL检测功能
增加通用的service业务处理
查询分页结果的时候,可以指定order by
pageModel.setOrderby("order by id desc");
如果涉及多个库的增删改查操作如何指定库? 通过catalog来指定,效果是在生成的sql语句中表名会变成 mvp.file 查询
@Table(name = "file",catalog = "mvp")
修复若干BUG.
基于注解配置:
@Configuration
public class JdbcBeanConfig {
@Bean
public JdbcTemplate jdbcTemplate(@Autowired DataSource dataSource) {
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);
return jdbcTemplate;
}
@Bean
public BasicBaseDao basicBaseDao(@Autowired JdbcTemplate jdbcTemplate) {
BasicBaseDao basicBaseDao = new BasicBaseDao();
basicBaseDao.setJdbcTemplate(jdbcTemplate);
return basicBaseDao;
}
@Bean
public ConfigurableFactory getConfigurableFactory() {
ConfigurableFactory configurableFactory = new ConfigurableFactory();
// 配置文件的文件位置
configurableFactory.setSqlConfigurableLocations("sql");
return configurableFactory;
}
@Bean
public DaoScannerConfigurer daoScannerConfigurer(@Autowired ConfigurableFactory configurableFactory) {
DaoScannerConfigurer daoScannerConfigurer = new DaoScannerConfigurer();
// db层要扫描的包
daoScannerConfigurer.setBasePackage("com.elab.service.business.daos.*");
// 持久层操作对象
daoScannerConfigurer.setBasicBaseDaoName("basicBaseDao");
daoScannerConfigurer.setConfigurableFactory(configurableFactory);
return daoScannerConfigurer;
}
}
基于配置文件配置:
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="mysqlDataSource"/>
</bean>
<bean id="basicBaseDao" class="com.elab.core.dao.BasicBaseDao">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<!-- 构建一个配置工厂 -->
<bean id="configurableFactory" class="com.elab.core.sql.ConfigurableFactory">
<property name="sqlConfigurableLocations" value="sql"/>
</bean>
<!-- 扫描包 -->
<bean id="daoScannerConfigurer" class="com.elab.core.spring.DaoScannerConfigurer">
<property name="basePackage" value="com.db.service.dao"/>
<property name="basicBaseDaoName" value="basicBaseDao"/>
<property name="configurableFactory" ref="configurableFactory"/>
</bean>
public TTest getTestObject(String id);
public List getTestList(TTest id);
public TTest selectByName(@FieldParam("id") String id, @FieldParam("username") String username);
2. SQL文件通常放在resources/sql下面
SQL文件的规范参考
```xml
<!-- 这里面的name对应dao的接口层指定的XmlGroupName的值 -->
<sqlGroup name="test">
<!-- 对应dao的接口层的方法 -->
<sql id="getTestObject">
select
id
,username,name,sex,status,created,time,test_id,love_name
from t_test
where
id = :id
</sql>
</sqlGroup>
参考实体 : 这里的一对多关系会根据你的属性对象来确定是返回一个或者多个
@Table(name = "t_test")
public class TTest {
// 表字段 : t_test.id// @javax.persistence.Column(name="ids")
@Id
private Integer id;
// 表字段 : t_test.test_id @Column(name = "test_id")
@Column(name = "test_id")
private String testId;
@Ignore
private String girlName;
// 对应的sql文件中的编号,参数就是JoinColumn中需要将实体和sql中的参数对应
@JoinTable(schema = "test.selectByExample", joinColumns = {
@JoinColumn(name = "id", referencedColumnName = "id"),
@JoinColumn(name = "status", referencedColumnName = "status")
})
private TTest test;
@JoinTable(schema = "test.selectByExample", joinColumns = {
@JoinColumn(name = "testId", referencedColumnName = "test_id")
})
private List testList;
下面是集成自IBaseDaoSupport的操作
java
@Test
public void testInserCase() throws Exception {
TTest test = new TTest();
test.setStatus("1");
test.setUsername("某某某xx111");
// 这里是非手写的语句,集成自IBaseDaoSupport操作
int insert = testDao.insert(test);
System.out.println(insert);
}
修改
@Test
public void testUpdateCase() throws Exception {
TTest test = new TTest();
test.setId(1);
test.setStatus("1");
test.setUsername("某某某xx33333333");
int insert = testDao.updateById(test);
System.out.println(insert);
}
查询
@Test
public void testQueryCase() throws Exception {
TTest test = new TTest();
test.setId(1123);
test.setStatus("1");
// test.setUsername("某某某xx2121212");
List tTests = testDao.selectByList(test);
test.setId(1);
TTest test1 = testDao.selectByObject(test);
System.out.println(test1.toString());
System.out.println(tTests.size());
}
## 特殊操作
### 动态参数
1. 例如动态表名,或者动态字段
```xml
1. select * from $table
2. selct * from table order by $column
实现RowMapper接口 ``` // 该类已经是最底层的赋值方法了,可以根据具体业务去实现不同的处理, // 如果对数据库的字段有特殊处理的,可以在这个转换成去实现,比如type转换、日期转换等等。 public class TestRowMapper implements RowMapper {
@Override public TTest mapRow(ResultSet resultSet, int i) throws SQLException { TTest test = new TTest(); int id = resultSet.getInt("id"); String username = resultSet.getString("username"); String name = resultSet.getString("name"); test.setId(id); test.setUsername(username); test.setName(name); return test; } }
// 然后接口层 可以通过公用的selectByMapper(参数,new TestRowMapper());
TTest test = new TTest(); test.setStatus("1"); TestRowMapper mapper = new TestRowMapper(); List tTests1 = testDao.selectByList(test); List tTests = testDao.selectByMapper(test, mapper);
### in like 操作
如果是in like 等函数:
sql.xml中
```java
// sql
select * from table where name like :name
// java
model.setName("%mmm%");
// sql
select * from table where id in :idList
// java
List<String> list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
// 上面最好用对象包这这个list
帐号: admin 密码:111111
选择表结构生成特定的内部代码结构。