mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 09:08:24 +08:00
v1.0.0 prepare
This commit is contained in:
parent
64ec296b18
commit
57c0ff2e0e
@ -108,17 +108,18 @@ public class MybatisFlexBootstrap {
|
|||||||
configuration.setLogImpl(logImpl);
|
configuration.setLogImpl(logImpl);
|
||||||
}
|
}
|
||||||
|
|
||||||
//init mappers
|
|
||||||
if (mappers != null) {
|
|
||||||
mappers.forEach(configuration::addMapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
//init sqlSessionFactory
|
//init sqlSessionFactory
|
||||||
this.sqlSessionFactory = new FlexSqlSessionFactoryBuilder().build(configuration);
|
this.sqlSessionFactory = new FlexSqlSessionFactoryBuilder().build(configuration);
|
||||||
|
|
||||||
//init dbType
|
//init dbType
|
||||||
this.dbType = FlexGlobalConfig.getConfig(environmentId).getDbType();
|
this.dbType = FlexGlobalConfig.getConfig(environmentId).getDbType();
|
||||||
|
|
||||||
|
//init mappers
|
||||||
|
if (mappers != null) {
|
||||||
|
mappers.forEach(configuration::addMapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
LogFactory.getLog(MybatisFlexBootstrap.class).debug("Mybatis-Flex has started.");
|
LogFactory.getLog(MybatisFlexBootstrap.class).debug("Mybatis-Flex has started.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -239,7 +239,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
sql.append(" AND ");
|
sql.append(" AND ");
|
||||||
}
|
}
|
||||||
sql.append('`').append(primaryKeys[i]).append("` = ?");
|
sql.append(wrap(primaryKeys[i])).append(" = ?");
|
||||||
}
|
}
|
||||||
return sql.toString();
|
return sql.toString();
|
||||||
}
|
}
|
||||||
@ -380,6 +380,9 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append("INSERT INTO ").append(wrap(tableInfo.getTableName()));
|
sql.append("INSERT INTO ").append(wrap(tableInfo.getTableName()));
|
||||||
String[] insertColumns = tableInfo.obtainInsertColumns();
|
String[] insertColumns = tableInfo.obtainInsertColumns();
|
||||||
|
for (int i = 0; i < insertColumns.length; i++) {
|
||||||
|
insertColumns[i] = wrap(insertColumns[i]);
|
||||||
|
}
|
||||||
sql.append("(").append(StringUtil.join(", ", insertColumns)).append(")");
|
sql.append("(").append(StringUtil.join(", ", insertColumns)).append(")");
|
||||||
sql.append(" VALUES ");
|
sql.append(" VALUES ");
|
||||||
|
|
||||||
|
|||||||
@ -92,6 +92,8 @@ public class FlexConfiguration extends Configuration {
|
|||||||
return statementHandler;
|
return statementHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addMappedStatement(MappedStatement ms) {
|
public void addMappedStatement(MappedStatement ms) {
|
||||||
//替换 RowMapper.insertRow 的主键生成器
|
//替换 RowMapper.insertRow 的主键生成器
|
||||||
@ -106,8 +108,8 @@ public class FlexConfiguration extends Configuration {
|
|||||||
}
|
}
|
||||||
//entity select
|
//entity select
|
||||||
else if (StringUtil.endsWithAny(ms.getId(), "selectOneById", "selectListByIds"
|
else if (StringUtil.endsWithAny(ms.getId(), "selectOneById", "selectListByIds"
|
||||||
, "selectListByQuery", "selectCountByQuery")) {
|
, "selectListByQuery")) {
|
||||||
ms = replaceResultHandler(ms);
|
ms = replaceResultMap(ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
super.addMappedStatement(ms);
|
super.addMappedStatement(ms);
|
||||||
@ -115,9 +117,9 @@ public class FlexConfiguration extends Configuration {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 替换 entity 查询的 ResultHandler
|
* 替换 entity 查询的 ResultMap
|
||||||
*/
|
*/
|
||||||
private MappedStatement replaceResultHandler(MappedStatement ms) {
|
private MappedStatement replaceResultMap(MappedStatement ms) {
|
||||||
|
|
||||||
TableInfo tableInfo = getTableInfo(ms);
|
TableInfo tableInfo = getTableInfo(ms);
|
||||||
if (tableInfo == null) {
|
if (tableInfo == null) {
|
||||||
@ -221,8 +223,8 @@ public class FlexConfiguration extends Configuration {
|
|||||||
.timeout(ms.getTimeout())
|
.timeout(ms.getTimeout())
|
||||||
.statementType(ms.getStatementType())
|
.statementType(ms.getStatementType())
|
||||||
.keyGenerator(keyGenerator) // 替换主键生成器
|
.keyGenerator(keyGenerator) // 替换主键生成器
|
||||||
.keyProperty(tableInfo.getMappedStatementKeyProperties())
|
.keyProperty(tableInfo.getKeyProperties())
|
||||||
.keyColumn(tableInfo.getMappedStatementKeyColumns())
|
.keyColumn(tableInfo.getKeyColumns())
|
||||||
.databaseId(databaseId)
|
.databaseId(databaseId)
|
||||||
.lang(ms.getLang())
|
.lang(ms.getLang())
|
||||||
.resultOrdered(ms.isResultOrdered())
|
.resultOrdered(ms.isResultOrdered())
|
||||||
|
|||||||
@ -228,7 +228,7 @@ public class TableInfo {
|
|||||||
IdInfo idInfo = primaryKeyList.get(i);
|
IdInfo idInfo = primaryKeyList.get(i);
|
||||||
primaryKeys[i] = idInfo.getColumn();
|
primaryKeys[i] = idInfo.getColumn();
|
||||||
|
|
||||||
if (idInfo.getKeyType() != KeyType.Auto || (idInfo.getBefore() != null && idInfo.getBefore())) {
|
if (idInfo.getKeyType() != KeyType.Auto && (idInfo.getBefore() != null && idInfo.getBefore())) {
|
||||||
insertIdFields.add(idInfo.getColumn());
|
insertIdFields.add(idInfo.getColumn());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -409,7 +409,7 @@ public class TableInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public String getMappedStatementKeyProperties() {
|
public String getKeyProperties() {
|
||||||
StringJoiner joiner = new StringJoiner(",");
|
StringJoiner joiner = new StringJoiner(",");
|
||||||
for (IdInfo value : primaryKeyList) {
|
for (IdInfo value : primaryKeyList) {
|
||||||
joiner.add(FlexConsts.ENTITY + "." + value.getProperty());
|
joiner.add(FlexConsts.ENTITY + "." + value.getProperty());
|
||||||
@ -418,10 +418,10 @@ public class TableInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public String getMappedStatementKeyColumns() {
|
public String getKeyColumns() {
|
||||||
StringJoiner joiner = new StringJoiner(",");
|
StringJoiner joiner = new StringJoiner(",");
|
||||||
for (IdInfo value : primaryKeyList) {
|
for (IdInfo value : primaryKeyList) {
|
||||||
joiner.add(FlexConsts.ENTITY + "." + value.getColumn());
|
joiner.add(value.getColumn());
|
||||||
}
|
}
|
||||||
return joiner.toString();
|
return joiner.toString();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -99,7 +99,8 @@ public class TableInfos {
|
|||||||
tableInfo.setCamelToUnderline(table.camelToUnderline());
|
tableInfo.setCamelToUnderline(table.camelToUnderline());
|
||||||
} else {
|
} else {
|
||||||
//默认为类名转驼峰下划线
|
//默认为类名转驼峰下划线
|
||||||
tableInfo.setTableName(StringUtil.camelToUnderline(entityClass.getSimpleName()));
|
String tableName = StringUtil.camelToUnderline(entityClass.getSimpleName());
|
||||||
|
tableInfo.setTableName(tableName);
|
||||||
}
|
}
|
||||||
|
|
||||||
//初始化字段相关
|
//初始化字段相关
|
||||||
|
|||||||
@ -0,0 +1,62 @@
|
|||||||
|
package com.mybatisflex.test;
|
||||||
|
|
||||||
|
import com.mybatisflex.annotation.Id;
|
||||||
|
import com.mybatisflex.annotation.Table;
|
||||||
|
import com.mybatisflex.core.enums.KeyType;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@Table("tb_account")
|
||||||
|
public class Account {
|
||||||
|
|
||||||
|
@Id(keyType = KeyType.Auto)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private String userName;
|
||||||
|
|
||||||
|
private int age;
|
||||||
|
|
||||||
|
private Date birthday;
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUserName() {
|
||||||
|
return userName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserName(String userName) {
|
||||||
|
this.userName = userName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getAge() {
|
||||||
|
return age;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAge(int age) {
|
||||||
|
this.age = age;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getBirthday() {
|
||||||
|
return birthday;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBirthday(Date birthday) {
|
||||||
|
this.birthday = birthday;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Account{" +
|
||||||
|
"id=" + id +
|
||||||
|
", userName='" + userName + '\'' +
|
||||||
|
", age=" + age +
|
||||||
|
", birthday=" + birthday +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
package com.mybatisflex.test;
|
||||||
|
|
||||||
|
import com.mybatisflex.core.BaseMapper;
|
||||||
|
|
||||||
|
public interface AccountMapper extends BaseMapper<Account> {
|
||||||
|
}
|
||||||
@ -0,0 +1,116 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com).
|
||||||
|
* <p>
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* <p>
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* <p>
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.mybatisflex.test;
|
||||||
|
|
||||||
|
import com.mybatisflex.core.MybatisFlexBootstrap;
|
||||||
|
import com.mybatisflex.core.paginate.Page;
|
||||||
|
import com.mybatisflex.core.querywrapper.QueryWrapper;
|
||||||
|
import com.mybatisflex.core.util.UpdateEntity;
|
||||||
|
import org.apache.ibatis.logging.stdout.StdOutImpl;
|
||||||
|
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
|
||||||
|
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class EntityTestStarter {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
DataSource dataSource = new EmbeddedDatabaseBuilder()
|
||||||
|
.setType(EmbeddedDatabaseType.H2)
|
||||||
|
.addScript("schema.sql")
|
||||||
|
.addScript("data.sql")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
MybatisFlexBootstrap bootstrap = new MybatisFlexBootstrap()
|
||||||
|
.setDataSource(dataSource)
|
||||||
|
.setLogImpl(StdOutImpl.class)
|
||||||
|
.addMapper(AccountMapper.class)
|
||||||
|
.start();
|
||||||
|
|
||||||
|
|
||||||
|
// //查询 ID 为 1 的数据
|
||||||
|
Account account = bootstrap.execute(AccountMapper.class, accountMapper ->
|
||||||
|
accountMapper.selectOneById(1));
|
||||||
|
System.out.println(account);
|
||||||
|
|
||||||
|
|
||||||
|
Account newAccount = new Account();
|
||||||
|
newAccount.setUserName("lisi");
|
||||||
|
newAccount.setAge(18);
|
||||||
|
newAccount.setBirthday(new Date());
|
||||||
|
bootstrap.execute(AccountMapper.class, accountMapper ->
|
||||||
|
accountMapper.insert(newAccount));
|
||||||
|
|
||||||
|
//新增后自动回填主键
|
||||||
|
System.out.println("newAccount.id >>>>>> " + newAccount.getId());
|
||||||
|
|
||||||
|
|
||||||
|
List<Account> newAccountList = new ArrayList<>();
|
||||||
|
for (int i = 0; i < 5; i++) {
|
||||||
|
Account insertAccount = new Account();
|
||||||
|
insertAccount.setUserName("new_user_" + i);
|
||||||
|
insertAccount.setAge(22);
|
||||||
|
insertAccount.setBirthday(new Date());
|
||||||
|
newAccountList.add(insertAccount);
|
||||||
|
}
|
||||||
|
|
||||||
|
//批量插入数据
|
||||||
|
bootstrap.execute(AccountMapper.class, accountMapper ->
|
||||||
|
accountMapper.insertBatch(newAccountList));
|
||||||
|
|
||||||
|
|
||||||
|
bootstrap.execute(AccountMapper.class, accountMapper ->
|
||||||
|
accountMapper.deleteById(1));
|
||||||
|
|
||||||
|
|
||||||
|
bootstrap.execute(AccountMapper.class, accountMapper ->
|
||||||
|
accountMapper.deleteBatchByIds(Arrays.asList(1, 2, 3)));
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, Object> where = new HashMap<>();
|
||||||
|
where.put("id", 2);
|
||||||
|
bootstrap.execute(AccountMapper.class, accountMapper ->
|
||||||
|
accountMapper.deleteByMap(where));
|
||||||
|
|
||||||
|
|
||||||
|
Account updateAccount1 = UpdateEntity.wrap(Account.class);
|
||||||
|
updateAccount1.setId(5L);
|
||||||
|
updateAccount1.setUserName(null);
|
||||||
|
updateAccount1.setAge(60);
|
||||||
|
bootstrap.execute(AccountMapper.class, accountMapper ->
|
||||||
|
accountMapper.update(updateAccount1, false));
|
||||||
|
|
||||||
|
|
||||||
|
Account updateAccount2 = UpdateEntity.wrap(Account.class);
|
||||||
|
updateAccount2.setId(6L);
|
||||||
|
updateAccount2.setAge(40);
|
||||||
|
bootstrap.execute(AccountMapper.class, accountMapper ->
|
||||||
|
accountMapper.update(updateAccount2));
|
||||||
|
|
||||||
|
|
||||||
|
List<Account> allAccounts = bootstrap.execute(AccountMapper.class, accountMapper ->
|
||||||
|
accountMapper.selectListByQuery(QueryWrapper.create()));
|
||||||
|
System.out.println(allAccounts); //count 5
|
||||||
|
|
||||||
|
|
||||||
|
//分页查询,第 2 页,每页 3 条数据
|
||||||
|
Page<Account> accountPage = bootstrap.execute(AccountMapper.class, accountMapper ->
|
||||||
|
accountMapper.paginate(2, 3, QueryWrapper.create()));
|
||||||
|
System.out.println(accountPage);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -28,7 +28,7 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
|
|||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class MybatisFlexStarter {
|
public class RowTestStarter {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
DataSource dataSource = new EmbeddedDatabaseBuilder()
|
DataSource dataSource = new EmbeddedDatabaseBuilder()
|
||||||
@ -1,7 +1,7 @@
|
|||||||
CREATE TABLE IF NOT EXISTS `tb_account`
|
CREATE TABLE IF NOT EXISTS `tb_account`
|
||||||
(
|
(
|
||||||
`id` INTEGER PRIMARY KEY auto_increment,
|
`id` INTEGER PRIMARY KEY auto_increment,
|
||||||
`user_name` VARCHAR(100) NOT NULL,
|
`user_name` VARCHAR(100),
|
||||||
`age` Integer,
|
`age` Integer,
|
||||||
`birthday` DATETIME
|
`birthday` DATETIME
|
||||||
);
|
);
|
||||||
Loading…
x
Reference in New Issue
Block a user