diff --git a/readme.md b/readme.md index 3130ec80..f174c9eb 100644 --- a/readme.md +++ b/readme.md @@ -68,76 +68,44 @@ class HelloWorld { e.g.2: query list ```java -class HelloWorld { - public static void main(String... args) { +//use QueryWrapper to build query conditions +QueryWrapper query = QueryWrapper.create() + .select() + .from(ACCOUNT) + .where(ACCOUNT.ID.ge(100)) + .and(ACCOUNT.USER_NAME.like("zhang").or(ACCOUNT.USER_NAME.like("li"))); - HikariDataSource dataSource = new HikariDataSource(); - dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mybatis-flex"); - dataSource.setUsername("username"); - dataSource.setPassword("password"); - - MybatisFlexBootstrap.getInstance() - .setDatasource(dataSource) - .addMapper(AccountMapper.class) - .start(); - - //use QueryWrapper to build query conditions - QueryWrapper query = QueryWrapper.create() - .select() - .from(ACCOUNT) - .where(ACCOUNT.ID.ge(100)) - .and(ACCOUNT.USER_NAME.like("zhang").or(ACCOUNT.USER_NAME.like("li"))); - - // execute SQL: - // ELECT * FROM `tb_account` - // WHERE `tb_account`.`id` >= 100 - // AND (`tb_account`.`user_name` LIKE '%zhang%' OR `tb_account`.`user_name` LIKE '%li%' ) - List accounts = MybatisFlexBootstrap.getInstance() - .execute(AccountMapper.class, mapper -> - mapper.selectListByQuery(query) - ); - - } -} +// execute SQL: +// ELECT * FROM `tb_account` +// WHERE `tb_account`.`id` >= 100 +// AND (`tb_account`.`user_name` LIKE '%zhang%' OR `tb_account`.`user_name` LIKE '%li%' ) +List accounts = MybatisFlexBootstrap.getInstance() + .execute(AccountMapper.class, mapper -> + mapper.selectListByQuery(query) + ); ``` e.g.3: paging query ```java -class HelloWorld { - public static void main(String... args) { +//use QueryWrapper to build query conditions +QueryWrapper query = QueryWrapper.create() + .select() + .from(ACCOUNT) + .where(ACCOUNT.ID.ge(100)) + .and(ACCOUNT.USER_NAME.like("zhang").or(ACCOUNT.USER_NAME.like("li"))) + .orderBy(ACCOUNT.ID.desc()); - HikariDataSource dataSource = new HikariDataSource(); - dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mybatis-flex"); - dataSource.setUsername("username"); - dataSource.setPassword("password"); - - MybatisFlexBootstrap.getInstance() - .setDatasource(dataSource) - .addMapper(AccountMapper.class) - .start(); - - //use QueryWrapper to build query conditions - QueryWrapper query = QueryWrapper.create() - .select() - .from(ACCOUNT) - .where(ACCOUNT.ID.ge(100)) - .and(ACCOUNT.USER_NAME.like("zhang").or(ACCOUNT.USER_NAME.like("li"))) - .orderBy(ACCOUNT.ID.desc()); - - // execute SQL: - // ELECT * FROM `tb_account` - // WHERE `tb_account`.`id` >= 100 - // AND (`tb_account`.`user_name` LIKE '%zhang%' OR `tb_account`.`user_name` LIKE '%li%' ) - // ORDER BY `tb_account`.`id` DESC - // LIMIT 40,10 - Page accountPage = MybatisFlexBootstrap.getInstance() - .execute(AccountMapper.class, mapper -> - mapper.paginate(5, 10, query) - ); - - } -} +// execute SQL: +// ELECT * FROM `tb_account` +// WHERE `tb_account`.`id` >= 100 +// AND (`tb_account`.`user_name` LIKE '%zhang%' OR `tb_account`.`user_name` LIKE '%li%' ) +// ORDER BY `tb_account`.`id` DESC +// LIMIT 40,10 +Page accountPage = MybatisFlexBootstrap.getInstance() + .execute(AccountMapper.class, mapper -> + mapper.paginate(5, 10, query) + ); ``` ## QueryWrapper Samples @@ -223,7 +191,7 @@ QueryWrapper queryWrapper=QueryWrapper.create() // SELECT * FROM tb_account // WHERE tb_account.id >= ? // AND EXIST ( -// SELECT 1 FROM tb_article WHERE tb_article.id >= ? +// SELECT 1 FROM tb_article WHERE tb_article.id >= ? // ) ``` @@ -272,6 +240,21 @@ QueryWrapper queryWrapper=QueryWrapper.create() // HAVING tb_account.age BETWEEN ? AND ? ``` + +### orderBy + +```java +QueryWrapper queryWrapper=QueryWrapper.create() + .select() + .from(ACCOUNT) + .orderBy(ACCOUNT.AGE.asc(), ACCOUNT.USER_NAME.desc().nullsLast()); + +// SQL: +// SELECT * FROM `tb_account` +// ORDER BY `age` ASC, `user_name` DESC NULLS LAST +``` + + ### join ```java QueryWrapper queryWrapper = QueryWrapper.create() diff --git a/readme_zh.md b/readme_zh.md index d98c0ea1..ff2a1c52 100644 --- a/readme_zh.md +++ b/readme_zh.md @@ -306,31 +306,31 @@ Db + Row 工具类,提供了在 Entity 实体类之外的数据库操作能力 ```java //使用原生 SQL 插入数据 String sql="insert into tb_account(id,name) value (?, ?)"; - Db.insertBySql(sql,1,"michael"); +Db.insertBySql(sql,1,"michael"); //使用 Row 插入数据 - Row account=new Row(); - account.set("id",100); - account.set("name","Michael"); - Db.insertRow("tb_account",account); +Row account=new Row(); +account.set("id",100); +account.set("name","Michael"); +Db.insertRow("tb_account",account); //根据主键查询数据 - Row row=Db.selectOneById("tb_account","id",1); +Row row=Db.selectOneById("tb_account","id",1); //Row 可以直接转换为 Entity 实体类,且性能极高 - Account account=row.toEntity(Account.class); +Account account=row.toEntity(Account.class); //查询所有大于 18 岁的用户 - String listsql="select * from tb_account where age > ?" - List rows=Db.selectListBySql(sql,18); +String listsql="select * from tb_account where age > ?" +List rows=Db.selectListBySql(sql,18); //分页查询:每页 10 条数据,查询第 3 页的年龄大于 18 的用户 - QueryWrapper query=QueryWrapper.create() - .where(ACCOUNT.AGE.ge(18)); - Page rowPage=Db.paginate("tb_account",3,10,query); +QueryWrapper query=QueryWrapper.create() +.where(ACCOUNT.AGE.ge(18)); +Page rowPage=Db.paginate("tb_account",3,10,query); ``` > Db 工具类还提供了更多 增、删、改、查和分页查询等方法。 @@ -354,23 +354,22 @@ update(T entity,boolean ignoreNulls) ```java Account account=UpdateEntity.of(Account.class); - account.setId(1); + account.setId(100); account.setUserName(null); account.setSex(1); accountMapper.update(account,false); ``` -以上的示例中,会把 id 为 1 这条数据中的 user_name 字段更新为 null,sex 字段更新为 1,其他字段不会被更新。也就是说,通过 `UpdateEntity` +以上的示例中,会把 id 为 100 这条数据中的 user_name 字段更新为 null,sex 字段更新为 1,其他字段不会被更新。也就是说,通过 `UpdateEntity` 创建的对象,只会更新调用了 setter 方法的字段,若不调用 setter 方法,不管这个对象里的属性的值是什么,都不会更新到数据库。 其生成的 sql 内容如下: ```sql update tb_account -set user_name = ?, - sex = ? -where id = ? #params: null,1,1 +set user_name = ?, sex = ? where id = ? +#params: null,1,100 ``` ## 多主键