Skip to content

Latest commit

History

63 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

sql2o-plus

Build StatusMaven CentralLicenseGitter

🍌sql2o-plus a simple object mapper for java

Java版本 1.8

Maven

pom.xml

releases 版本

<dependency>
<groupId>io.github.cotide</groupId>
<artifactId>sql2o-plus</artifactId>
<version>1.0.3</version>
</dependency> 

snapshots 版本

<repository>
<id>oss-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository> <dependency>
<groupId>io.github.cotide</groupId>
<artifactId>sql2o-plus</artifactId>
<version>1.0.4-SNAPSHOT</version>
</dependency>

特点

  • sql2o驱动
  • 集成SQL Lambda表达式
  • 集成SQL分页
  • CRUD 封装/简化调用方法
  • 支持事务

实体映射

packagecom.sqltest.model;
importcom.sqltest.model.enums.EnumGroup;
importcom.sqltest.model.enums.EnumUserStatus;
importcom.sqltest.model.enums.EnumVipLevel;
importio.github.cotide.dapper.basic.domain.Entity; importio.github.cotide.dapper.core.attr.Column;
importio.github.cotide.dapper.core.attr.Ignore;
importio.github.cotide.dapper.core.attr.PrimaryKey;
importio.github.cotide.dapper.core.attr.Table;
importjava.util.Date;
/** * 用户信息 */@lombok.Getter@lombok.Setter@Table("user_info")
publicclassUserInfoextendsEntity {
@PrimaryKey("user_id")
privateintid;
@Column("user_Name")
privateStringname;
@Column("password")
privateStringpwd;
@Column("status")
privateEnumUserStatusstatus;
@Column("level")
privateEnumVipLevellevel;
@Column("`group`")
privateEnumGroupgroup;
privateintlogin;
@Column("create_time")
privateDatecreateTime;
@IgnoreprivateStringother;
}

枚举定义

  • IntegerEnum 整数型枚举存储-> 例子
  • StringEnum 字符串型枚举存储-> 例子

注解描述

  • @Table (表名)
  • @PrimaryKey (主键)
  • @Column (字段名,与数据库字段名称一致可不标记)
  • @Ignore (忽略字段)

Dto实体

packagecom.sqltest.dto;
importcom.sqltest.model.enums.EnumGroup;
importcom.sqltest.model.enums.EnumUserStatus;
importcom.sqltest.model.enums.EnumVipLevel; importlombok.Data;
importjava.util.Date;
@DatapublicclassUserInfoDto {
@Column("user_id")
privateintid;
@Column("user_name")
privateStringname;
privateintlogin;
privateEnumUserStatusstatus;
@Column("`group`")
privateEnumGroupgroup;
privateEnumVipLevellevel;
privateDatecreateTime;
@IgnoreprivateStringother;
}

初始化

Stringurl = "jdbc:mysql://192.168.1.100:3307/g_main_test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false";
Stringuser ="test";
Stringpass ="123456";
// MysqlprotectedDatabasegetDatabase() { returnnewDatabase(url,user,pass);
} // Druid DataSourceprotectedDatabasegetDruidDatabase() {
DruidDataSourcedataSource = newDruidDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(pass);
returnnewDatabase(dataSource);
}

查询

列表查询

Databasedb = getDatabase();
IRepository<UserInfo> userInfoRepository = db.getRepository(UserInfo.class);
// getList()List<UserInfo> result1 = userInfoRepository.getList();
// getList(Sql sql)List<UserInfo> result2 = userInfoRepository.getList(Sql.builder().select().from(UserInfo.class));
// getList(String sql,Object ... param)Stringsql = "select * from user_info where user_id = ? ";
List<UserInfo> result3 = userInfoRepository.getList(sql,1);
// ** Dto getList **Sqlsql1 = Sql.builder().select(" user_id as id, user_Name as name ").from(UserInfo.class).where("user_id = ?",1);
List<UserInfoDto> result4 = db.getSqlQuery().getDtoList(UserInfoDto.class,sql1);
Stringsql2 = "select user_id as id, user_Name as name from user_info where user_id = ? ";
List<UserInfoDto> result5 = db.getSqlQuery().getDtoList(UserInfoDto.class,sql2,1);

获取对象

Databasedb = getDatabase();
IRepository<UserInfo> userInfoRepository = db.getRepository(UserInfo.class);
// getById(Object primaryKey)UserInforesult1 = userInfoRepository.getById(1);
// get(Sql sql)UserInforesult2 = userInfoRepository.get(
Sql.builder().select().from(UserInfo.class).where("user_id = ?",1));
// get(String sql, Object ... param)Stringsql = "select * from user_info where user_id = ? ";
UserInforesult3 = userInfoRepository.get(sql,1);
// ** Dto get **// getDto(Class<TDto> returnType, Sql sql)UserInfoDtoresult4 = db.getSqlQuery().getDto(
UserInfoDto.class,Sql.builder().select("user_id as id, user_Name as name").from(UserInfo.class).where("user_id = ?",1));

联表查询

