🍌sql2o-plus a simple object mapper for java
Java版本 1.8
pom.xml
<dependency> <groupId>io.github.cotide</groupId> <artifactId>sql2o-plus</artifactId> <version>1.0.3</version> </dependency>
<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 封装/简化调用方法
- 支持事务
package com.sqltest.model; import com.sqltest.model.enums.EnumGroup; import com.sqltest.model.enums.EnumUserStatus; import com.sqltest.model.enums.EnumVipLevel; import io.github.cotide.dapper.basic.domain.Entity; import io.github.cotide.dapper.core.attr.Column; import io.github.cotide.dapper.core.attr.Ignore; import io.github.cotide.dapper.core.attr.PrimaryKey; import io.github.cotide.dapper.core.attr.Table; import java.util.Date; /** * 用户信息 */ @lombok.Getter @lombok.Setter @Table("user_info") public class UserInfo extends Entity { @PrimaryKey("user_id") private int id; @Column("user_Name") private String name; @Column("password") private String pwd; @Column("status") private EnumUserStatus status; @Column("level") private EnumVipLevel level; @Column("`group`") private EnumGroup group; private int login; @Column("create_time") private Date createTime; @Ignore private String other; }
- @Table (表名)
- @PrimaryKey (主键)
- @Column (字段名,与数据库字段名称一致可不标记)
- @Ignore (忽略字段)
package com.sqltest.dto; import com.sqltest.model.enums.EnumGroup; import com.sqltest.model.enums.EnumUserStatus; import com.sqltest.model.enums.EnumVipLevel; import lombok.Data; import java.util.Date; @Data public class UserInfoDto { @Column("user_id") private int id; @Column("user_name") private String name; private int login; private EnumUserStatus status; @Column("`group`") private EnumGroup group; private EnumVipLevel level; private Date createTime; @Ignore private String other; }
String url = "jdbc:mysql://192.168.1.100:3307/g_main_test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false"; String user ="test"; String pass ="123456"; // Mysql protected Database getDatabase() { return new Database(url,user,pass); } // Druid DataSource protected Database getDruidDatabase() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); dataSource.setUrl(url); dataSource.setUsername(user); dataSource.setPassword(pass); return new Database(dataSource); }
Database db = 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) String sql = "select * from user_info where user_id = ? "; List<UserInfo> result3 = userInfoRepository.getList(sql,1); // ** Dto getList ** Sql sql1 = 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); String sql2 = "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);
Database db = getDatabase(); IRepository<UserInfo> userInfoRepository = db.getRepository(UserInfo.class); // getById(Object primaryKey) UserInfo result1 = userInfoRepository.getById(1); // get(Sql sql) UserInfo result2 = userInfoRepository.get( Sql.builder().select().from(UserInfo.class).where("user_id = ?",1)); // get(String sql, Object ... param) String sql = "select * from user_info where user_id = ? "; UserInfo result3 = userInfoRepository.get(sql,1); // ** Dto get ** // getDto(Class<TDto> returnType, Sql sql) UserInfoDto result4 = db.getSqlQuery().getDto( UserInfoDto.class,Sql.builder().select("user_id as id, user_Name as name").from(UserInfo.class).where("user_id = ?",1));
Database db = getDatabase(); Sql sql = 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);
Database db = 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 sql = 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 sql = 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]
ResultMap column = new ResultMap(); column.put(UserInfo::getId, UserInfoDto::getId); column.put(UserInfo::getName, "name"); column.put(UserInfo::getUserTypeId); Sql sql = 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]
Sql sql = 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]
Database db = getDatabase(); IRepository<UserInfo> userInfoRepository = db.getRepository(UserInfo.class); UserInfo domain = new UserInfo(); domain.setName("Test"); domain.setLogin(10086); domain.setPwd("123456"); domain.setCreatTime(new Date()); UserInfo user = userInfoRepository.create(domain);
Database db = getDatabase(); IRepository<UserInfo> userInfoRepository = db.getRepository(UserInfo.class); // get UserInfo user = userInfoRepository.get(Sql.builder().select().from(UserInfo.class).where("user_id = ?",3399)); // update user.setName("Test_2 ## -- "); userInfoRepository.update(user);
Database db = getDatabase(); IRepository<UserInfo> userInfoRepository = db.getRepository(UserInfo.class); // get UserInfo user = userInfoRepository.get(Sql.builder().select().from(UserInfo.class).where("user_id = ?",3399)); // update Update<UserInfo> userInfoUpdate = userInfoRepository.createUpdate(); // 指定修改字段值 userInfoUpdate.set(UserInfo::getPwd,"6543421"); userInfoRepository.update(user,userInfoUpdate);
Database db = getDatabase(); IRepository<UserInfo> userInfoRepository = db.getRepository(UserInfo.class); // get UserInfo user = userInfoRepository.get(Sql.builder().select().from(UserInfo.class).where("user_id = ?",3391)); // delete userInfoRepository.delete(user);
try(Database db = getDatabase()){ // 开启事务 db.beginTransaction(); IRepository<UserInfo> userInfoIRepository = db.getRepository(UserInfo.class); UserInfo domain = new UserInfo(); domain.setName("Test"); domain.setLogin(10086); domain.setPwd("123456"); domain.setCreateTime(new Date()); // 新增 UserInfo user = userInfoIRepository.create(domain); user.setName("Test_Update"); // 修改 userInfoIRepository.update(user); // 提交事务 db.commit(); assert(user.getId()>0):"database transaction is error"; }
注意:如果使用事务请使用try(){} 用于释放数据库连接
try(Database db = getDatabase()){ // 开启事务 db.beginTransaction(); final String insertSql = "INSERT INTO user_info (user_Name,password,login,create_time) VALUES (?,?,?,?)"; // Create int id = db.getSqlRun().execute( insertSql, "Execute Test", "123456", 10086, new Date()).asInt(); // Update final String updateSql = "UPDATE user_info set user_Name = ? WHERE user_id = ?"; db.getSqlRun().execute(updateSql,"Execute Test2",id); // 事务提交 db.commit(); // Select Sql sql = Sql.builder() .select("user_id as id, user_Name as name") .from(UserInfo.class).where("user_id = ?", id); UserInfoDto resultDto = db.getSqlQuery().getDto(UserInfoDto.class,sql); }
Database db = getDatabase(); db.isDebug(true);
Database指定isDebug(true)后,查询结果属性不能匹配会抛出异常信息,例子
Sql2oUtils.getColumnName(UserInfo::getId); // 输出 user_id