Databasedb = getDatabase();
Sqlsql = Sql.builder()
.select("a.user_id as id," +
"a.user_Name as name,"+
"b.id as typeId,"+
"b.name as typeName,"+
"a.login,"+
"a.status,"+
"a.group,"+
"a.level,"+
"a.create_time as createTime")
.from(UserInfo.class,"a")
.join(UserType.class,"b")
.on("a.user_type_id = b.id");
List<UserInfoDetailDto> result = db.getSqlQuery(.getDtoList(UserInfoDetailDto.class,sql); 

分页

Databasedb = getDatabase();
IRepository<UserInfo> userInfoRepository = db.getRepository(UserInfo.class);
// getPageList(int pageIndex, int pageSize, Sql sql)PageList<UserInfo> result = userInfoRepository.getPageList(1,10,Sql.builder().select().from(UserInfo.class));

Sql Lambda

Sqlsql = Sql.builder()
.select(UserInfo::getId,UserInfo::getName)
.from(UserInfo.class)
.where(UserInfo::getName,"Test")
.whereIn(UserInfo::getId,1,2)
.orderBy(UserInfo::getCreateTime, OrderBy.DESC);
/*** [Sql语句] ***/// select user_id,user_name // FROM user_info // where user_name = :p0 and user_id in (:p1,:p2)// order by create_time desc/*** [参数值] ***/// [Test],[1],[2]

Sql or

Sqlsql = Sql.builder().select().from(UserInfo.class)
.whereLike(UserInfo::getName,"Test_2")
.or()
.whereLike(UserInfo::getName,"Test_2")
.orderBy(UserInfo::getId);
/*** [Sql语句] ***/// select * // from user_info // where user_name like :p0 // or // user_name like :p1 // order by user_id asc /*** [参数值] ***/// [Test_2],[Test_2]

Dto Mapper

ResultMap

ResultMapcolumn = newResultMap();
column.put(UserInfo::getId, UserInfoDto::getId);
column.put(UserInfo::getName, "name");
column.put(UserInfo::getUserTypeId); Sqlsql = Sql.builder().select(
column)
.from(UserInfo.class)
.where(UserInfo::getName,"Test")
.whereIn(UserInfo::getId,1,2)
.orderBy(UserInfo::getCreateTime, OrderBy.DESC); /*** [Sql语句] ***/// select user_id as id,// user_name as name,// user_type_id // from user_info // where user_name = :p0 // and user_id in (:p1,:p2)// order by create_time DESC/*** [参数值] ***/// [Test],[1],[2]

SelectTo

Sqlsql = Sql.builder()
.selectTo(UserInfoDto.class)
.from(UserInfo.class)
.where(UserInfo::getName,"Test")
.whereIn(UserInfo::getId,1,2)
.orderBy(UserInfo::getCreateTime, OrderBy.DESC);
/*** [Sql语句] ***/// select createTime,// level,// `group` as group,// user_id as id,// user_name as name,// login,// status // from user_info // where user_name = :p0 // and user_id in (:p1,:p2)// order by create_time DESC/*** [参数值] ***/// [Test],[1],[2]

持久化

新增

Databasedb = getDatabase();
IRepository<UserInfo> userInfoRepository = db.getRepository(UserInfo.class);
UserInfodomain = newUserInfo();
domain.setName("Test");
domain.setLogin(10086);
domain.setPwd("123456");
domain.setCreatTime(newDate());
UserInfouser = userInfoRepository.create(domain);

修改

Databasedb = getDatabase();
IRepository<UserInfo> userInfoRepository = db.getRepository(UserInfo.class);
// get UserInfouser = userInfoRepository.get(Sql.builder().select().from(UserInfo.class).where("user_id = ?",3399));
// updateuser.setName("Test_2 ## -- "); userInfoRepository.update(user); 

修改2

Databasedb = getDatabase();
IRepository<UserInfo> userInfoRepository = db.getRepository(UserInfo.class);
// get UserInfouser = userInfoRepository.get(Sql.builder().select().from(UserInfo.class).where("user_id = ?",3399));
// updateUpdate<UserInfo> userInfoUpdate = userInfoRepository.createUpdate();
// 指定修改字段值userInfoUpdate.set(UserInfo::getPwd,"6543421"); userInfoRepository.update(user,userInfoUpdate);

删除

Databasedb = getDatabase();
IRepository<UserInfo> userInfoRepository = db.getRepository(UserInfo.class);
// getUserInfouser = userInfoRepository.get(Sql.builder().select().from(UserInfo.class).where("user_id = ?",3391));
// deleteuserInfoRepository.delete(user);

事务

事务支持

try(Databasedb = getDatabase()){
// 开启事务db.beginTransaction();
IRepository<UserInfo> userInfoIRepository =
db.getRepository(UserInfo.class); UserInfodomain = newUserInfo();
domain.setName("Test");
domain.setLogin(10086);
domain.setPwd("123456");
domain.setCreateTime(newDate()); // 新增UserInfouser = userInfoIRepository.create(domain); user.setName("Test_Update");
// 修改userInfoIRepository.update(user); // 提交事务db.commit();
assert(user.getId()>0):"database transaction is error";
} 

注意:如果使用事务请使用try(){} 用于释放数据库连接

SQL语句执行

try(Databasedb = getDatabase()){
// 开启事务db.beginTransaction();
finalStringinsertSql =
"INSERT INTO user_info (user_Name,password,login,create_time) VALUES (?,?,?,?)";
// Createintid = db.getSqlRun().execute(
insertSql,
"Execute Test",
"123456",
10086,
newDate()).asInt(); // UpdatefinalStringupdateSql =
"UPDATE user_info set user_Name = ? WHERE user_id = ?";
db.getSqlRun().execute(updateSql,"Execute Test2",id);
// 事务提交db.commit();
// SelectSqlsql = Sql.builder()
.select("user_id as id, user_Name as name")
.from(UserInfo.class).where("user_id = ?", id);
UserInfoDtoresultDto = db.getSqlQuery().getDto(UserInfoDto.class,sql); }

Debug模式

Databasedb = getDatabase();
db.isDebug(true); 

Database指定isDebug(true)后,查询结果属性不能匹配会抛出异常信息,例子

获取表字段名

Sql2oUtils.getColumnName(UserInfo::getId);
// 输出user_id

其他

License

About

🍌sql2o-plus a simple object mapper for java

Topics

Resources

Stars

10 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages