├── .travis.yml
├── README.md
├── src
└── main
│ ├── java
│ └── org
│ │ └── jfaster
│ │ └── mango
│ │ └── example
│ │ ├── transfer
│ │ ├── Gender.java
│ │ ├── SubCard.java
│ │ ├── CardDao.java
│ │ ├── PersonDao.java
│ │ ├── TeacherDao.java
│ │ ├── Person.java
│ │ ├── Card.java
│ │ ├── Teacher.java
│ │ ├── PersonMain.java
│ │ ├── TeacherMain.java
│ │ ├── CardMain.java
│ │ └── README.md
│ │ ├── spring
│ │ ├── UserDao.java
│ │ ├── StudentDao.java
│ │ ├── MixMain.java
│ │ ├── SimpleMain.java
│ │ ├── MasterSlaveMain.java
│ │ ├── MultipleMain.java
│ │ └── MyMangoFactoryBean.java
│ │ ├── util
│ │ └── RandomUtils.java
│ │ ├── transaction
│ │ ├── Account.java
│ │ ├── AccountsDao.java
│ │ ├── README.md
│ │ ├── AccountsMain2.java
│ │ └── AccountsMain.java
│ │ ├── datasource
│ │ ├── BlogDao.java
│ │ ├── ArticleDao.java
│ │ ├── CommentDao.java
│ │ ├── Blog.java
│ │ ├── Article.java
│ │ ├── Comment.java
│ │ ├── ArticleMain.java
│ │ ├── MasterSlaveArticleMain.java
│ │ ├── MultipleDatabaseMain.java
│ │ └── README.md
│ │ ├── page
│ │ ├── SortMain.java
│ │ ├── PageMain.java
│ │ ├── Message.java
│ │ ├── PageResultMain.java
│ │ └── MySQLPageMain.java
│ │ ├── quickstart
│ │ ├── README.md
│ │ └── HelloWorld.java
│ │ ├── dynamic
│ │ ├── UserDao.java
│ │ ├── User.java
│ │ ├── README.md
│ │ └── UserMain.java
│ │ ├── mapping
│ │ ├── UserMapper.java
│ │ ├── README.md
│ │ ├── MappingUser.java
│ │ ├── MappingUser2.java
│ │ ├── MappingMain.java
│ │ └── MappingDao.java
│ │ ├── binding
│ │ ├── README.md
│ │ ├── BindingUser.java
│ │ ├── BindingMain.java
│ │ └── BindingUserDao.java
│ │ ├── basic
│ │ ├── README.md
│ │ ├── User.java
│ │ ├── UserDao.java
│ │ └── UserMain.java
│ │ ├── crud
│ │ ├── Order.java
│ │ ├── Order2.java
│ │ ├── Order3.java
│ │ ├── OrderDaoMain.java
│ │ ├── OrderDao2Main.java
│ │ └── OrderDao3Main.java
│ │ ├── sharding
│ │ ├── Order.java
│ │ ├── TableShardingOrderDaoMain.java
│ │ ├── DatabaseShardingOrderDaoMain.java
│ │ ├── SmartShardingOrderDaoMain.java
│ │ ├── ShardingOrderDaoMain.java
│ │ ├── MultiDimenShardingOrderDaoMain.java
│ │ └── README.md
│ │ └── logging
│ │ ├── ConsoleMain.java
│ │ ├── Log4JMain.java
│ │ ├── Log4J2Main.java
│ │ └── Slf4JMain.java
│ └── resources
│ ├── logback.xml
│ ├── log4j2.xml
│ ├── log4j.xml
│ └── org
│ └── jfaster
│ └── mango
│ └── example
│ └── spring
│ ├── applicationContext-mix.xml
│ ├── applicationContext-simple.xml
│ ├── applicationContext-masterslave.xml
│ └── applicationContext-multiple.xml
└── pom.xml
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: java
2 |
3 | jdk:
4 | - oraclejdk8
5 | - oraclejdk7
6 | - openjdk7
7 | - openjdk6
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://travis-ci.org/jfaster/mango-example)
2 |
3 | mango-doc示例代码
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/transfer/Gender.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.transfer;
2 |
3 | /**
4 | * @author ash
5 | */
6 | public enum Gender {
7 |
8 | MALE, FEMALE
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/spring/UserDao.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.spring;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 |
5 | /**
6 | * @author ash
7 | */
8 | @DB
9 | public interface UserDao {
10 | }
11 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/spring/StudentDao.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.spring;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 |
5 | /**
6 | * @author ash
7 | */
8 | @DB
9 | public interface StudentDao {
10 | }
11 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/util/RandomUtils.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.util;
2 |
3 | import org.apache.commons.lang3.RandomStringUtils;
4 |
5 | /**
6 | * @author ash
7 | */
8 | public class RandomUtils {
9 |
10 | public static String randomStringId(int count) {
11 | return RandomStringUtils.random(count, false, true);
12 | }
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/transfer/SubCard.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.transfer;
2 |
3 | /**
4 | * @author ash
5 | */
6 | public class SubCard {
7 |
8 | private int type;
9 |
10 | private String content;
11 |
12 | public int getType() {
13 | return type;
14 | }
15 |
16 | public void setType(int type) {
17 | this.type = type;
18 | }
19 |
20 | public String getContent() {
21 | return content;
22 | }
23 |
24 | public void setContent(String content) {
25 | this.content = content;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/transaction/Account.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.transaction;
2 |
3 | /**
4 | * @author ash
5 | */
6 | public class Account {
7 |
8 | private int uid;
9 |
10 | private int money;
11 |
12 | public int getUid() {
13 | return uid;
14 | }
15 |
16 | public void setUid(int uid) {
17 | this.uid = uid;
18 | }
19 |
20 | public int getMoney() {
21 | return money;
22 | }
23 |
24 | public void setMoney(int money) {
25 | this.money = money;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | %d{HH:mm:ss.SSS} - %msg%n
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/transfer/CardDao.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.transfer;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.annotation.ReturnGeneratedId;
5 | import org.jfaster.mango.annotation.SQL;
6 |
7 | /**
8 | * @author ash
9 | */
10 | @DB
11 | public interface CardDao {
12 |
13 | @ReturnGeneratedId
14 | @SQL("insert into card(name, sub_card) values(:name, :subCard)")
15 | public int addCard(Card c);
16 |
17 | @SQL("select name, sub_card from card where id = :1")
18 | public Card getCardById(int id);
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/transfer/PersonDao.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.transfer;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.annotation.ReturnGeneratedId;
5 | import org.jfaster.mango.annotation.SQL;
6 |
7 | /**
8 | * @author ash
9 | */
10 | @DB
11 | public interface PersonDao {
12 |
13 | @ReturnGeneratedId
14 | @SQL("insert into person(name, gender) values(:name, :gender)")
15 | public int addPerson(Person p);
16 |
17 | @SQL("select name, gender from person where id = :1")
18 | public Person getPersonById(int id);
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/transaction/AccountsDao.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.transaction;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.annotation.SQL;
5 |
6 | @DB
7 | public interface AccountsDao {
8 |
9 | @SQL("update accounts set money = money + :2 where uid = :1")
10 | boolean transferMoney(int uid, int inc);
11 |
12 | @SQL("select uid, money from accounts where uid = :1")
13 | Account getAccount(int uid);
14 |
15 | @SQL("insert into accounts(uid, money) values(:1, :2)")
16 | void addAccount(int uid, int money);
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/transfer/TeacherDao.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.transfer;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.annotation.ReturnGeneratedId;
5 | import org.jfaster.mango.annotation.SQL;
6 |
7 | /**
8 | * @author ash
9 | */
10 | @DB
11 | public interface TeacherDao {
12 |
13 | @ReturnGeneratedId
14 | @SQL("insert into teacher(name, student_ids) values(:name, :studentIds)")
15 | public int addTeacher(Teacher t);
16 |
17 | @SQL("select name, student_ids from teacher where id = :1")
18 | public Teacher getTeacherById(int id);
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/datasource/BlogDao.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.datasource;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.annotation.ReturnGeneratedId;
5 | import org.jfaster.mango.annotation.SQL;
6 |
7 | /**
8 | * @author ash
9 | */
10 | @DB(name = "dsf1")
11 | public interface BlogDao {
12 |
13 | @ReturnGeneratedId
14 | @SQL("insert into blog(uid, title, content) values(:uid, :title, :content)")
15 | public int addBlog(Blog blog);
16 |
17 | @SQL("select id, uid, title, content from blog where id = :1")
18 | public Blog getBlog(int id);
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/datasource/ArticleDao.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.datasource;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.annotation.ReturnGeneratedId;
5 | import org.jfaster.mango.annotation.SQL;
6 |
7 | /**
8 | * @author ash
9 | */
10 | @DB
11 | public interface ArticleDao {
12 |
13 | @ReturnGeneratedId
14 | @SQL("insert into article(uid, title, content) values(:uid, :title, :content)")
15 | public int addArticle(Article article);
16 |
17 | @SQL("select id, uid, title, content from article where id = :1")
18 | public Article getArticle(int id);
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/page/SortMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.page;
2 |
3 | import org.jfaster.mango.page.Direction;
4 | import org.jfaster.mango.page.Order;
5 | import org.jfaster.mango.page.Sort;
6 |
7 | public class SortMain {
8 |
9 | public static void main(String[] args) {
10 |
11 | // 等价于 order by id asc
12 | Sort.by("id");
13 |
14 | // 等价于 order by id desc
15 | Sort.by(Direction.DESC, "id");
16 |
17 | // 等价于 order by id asc, name asc
18 | Sort.by("id", "name");
19 |
20 | // 等价于 order by id asc, name desc
21 | Sort.by(Order.by("id"), Order.desc("name"));
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/datasource/CommentDao.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.datasource;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.annotation.ReturnGeneratedId;
5 | import org.jfaster.mango.annotation.SQL;
6 |
7 | /**
8 | * @author ash
9 | */
10 | @DB(name = "dsf2")
11 | public interface CommentDao {
12 |
13 | @ReturnGeneratedId
14 | @SQL("insert into comment(uid, title, content) values(:uid, :title, :content)")
15 | public int addComment(Comment comment);
16 |
17 | @SQL("select id, uid, title, content from comment where id = :1")
18 | public Comment getComment(int id);
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/quickstart/README.md:
--------------------------------------------------------------------------------
1 | 快速开始
2 | ========
3 |
4 | 快速开始相关文档请查看 http://mango.jfaster.org/quickstart.html
5 |
6 | HelloWorld
7 | ----------
8 |
9 | 所有的源码均在 [HelloWorld](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/quickstart/HelloWorld.java) 中
10 |
11 | 需要在数据库 **jdbc:mysql://localhost:3306/mango_example** 中创建下面的表
12 |
13 | ```
14 | DROP TABLE IF EXISTS `fruit`;
15 | CREATE TABLE `fruit` (
16 | `id` int(11) NOT NULL AUTO_INCREMENT,
17 | `name` varchar(20) NOT NULL,
18 | `num` int(11) NOT NULL,
19 | PRIMARY KEY (`id`)
20 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
21 | ```
22 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/dynamic/UserDao.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.dynamic;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.annotation.SQL;
5 |
6 | import java.util.List;
7 |
8 | /**
9 | * @author ash
10 | */
11 | @DB
12 | public interface UserDao {
13 |
14 | @SQL("select uid, name from user order by #{:1}")
15 | public List getUsers(String orderBy);
16 |
17 | @SQL("select uid, name from user where #if(:1>0) uid=:1 #else uid=-1 #end")
18 | public User getUser(int uid);
19 |
20 | @SQL("select uid, name from user where #if(:1>0) uid=:1 #elseif(:1==0) uid=1 #else uid=-1 #end")
21 | public User getUser2(int uid);
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/spring/MixMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.spring;
2 |
3 | import org.springframework.context.ApplicationContext;
4 | import org.springframework.context.support.ClassPathXmlApplicationContext;
5 |
6 | /**
7 | * @author ash
8 | */
9 | public class MixMain {
10 |
11 | public static void main(String[] args) {
12 | String configLocation = "org/jfaster/mango/example/spring/applicationContext-mix.xml";
13 | ApplicationContext ctx = new ClassPathXmlApplicationContext(configLocation);
14 | System.out.println(ctx.getBean(UserDao.class) != null);
15 | System.out.println(ctx.getBean(StudentDao.class) != null);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/spring/SimpleMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.spring;
2 |
3 | import org.springframework.context.ApplicationContext;
4 | import org.springframework.context.support.ClassPathXmlApplicationContext;
5 |
6 | /**
7 | * @author ash
8 | */
9 | public class SimpleMain {
10 |
11 | public static void main(String[] args) {
12 | String configLocation = "org/jfaster/mango/example/spring/applicationContext-simple.xml";
13 | ApplicationContext ctx = new ClassPathXmlApplicationContext(configLocation);
14 | System.out.println(ctx.getBean(UserDao.class) != null);
15 | System.out.println(ctx.getBean(StudentDao.class) != null);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/mapping/UserMapper.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.mapping;
2 |
3 | import org.jfaster.mango.mapper.AbstractRowMapper;
4 |
5 | import java.sql.ResultSet;
6 | import java.sql.SQLException;
7 |
8 | /**
9 | * @author ash
10 | */
11 | public class UserMapper extends AbstractRowMapper {
12 |
13 | @Override
14 | public MappingUser mapRow(ResultSet rs, int rowNum) throws SQLException {
15 | MappingUser u = new MappingUser();
16 | u.setId(rs.getInt("id"));
17 | u.setName(rs.getString("name"));
18 | u.setUserAge(rs.getInt("user_age"));
19 | u.setUpdateTime(rs.getTimestamp("update_time"));
20 | return u;
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/spring/MasterSlaveMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.spring;
2 |
3 | import org.springframework.context.ApplicationContext;
4 | import org.springframework.context.support.ClassPathXmlApplicationContext;
5 |
6 | /**
7 | * @author ash
8 | */
9 | public class MasterSlaveMain {
10 |
11 | public static void main(String[] args) {
12 | String configLocation = "org/jfaster/mango/example/spring/applicationContext-masterslave.xml";
13 | ApplicationContext ctx = new ClassPathXmlApplicationContext(configLocation);
14 | System.out.println(ctx.getBean(UserDao.class) != null);
15 | System.out.println(ctx.getBean(StudentDao.class) != null);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/resources/log4j.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/main/resources/org/jfaster/mango/example/spring/applicationContext-mix.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | org.jfaster.mango.example.spring
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/dynamic/User.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.dynamic;
2 |
3 | import com.google.common.base.MoreObjects;
4 |
5 | public class User {
6 |
7 | private int uid;
8 | private String name;
9 |
10 | public int getUid() {
11 | return uid;
12 | }
13 |
14 | public void setUid(int uid) {
15 | this.uid = uid;
16 | }
17 |
18 | public String getName() {
19 | return name;
20 | }
21 |
22 | public void setName(String name) {
23 | this.name = name;
24 | }
25 |
26 | @Override
27 | public String toString() {
28 | return MoreObjects.toStringHelper(this)
29 | .add("uid", uid)
30 | .add("name", name)
31 | .toString();
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/page/PageMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.page;
2 |
3 | import org.jfaster.mango.page.Direction;
4 | import org.jfaster.mango.page.Order;
5 | import org.jfaster.mango.page.Page;
6 | import org.jfaster.mango.page.Sort;
7 |
8 | public class PageMain {
9 |
10 | public static void main(String[] args) {
11 |
12 | int pageNum = 1;
13 | int pageSize = 10;
14 |
15 | // 等价于 limit pageNum * pageSize, pageSize
16 | Page.of(pageNum, pageSize);
17 |
18 | // 等价于 order by id desc limit pageNum * pageSize, pageSize
19 | Page.of(pageNum, pageSize, Direction.DESC, "id");
20 |
21 | // 等价于 order by id asc, name desc limit pageNum * pageSize, pageSize
22 | Page.of(pageNum, pageSize, Sort.by(Order.by("id"), Order.desc("name")));
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/dynamic/README.md:
--------------------------------------------------------------------------------
1 | 动态SQL
2 | =======
3 |
4 | 动态SQL相关文档请查看 http://mango.jfaster.org/dynamic.html
5 |
6 | 动态SQL
7 | -------
8 |
9 | 所有核心源码均在 [UserDao](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/dynamic/UserDao.java) 中,使用 [UserMain](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/dynamic/UserMain.java) 运行 [UserDao](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/dynamic/UserDao.java)
10 |
11 | 需要在数据库 **jdbc:mysql://localhost:3306/mango_example** 中创建下面的表
12 |
13 | ```
14 | DROP TABLE IF EXISTS `user`;
15 | CREATE TABLE `user` (
16 | `uid` int(11) NOT NULL,
17 | `name` varchar(20) NOT NULL,
18 | PRIMARY KEY (`uid`)
19 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
20 | ```
21 |
22 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/spring/MultipleMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.spring;
2 |
3 | import org.jfaster.mango.operator.Mango;
4 | import org.springframework.context.ApplicationContext;
5 | import org.springframework.context.support.ClassPathXmlApplicationContext;
6 |
7 | /**
8 | * @author ash
9 | */
10 | public class MultipleMain {
11 |
12 | public static void main(String[] args) {
13 | String configLocation = "org/jfaster/mango/example/spring/applicationContext-multiple.xml";
14 | ApplicationContext ctx = new ClassPathXmlApplicationContext(configLocation);
15 | System.out.println(ctx.getBean(UserDao.class) != null);
16 | System.out.println(ctx.getBean(StudentDao.class) != null);
17 |
18 | Mango mango = ctx.getBean(Mango.class);
19 | System.out.println(mango);
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/transfer/Person.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.transfer;
2 |
3 | import org.jfaster.mango.annotation.Transfer;
4 | import org.jfaster.mango.invoker.transfer.enums.EnumToIntegerTransfer;
5 |
6 | /**
7 | * @author ash
8 | */
9 | public class Person {
10 |
11 | private int id;
12 |
13 | private String name;
14 |
15 | @Transfer(EnumToIntegerTransfer.class)
16 | private Gender gender;
17 |
18 | public int getId() {
19 | return id;
20 | }
21 |
22 | public void setId(int id) {
23 | this.id = id;
24 | }
25 |
26 | public String getName() {
27 | return name;
28 | }
29 |
30 | public void setName(String name) {
31 | this.name = name;
32 | }
33 |
34 | public Gender getGender() {
35 | return gender;
36 | }
37 |
38 | public void setGender(Gender gender) {
39 | this.gender = gender;
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/transfer/Card.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.transfer;
2 |
3 | import org.jfaster.mango.annotation.Transfer;
4 | import org.jfaster.mango.invoker.transfer.json.ObjectToGsonTransfer;
5 |
6 | /**
7 | * @author ash
8 | */
9 | public class Card {
10 |
11 | private int id;
12 |
13 | private String name;
14 |
15 | @Transfer(ObjectToGsonTransfer.class)
16 | private SubCard subCard;
17 |
18 | public int getId() {
19 | return id;
20 | }
21 |
22 | public void setId(int id) {
23 | this.id = id;
24 | }
25 |
26 | public String getName() {
27 | return name;
28 | }
29 |
30 | public void setName(String name) {
31 | this.name = name;
32 | }
33 |
34 | public SubCard getSubCard() {
35 | return subCard;
36 | }
37 |
38 | public void setSubCard(SubCard subCard) {
39 | this.subCard = subCard;
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/spring/MyMangoFactoryBean.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.spring;
2 |
3 | import org.jfaster.mango.datasource.DriverManagerDataSource;
4 | import org.jfaster.mango.operator.Mango;
5 | import org.jfaster.mango.plugin.spring.AbstractMangoFactoryBean;
6 |
7 | import javax.sql.DataSource;
8 |
9 | /**
10 | * @author ash
11 | */
12 | public class MyMangoFactoryBean extends AbstractMangoFactoryBean {
13 |
14 | @Override
15 | public Mango createMango() {
16 | String driverClassName = "com.mysql.jdbc.Driver";
17 | String url = "jdbc:mysql://localhost:3306/mango_example";
18 | String username = "root"; // 这里请使用您自己的用户名
19 | String password = "root"; // 这里请使用您自己的密码
20 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
21 | Mango mango = Mango.newInstance(ds); // 使用数据源初始化mango
22 | return mango;
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/binding/README.md:
--------------------------------------------------------------------------------
1 | 参数绑定
2 | =======
3 |
4 | 参数绑定相关文档请查看 http://mango.jfaster.org/binding.html
5 |
6 | 参数绑定
7 | -------
8 |
9 | 所有核心源码均在 [BindingUserDao](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/binding/BindingUserDao.java) 中,使用 [BindingMain](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/binding/BindingMain.java) 运行 [BindingUserDao](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/binding/BindingUserDao.java)
10 |
11 | 需要在数据库 **jdbc:mysql://localhost:3306/mango_example** 中创建下面的表
12 |
13 | ```
14 | DROP TABLE IF EXISTS `binding_user`;
15 | CREATE TABLE `binding_user` (
16 | `id` int(11) NOT NULL AUTO_INCREMENT,
17 | `uid` int(11) NOT NULL,
18 | `name` varchar(200) NOT NULL,
19 | `age` int(11) NOT NULL,
20 | PRIMARY KEY (`id`)
21 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
22 | ```
23 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/mapping/README.md:
--------------------------------------------------------------------------------
1 | 查询映射
2 | =======
3 |
4 | 查询映射相关文档请查看 http://mango.jfaster.org/mapping.html
5 |
6 | 查询映射
7 | -------
8 |
9 | 所有核心源码均在 [MappingDao](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/mapping/MappingDao.java) 中,使用 [MappingMain](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/mapping/MappingMain.java) 运行 [MappingDao](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/mapping/MappingDao.java)
10 |
11 | 需要在数据库 **jdbc:mysql://localhost:3306/mango_example** 中创建下面的表
12 |
13 | ```
14 | DROP TABLE IF EXISTS `mapping_user`;
15 | CREATE TABLE `mapping_user` (
16 | `id` int(11) NOT NULL AUTO_INCREMENT,
17 | `name` varchar(100) NOT NULL,
18 | `user_age` int(11) NOT NULL,
19 | `update_time` datetime NOT NULL,
20 | PRIMARY KEY (`id`)
21 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
22 | ```
23 |
24 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/transfer/Teacher.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.transfer;
2 |
3 | import org.jfaster.mango.annotation.Transfer;
4 | import org.jfaster.mango.invoker.transfer.IntegerListToStringTransfer;
5 |
6 | import java.util.List;
7 |
8 | /**
9 | * @author ash
10 | */
11 | public class Teacher {
12 |
13 | private int id;
14 |
15 | private String name;
16 |
17 | @Transfer(IntegerListToStringTransfer.class)
18 | private List studentIds;
19 |
20 | public int getId() {
21 | return id;
22 | }
23 |
24 | public void setId(int id) {
25 | this.id = id;
26 | }
27 |
28 | public String getName() {
29 | return name;
30 | }
31 |
32 | public void setName(String name) {
33 | this.name = name;
34 | }
35 |
36 | public List getStudentIds() {
37 | return studentIds;
38 | }
39 |
40 | public void setStudentIds(List studentIds) {
41 | this.studentIds = studentIds;
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/basic/README.md:
--------------------------------------------------------------------------------
1 | 基本操作
2 | =======
3 |
4 | 基本操作相关文档请查看 http://mango.jfaster.org/basic.html
5 |
6 | 基本操作
7 | -------
8 |
9 | 所有核心源码均在 [UserDao](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/basic/UserDao.java) 中,使用 [UserMain](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/basic/UserMain.java) 运行 [UserDao](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/basic/UserDao.java)
10 |
11 | 需要在数据库 **jdbc:mysql://localhost:3306/mango_example** 中创建下面的表
12 |
13 | ```
14 | DROP TABLE IF EXISTS `user`;
15 | CREATE TABLE `user` (
16 | `id` int(11) NOT NULL AUTO_INCREMENT,
17 | `name` varchar(25) DEFAULT NULL,
18 | `age` int(11) DEFAULT NULL,
19 | `gender` tinyint(1) DEFAULT NULL,
20 | `money` bigint(21) DEFAULT NULL,
21 | `update_time` timestamp NULL DEFAULT NULL,
22 | PRIMARY KEY (`id`)
23 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
24 | ```
25 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/transaction/README.md:
--------------------------------------------------------------------------------
1 | 事务
2 | ====
3 |
4 | 事务相关文档请查看 http://mango.jfaster.org/transaction.html
5 |
6 | 事务
7 | ----
8 |
9 | 所有核心源码均在 [AccountsDao](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/transaction/AccountsDao.java) 中,使用 [AccountsMain](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/transaction/AccountsMain.java) 或 [AccountsMain2](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/transaction/AccountsMain2.java) 运行 [AccountsDao](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/transaction/AccountsDao.java)
10 |
11 | 需要在数据库 **jdbc:mysql://localhost:3306/mango_example** 中创建下面的表
12 |
13 | ```
14 | DROP TABLE IF EXISTS `accounts`;
15 | CREATE TABLE `accounts` (
16 | `uid` int(11) NOT NULL,
17 | `money` int(11) NOT NULL,
18 | PRIMARY KEY (`uid`)
19 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
20 | ```
21 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/page/Message.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.page;
2 |
3 | import com.google.common.base.MoreObjects;
4 |
5 | public class Message {
6 |
7 | private int id;
8 | private int uid;
9 | private int content;
10 |
11 | public int getId() {
12 | return id;
13 | }
14 |
15 | public void setId(int id) {
16 | this.id = id;
17 | }
18 |
19 | public int getUid() {
20 | return uid;
21 | }
22 |
23 | public void setUid(int uid) {
24 | this.uid = uid;
25 | }
26 |
27 | public int getContent() {
28 | return content;
29 | }
30 |
31 | public void setContent(int content) {
32 | this.content = content;
33 | }
34 |
35 | @Override
36 | public String toString() {
37 | return MoreObjects.toStringHelper(this)
38 | .add("id", id)
39 | .add("uid", uid)
40 | .add("content", content)
41 | .toString();
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/page/PageResultMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.page;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.annotation.ReturnGeneratedId;
5 | import org.jfaster.mango.annotation.SQL;
6 | import org.jfaster.mango.datasource.DriverManagerDataSource;
7 | import org.jfaster.mango.operator.Mango;
8 | import org.jfaster.mango.page.Direction;
9 | import org.jfaster.mango.page.Page;
10 | import org.jfaster.mango.page.PageResult;
11 | import org.jfaster.mango.page.Sort;
12 |
13 | import javax.sql.DataSource;
14 | import java.util.List;
15 |
16 | public class PageResultMain {
17 |
18 | public static void main(String[] args) {
19 | }
20 |
21 | @DB
22 | interface MessageDao {
23 |
24 | @SQL("select id, uid, content from message where uid=:1")
25 | List getMessages(int uid, Page page);
26 |
27 | @SQL("select id, uid, content from message where uid=:1")
28 | PageResult getMessagesWithTotal(int uid, Page page);
29 |
30 | }
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/binding/BindingUser.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.binding;
2 |
3 | import com.google.common.base.MoreObjects;
4 |
5 | /**
6 | * @author ash
7 | */
8 | public class BindingUser {
9 |
10 | private int uid;
11 |
12 | private String name;
13 |
14 | private int age;
15 |
16 | public int getUid() {
17 | return uid;
18 | }
19 |
20 | public void setUid(int uid) {
21 | this.uid = uid;
22 | }
23 |
24 | public String getName() {
25 | return name;
26 | }
27 |
28 | public void setName(String name) {
29 | this.name = name;
30 | }
31 |
32 | public int getAge() {
33 | return age;
34 | }
35 |
36 | public void setAge(int age) {
37 | this.age = age;
38 | }
39 |
40 | @Override
41 | public String toString() {
42 | return MoreObjects.toStringHelper(this)
43 | .add("uid", uid)
44 | .add("name", name)
45 | .add("age", age)
46 | .toString();
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/crud/Order.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.crud;
2 |
3 | import com.google.common.base.MoreObjects;
4 | import org.jfaster.mango.annotation.AutoGenerated;
5 | import org.jfaster.mango.annotation.ID;
6 |
7 | /**
8 | * @author ash
9 | */
10 | public class Order {
11 |
12 | @ID
13 | @AutoGenerated
14 | private int id;
15 |
16 | private int uid;
17 |
18 | private int status;
19 |
20 | public int getId() {
21 | return id;
22 | }
23 |
24 | public void setId(int id) {
25 | this.id = id;
26 | }
27 |
28 | public int getUid() {
29 | return uid;
30 | }
31 |
32 | public void setUid(int uid) {
33 | this.uid = uid;
34 | }
35 |
36 | public int getStatus() {
37 | return status;
38 | }
39 |
40 | public void setStatus(int status) {
41 | this.status = status;
42 | }
43 |
44 | @Override
45 | public String toString() {
46 | return MoreObjects.toStringHelper(this)
47 | .add("id", id)
48 | .add("uid", uid)
49 | .add("status", status)
50 | .toString();
51 | }
52 |
53 | }
54 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/crud/Order2.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.crud;
2 |
3 | import com.google.common.base.MoreObjects;
4 | import org.jfaster.mango.annotation.AutoGenerated;
5 | import org.jfaster.mango.annotation.ID;
6 |
7 | /**
8 | * @author ash
9 | */
10 | public class Order2 {
11 |
12 | @ID
13 | private String orderId;
14 |
15 | private int uid;
16 |
17 | private int status;
18 |
19 | public String getOrderId() {
20 | return orderId;
21 | }
22 |
23 | public void setOrderId(String orderId) {
24 | this.orderId = orderId;
25 | }
26 |
27 | public int getUid() {
28 | return uid;
29 | }
30 |
31 | public void setUid(int uid) {
32 | this.uid = uid;
33 | }
34 |
35 | public int getStatus() {
36 | return status;
37 | }
38 |
39 | public void setStatus(int status) {
40 | this.status = status;
41 | }
42 |
43 | @Override
44 | public String toString() {
45 | return MoreObjects.toStringHelper(this)
46 | .add("orderId", orderId)
47 | .add("uid", uid)
48 | .add("status", status)
49 | .toString();
50 | }
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/transfer/PersonMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.transfer;
2 |
3 | import org.jfaster.mango.datasource.DriverManagerDataSource;
4 | import org.jfaster.mango.operator.Mango;
5 |
6 | import javax.sql.DataSource;
7 |
8 | /**
9 | * @author ash
10 | */
11 | public class PersonMain {
12 |
13 | public static void main(String[] args) {
14 | String driverClassName = "com.mysql.jdbc.Driver";
15 | String url = "jdbc:mysql://localhost:3306/mango_example";
16 | String username = "root"; // 这里请使用您自己的用户名
17 | String password = "root"; // 这里请使用您自己的密码
18 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
19 | Mango mango = Mango.newInstance(ds); // 使用数据源初始化mango
20 |
21 | PersonDao dao = mango.create(PersonDao.class);
22 | Person person = new Person();
23 | person.setName("ash");
24 | person.setGender(Gender.MALE);
25 | int id = dao.addPerson(person);
26 | Person personFromDb = dao.getPersonById(id);
27 | System.out.println("name=" + personFromDb.getName());
28 | System.out.println("gender=" + personFromDb.getGender());
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/dynamic/UserMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.dynamic;
2 |
3 | import org.jfaster.mango.datasource.DriverManagerDataSource;
4 | import org.jfaster.mango.operator.Mango;
5 | import org.jfaster.mango.util.logging.MangoLogger;
6 |
7 | import javax.sql.DataSource;
8 |
9 | /**
10 | * @author ash
11 | */
12 | public class UserMain {
13 |
14 | public static void main(String[] args) {
15 |
16 | // 使用System.out输出sql,方便查看
17 | MangoLogger.useConsoleLogger();
18 |
19 | String driverClassName = "com.mysql.jdbc.Driver";
20 | String url = "jdbc:mysql://localhost:3306/mango_example";
21 | String username = "root"; // 这里请使用您自己的用户名
22 | String password = "root"; // 这里请使用您自己的密码
23 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
24 | Mango mango = Mango.newInstance(ds); // 使用数据源初始化mango
25 |
26 | UserDao dao = mango.create(UserDao.class);
27 |
28 | dao.getUsers("uid");
29 | dao.getUsers("name");
30 |
31 | dao.getUser(10);
32 | dao.getUser(-1);
33 |
34 | dao.getUser2(10);
35 | dao.getUser2(0);
36 | dao.getUser2(-5);
37 |
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/sharding/Order.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.sharding;
2 |
3 | import com.google.common.base.MoreObjects;
4 |
5 | /**
6 | * @author ash
7 | */
8 | public class Order {
9 |
10 | private String id;
11 |
12 | private int uid;
13 |
14 | private int price;
15 |
16 | private int status;
17 |
18 | public String getId() {
19 | return id;
20 | }
21 |
22 | public void setId(String id) {
23 | this.id = id;
24 | }
25 |
26 | public int getUid() {
27 | return uid;
28 | }
29 |
30 | public void setUid(int uid) {
31 | this.uid = uid;
32 | }
33 |
34 | public int getPrice() {
35 | return price;
36 | }
37 |
38 | public void setPrice(int price) {
39 | this.price = price;
40 | }
41 |
42 | public int getStatus() {
43 | return status;
44 | }
45 |
46 | public void setStatus(int status) {
47 | this.status = status;
48 | }
49 |
50 | @Override
51 | public String toString() {
52 | return MoreObjects.toStringHelper(this)
53 | .add("id", id)
54 | .add("uid", uid)
55 | .add("price", price)
56 | .add("status", status)
57 | .toString();
58 | }
59 |
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/datasource/Blog.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.datasource;
2 |
3 | import com.google.common.base.MoreObjects;
4 |
5 | /**
6 | * @author ash
7 | */
8 | public class Blog {
9 |
10 | private int id;
11 |
12 | private int uid;
13 |
14 | private String title;
15 |
16 | private String content;
17 |
18 | public int getId() {
19 | return id;
20 | }
21 |
22 | public void setId(int id) {
23 | this.id = id;
24 | }
25 |
26 | public int getUid() {
27 | return uid;
28 | }
29 |
30 | public void setUid(int uid) {
31 | this.uid = uid;
32 | }
33 |
34 | public String getTitle() {
35 | return title;
36 | }
37 |
38 | public void setTitle(String title) {
39 | this.title = title;
40 | }
41 |
42 | public String getContent() {
43 | return content;
44 | }
45 |
46 | public void setContent(String content) {
47 | this.content = content;
48 | }
49 |
50 | @Override
51 | public String toString() {
52 | return MoreObjects.toStringHelper(this)
53 | .add("id", id)
54 | .add("uid", uid)
55 | .add("title", title)
56 | .add("content", content)
57 | .toString();
58 | }
59 |
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/transfer/TeacherMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.transfer;
2 |
3 | import org.jfaster.mango.datasource.DriverManagerDataSource;
4 | import org.jfaster.mango.operator.Mango;
5 |
6 | import javax.sql.DataSource;
7 | import java.util.Arrays;
8 | import java.util.List;
9 |
10 | /**
11 | * @author ash
12 | */
13 | public class TeacherMain {
14 |
15 | public static void main(String[] args) {
16 | String driverClassName = "com.mysql.jdbc.Driver";
17 | String url = "jdbc:mysql://localhost:3306/mango_example";
18 | String username = "root"; // 这里请使用您自己的用户名
19 | String password = "root"; // 这里请使用您自己的密码
20 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
21 | Mango mango = Mango.newInstance(ds); // 使用数据源初始化mango
22 |
23 | TeacherDao dao = mango.create(TeacherDao.class);
24 | Teacher teacher = new Teacher();
25 | String name = "ash";
26 | List studentIds = Arrays.asList(1, 2, 3);
27 | teacher.setName(name);
28 | teacher.setStudentIds(studentIds);
29 | int id = dao.addTeacher(teacher);
30 | Teacher teacherFromDb = dao.getTeacherById(id);
31 | System.out.println("name=" + teacherFromDb.getName());
32 | System.out.println("studentIds=" + teacherFromDb.getStudentIds());
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/crud/Order3.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.crud;
2 |
3 | import com.google.common.base.MoreObjects;
4 | import org.jfaster.mango.annotation.AutoGenerated;
5 | import org.jfaster.mango.annotation.ID;
6 |
7 | /**
8 | * @author ash
9 | */
10 | public class Order3 {
11 |
12 | @AutoGenerated
13 | private int id;
14 |
15 | @ID
16 | private String orderId;
17 |
18 | private int uid;
19 |
20 | private int status;
21 |
22 | public int getId() {
23 | return id;
24 | }
25 |
26 | public void setId(int id) {
27 | this.id = id;
28 | }
29 |
30 | public String getOrderId() {
31 | return orderId;
32 | }
33 |
34 | public void setOrderId(String orderId) {
35 | this.orderId = orderId;
36 | }
37 |
38 | public int getUid() {
39 | return uid;
40 | }
41 |
42 | public void setUid(int uid) {
43 | this.uid = uid;
44 | }
45 |
46 | public int getStatus() {
47 | return status;
48 | }
49 |
50 | public void setStatus(int status) {
51 | this.status = status;
52 | }
53 |
54 | @Override
55 | public String toString() {
56 | return MoreObjects.toStringHelper(this)
57 | .add("id", id)
58 | .add("orderId", orderId)
59 | .add("uid", uid)
60 | .add("status", status)
61 | .toString();
62 | }
63 |
64 | }
65 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/datasource/Article.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.datasource;
2 |
3 | import com.google.common.base.MoreObjects;
4 |
5 | /**
6 | * @author ash
7 | */
8 | public class Article {
9 |
10 | private int id;
11 |
12 | private int uid;
13 |
14 | private String title;
15 |
16 | private String content;
17 |
18 | public int getId() {
19 | return id;
20 | }
21 |
22 | public void setId(int id) {
23 | this.id = id;
24 | }
25 |
26 | public int getUid() {
27 | return uid;
28 | }
29 |
30 | public void setUid(int uid) {
31 | this.uid = uid;
32 | }
33 |
34 | public String getTitle() {
35 | return title;
36 | }
37 |
38 | public void setTitle(String title) {
39 | this.title = title;
40 | }
41 |
42 | public String getContent() {
43 | return content;
44 | }
45 |
46 | public void setContent(String content) {
47 | this.content = content;
48 | }
49 |
50 | @Override
51 | public String toString() {
52 | return MoreObjects.toStringHelper(this)
53 | .add("id", id)
54 | .add("uid", uid)
55 | .add("title", title)
56 | .add("content", content)
57 | .toString();
58 | }
59 |
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/datasource/Comment.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.datasource;
2 |
3 | import com.google.common.base.MoreObjects;
4 |
5 | /**
6 | * @author ash
7 | */
8 | public class Comment {
9 |
10 | private int id;
11 |
12 | private int uid;
13 |
14 | private String title;
15 |
16 | private String content;
17 |
18 | public int getId() {
19 | return id;
20 | }
21 |
22 | public void setId(int id) {
23 | this.id = id;
24 | }
25 |
26 | public int getUid() {
27 | return uid;
28 | }
29 |
30 | public void setUid(int uid) {
31 | this.uid = uid;
32 | }
33 |
34 | public String getTitle() {
35 | return title;
36 | }
37 |
38 | public void setTitle(String title) {
39 | this.title = title;
40 | }
41 |
42 | public String getContent() {
43 | return content;
44 | }
45 |
46 | public void setContent(String content) {
47 | this.content = content;
48 | }
49 |
50 | @Override
51 | public String toString() {
52 | return MoreObjects.toStringHelper(this)
53 | .add("id", id)
54 | .add("uid", uid)
55 | .add("title", title)
56 | .add("content", content)
57 | .toString();
58 | }
59 |
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/transfer/CardMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.transfer;
2 |
3 | import org.jfaster.mango.datasource.DriverManagerDataSource;
4 | import org.jfaster.mango.operator.Mango;
5 |
6 | import javax.sql.DataSource;
7 |
8 | /**
9 | * @author ash
10 | */
11 | public class CardMain {
12 |
13 | public static void main(String[] args) {
14 | String driverClassName = "com.mysql.jdbc.Driver";
15 | String url = "jdbc:mysql://localhost:3306/mango_example";
16 | String username = "root"; // 这里请使用您自己的用户名
17 | String password = "root"; // 这里请使用您自己的密码
18 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
19 | Mango mango = Mango.newInstance(ds); // 使用数据源初始化mango
20 |
21 | CardDao dao = mango.create(CardDao.class);
22 | Card card = new Card();
23 | String name = "ash";
24 | SubCard sc = new SubCard();
25 | sc.setType(10);
26 | sc.setContent("hello");
27 | card.setName(name);
28 | card.setSubCard(sc);
29 | int id = dao.addCard(card);
30 | Card cardFromDb = dao.getCardById(id);
31 | System.out.println("name=" + cardFromDb.getName());
32 | System.out.println("subCard.type=" + cardFromDb.getSubCard().getType());
33 | System.out.println("subCard.content=" + cardFromDb.getSubCard().getContent());
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/crud/OrderDaoMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.crud;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.crud.CrudDao;
5 | import org.jfaster.mango.datasource.DriverManagerDataSource;
6 | import org.jfaster.mango.operator.Mango;
7 |
8 | import javax.sql.DataSource;
9 |
10 | /**
11 | * @author ash
12 | */
13 | public class OrderDaoMain {
14 |
15 | public static void main(String[] args) {
16 | String driverClassName = "com.mysql.jdbc.Driver";
17 | String url = "jdbc:mysql://localhost:3306/mango_example";
18 | String username = "root"; // 这里请使用您自己的用户名
19 | String password = "root"; // 这里请使用您自己的密码
20 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
21 | Mango mango = Mango.newInstance(ds); // 使用数据源初始化mango
22 |
23 | OrderDao dao = mango.create(OrderDao.class);
24 | Order order = new Order();
25 | order.setUid(100);
26 | order.setStatus(1);
27 | dao.add(order);
28 | int id = (int) dao.addAndReturnGeneratedId(order);
29 | order.setId(id);
30 | System.out.println(dao.getOne(id));
31 | order.setStatus(2);
32 | dao.update(order);
33 | System.out.println(dao.getOne(id));
34 | }
35 |
36 | @DB(table = "t_order")
37 | interface OrderDao extends CrudDao {
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/mapping/MappingUser.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.mapping;
2 |
3 | import com.google.common.base.MoreObjects;
4 |
5 | import java.util.Date;
6 |
7 | /**
8 | * @author ash
9 | */
10 | public class MappingUser {
11 |
12 | private int id;
13 | private String name;
14 | private int userAge;
15 | private Date updateTime;
16 |
17 | public int getId() {
18 | return id;
19 | }
20 |
21 | public void setId(int id) {
22 | this.id = id;
23 | }
24 |
25 | public String getName() {
26 | return name;
27 | }
28 |
29 | public void setName(String name) {
30 | this.name = name;
31 | }
32 |
33 | public int getUserAge() {
34 | return userAge;
35 | }
36 |
37 | public void setUserAge(int userAge) {
38 | this.userAge = userAge;
39 | }
40 |
41 | public Date getUpdateTime() {
42 | return updateTime;
43 | }
44 |
45 | public void setUpdateTime(Date updateTime) {
46 | this.updateTime = updateTime;
47 | }
48 |
49 | @Override
50 | public String toString() {
51 | return MoreObjects.toStringHelper(this)
52 | .add("id", id)
53 | .add("name", name)
54 | .add("userAge", userAge)
55 | .add("updateTime", updateTime)
56 | .toString();
57 | }
58 |
59 | }
60 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/quickstart/HelloWorld.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.quickstart;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.annotation.SQL;
5 | import org.jfaster.mango.datasource.DriverManagerDataSource;
6 | import org.jfaster.mango.operator.Mango;
7 |
8 | import javax.sql.DataSource;
9 |
10 | public class HelloWorld {
11 |
12 | public static void main(String[] args) {
13 | String driverClassName = "com.mysql.jdbc.Driver";
14 | String url = "jdbc:mysql://localhost:3306/mango_example";
15 | String username = "root"; // 这里请使用您自己的用户名
16 | String password = "root"; // 这里请使用您自己的密码
17 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
18 | Mango mango = Mango.newInstance(ds); // 使用数据源初始化mango
19 |
20 | FruitDao dao = mango.create(FruitDao.class);
21 | String name = "apple";
22 | int num = 7;
23 | dao.add(name, num);
24 | System.out.println(dao.getTotalNum(name));
25 | }
26 |
27 | @DB
28 | interface FruitDao {
29 |
30 | // 插入数据
31 | @SQL("insert into fruit(name, num) values(:1, :2)")
32 | public void add(String name, int num);
33 |
34 | // 根据name取num的总和
35 | @SQL("select sum(num) from fruit where name=:1")
36 | public int getTotalNum(String name);
37 |
38 | }
39 |
40 | }
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/binding/BindingMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.binding;
2 |
3 | import org.jfaster.mango.datasource.DriverManagerDataSource;
4 | import org.jfaster.mango.operator.Mango;
5 |
6 | import javax.sql.DataSource;
7 |
8 | /**
9 | * @author ash
10 | */
11 | public class BindingMain {
12 |
13 | public static void main(String[] args) {
14 | String driverClassName = "com.mysql.jdbc.Driver";
15 | String url = "jdbc:mysql://localhost:3306/mango_example";
16 | String username = "root"; // 这里请使用您自己的用户名
17 | String password = "root"; // 这里请使用您自己的密码
18 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
19 | Mango mango = Mango.newInstance(ds); // 使用数据源初始化mango
20 |
21 | BindingUserDao dao = mango.create(BindingUserDao.class);
22 | int uid = 9527;
23 | String name = "ash";
24 | int age = 28;
25 | BindingUser user = new BindingUser();
26 | user.setUid(uid);
27 | user.setName(name);
28 | user.setAge(age);
29 |
30 | dao.addUserByIndex(uid, name, age);
31 | dao.addUserByRename(uid, name, age);
32 | dao.addUserByObjIndex(user);
33 | dao.addUserByObjRename(user);
34 | dao.addUserByProperty(user);
35 | dao.addUserByMix(uid, user);
36 |
37 | System.out.println(dao.getUsersByUid(uid));
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/datasource/ArticleMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.datasource;
2 |
3 | import org.jfaster.mango.datasource.DataSourceFactory;
4 | import org.jfaster.mango.datasource.DriverManagerDataSource;
5 | import org.jfaster.mango.datasource.SimpleDataSourceFactory;
6 | import org.jfaster.mango.operator.Mango;
7 |
8 | import javax.sql.DataSource;
9 |
10 | public class ArticleMain {
11 |
12 | public static void main(String[] args) {
13 | String driverClassName = "com.mysql.jdbc.Driver";
14 | String url = "jdbc:mysql://localhost:3306/mango_example";
15 | String username = "root"; // 这里请使用您自己的用户名
16 | String password = "root"; // 这里请使用您自己的密码
17 |
18 | DataSource datasource = new DriverManagerDataSource(driverClassName, url, username, password);
19 | DataSourceFactory dsf = new SimpleDataSourceFactory(datasource);
20 | Mango mango = Mango.newInstance(dsf);
21 | //Mango mango = Mango.newInstance(datasource);
22 |
23 | ArticleDao dao = mango.create(ArticleDao.class);
24 | Article article = new Article();
25 | article.setUid(9527);
26 | article.setTitle("article_title");
27 | article.setContent("article_content");
28 |
29 | int id = dao.addArticle(article);
30 | System.out.println(dao.getArticle(id));
31 | }
32 |
33 | }
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/crud/OrderDao2Main.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.crud;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.crud.CrudDao;
5 | import org.jfaster.mango.datasource.DriverManagerDataSource;
6 | import org.jfaster.mango.example.util.RandomUtils;
7 | import org.jfaster.mango.operator.Mango;
8 |
9 | import javax.sql.DataSource;
10 |
11 | /**
12 | * @author ash
13 | */
14 | public class OrderDao2Main {
15 |
16 | public static void main(String[] args) {
17 | String driverClassName = "com.mysql.jdbc.Driver";
18 | String url = "jdbc:mysql://localhost:3306/mango_example";
19 | String username = "root"; // 这里请使用您自己的用户名
20 | String password = "root"; // 这里请使用您自己的密码
21 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
22 | Mango mango = Mango.newInstance(ds); // 使用数据源初始化mango
23 |
24 | Order2Dao dao = mango.create(Order2Dao.class);
25 | Order2 order2 = new Order2();
26 | String orderId = RandomUtils.randomStringId(10);
27 | order2.setOrderId(orderId);
28 | order2.setUid(100);
29 | order2.setStatus(1);
30 | dao.add(order2);
31 | System.out.println(dao.getOne(orderId));
32 | order2.setStatus(2);
33 | dao.update(order2);
34 | System.out.println(dao.getOne(orderId));
35 | }
36 |
37 | @DB(table = "t_order2")
38 | interface Order2Dao extends CrudDao {
39 | }
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/crud/OrderDao3Main.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.crud;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.crud.CrudDao;
5 | import org.jfaster.mango.datasource.DriverManagerDataSource;
6 | import org.jfaster.mango.example.util.RandomUtils;
7 | import org.jfaster.mango.operator.Mango;
8 |
9 | import javax.sql.DataSource;
10 |
11 | /**
12 | * @author ash
13 | */
14 | public class OrderDao3Main {
15 |
16 | public static void main(String[] args) {
17 | String driverClassName = "com.mysql.jdbc.Driver";
18 | String url = "jdbc:mysql://localhost:3306/mango_example";
19 | String username = "root"; // 这里请使用您自己的用户名
20 | String password = "root"; // 这里请使用您自己的密码
21 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
22 | Mango mango = Mango.newInstance(ds); // 使用数据源初始化mango
23 |
24 | Order3Dao dao = mango.create(Order3Dao.class);
25 | Order3 order3 = new Order3();
26 | String orderId = RandomUtils.randomStringId(10);
27 | order3.setOrderId(orderId);
28 | order3.setUid(100);
29 | order3.setStatus(1);
30 | dao.add(order3);
31 | System.out.println(dao.getOne(orderId));
32 | order3.setStatus(2);
33 | dao.update(order3);
34 | System.out.println(dao.getOne(orderId));
35 | }
36 |
37 | @DB(table = "t_order3")
38 | interface Order3Dao extends CrudDao {
39 | }
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/resources/org/jfaster/mango/example/spring/applicationContext-simple.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | org.jfaster.mango.example.spring
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/mapping/MappingUser2.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.mapping;
2 |
3 | import com.google.common.base.MoreObjects;
4 |
5 | import java.util.Date;
6 |
7 | /**
8 | * @author ash
9 | */
10 | public class MappingUser2 {
11 |
12 | private int userId;
13 | private String userName;
14 | private int userAge;
15 | private Date updateTime;
16 |
17 | public int getUserId() {
18 | return userId;
19 | }
20 |
21 | public void setUserId(int userId) {
22 | this.userId = userId;
23 | }
24 |
25 | public String getUserName() {
26 | return userName;
27 | }
28 |
29 | public void setUserName(String userName) {
30 | this.userName = userName;
31 | }
32 |
33 | public int getUserAge() {
34 | return userAge;
35 | }
36 |
37 | public void setUserAge(int userAge) {
38 | this.userAge = userAge;
39 | }
40 |
41 | public Date getUpdateTime() {
42 | return updateTime;
43 | }
44 |
45 | public void setUpdateTime(Date updateTime) {
46 | this.updateTime = updateTime;
47 | }
48 |
49 | @Override
50 | public String toString() {
51 | return MoreObjects.toStringHelper(this)
52 | .add("userId", userId)
53 | .add("userName", userName)
54 | .add("userAge", userAge)
55 | .add("updateTime", updateTime)
56 | .toString();
57 | }
58 |
59 | }
60 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/logging/ConsoleMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.logging;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.annotation.SQL;
5 | import org.jfaster.mango.datasource.DriverManagerDataSource;
6 | import org.jfaster.mango.operator.Mango;
7 | import org.jfaster.mango.util.logging.MangoLogger;
8 |
9 | import javax.sql.DataSource;
10 |
11 | /**
12 | * @author ash
13 | */
14 | public class ConsoleMain {
15 |
16 | public static void main(String[] args) {
17 | MangoLogger.useConsoleLogger(); // 使用System.out输出日志
18 |
19 | String driverClassName = "com.mysql.jdbc.Driver";
20 | String url = "jdbc:mysql://localhost:3306/mango_example";
21 | String username = "root"; // 这里请使用您自己的用户名
22 | String password = "root"; // 这里请使用您自己的密码
23 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
24 | Mango mango = Mango.newInstance(ds); // 使用数据源初始化mango
25 |
26 | FruitDao dao = mango.create(FruitDao.class);
27 | String name = "apple";
28 | int num = 7;
29 | dao.add(name, num);
30 | }
31 |
32 | @DB
33 | interface FruitDao {
34 |
35 | // 插入数据
36 | @SQL("insert into fruit(name, num) values(:1, :2)")
37 | public void add(String name, int num);
38 |
39 | // 根据name取num的总和
40 | @SQL("select sum(num) from fruit where name=:1")
41 | public int getTotalNum(String name);
42 |
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/logging/Log4JMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.logging;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.annotation.SQL;
5 | import org.jfaster.mango.datasource.DriverManagerDataSource;
6 | import org.jfaster.mango.operator.Mango;
7 | import org.jfaster.mango.util.logging.MangoLogger;
8 |
9 | import javax.sql.DataSource;
10 |
11 | /**
12 | * @author ash
13 | */
14 | public class Log4JMain {
15 |
16 | public static void main(String[] args) {
17 | MangoLogger.useLog4JLogger(); // 使用log4j输出日志,log4j.xml文件在resources目录下
18 |
19 | String driverClassName = "com.mysql.jdbc.Driver";
20 | String url = "jdbc:mysql://localhost:3306/mango_example";
21 | String username = "root"; // 这里请使用您自己的用户名
22 | String password = "root"; // 这里请使用您自己的密码
23 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
24 | Mango mango = Mango.newInstance(ds); // 使用数据源初始化mango
25 |
26 | FruitDao dao = mango.create(FruitDao.class);
27 | String name = "apple";
28 | int num = 7;
29 | dao.add(name, num);
30 | }
31 |
32 | @DB
33 | interface FruitDao {
34 |
35 | // 插入数据
36 | @SQL("insert into fruit(name, num) values(:1, :2)")
37 | public void add(String name, int num);
38 |
39 | // 根据name取num的总和
40 | @SQL("select sum(num) from fruit where name=:1")
41 | public int getTotalNum(String name);
42 |
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/logging/Log4J2Main.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.logging;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.annotation.SQL;
5 | import org.jfaster.mango.datasource.DriverManagerDataSource;
6 | import org.jfaster.mango.operator.Mango;
7 | import org.jfaster.mango.util.logging.MangoLogger;
8 |
9 | import javax.sql.DataSource;
10 |
11 | /**
12 | * @author ash
13 | */
14 | public class Log4J2Main {
15 |
16 | public static void main(String[] args) {
17 | MangoLogger.useLog4J2Logger(); // 使用log4j2输出日志,log4j2.xml文件在resources目录下
18 |
19 | String driverClassName = "com.mysql.jdbc.Driver";
20 | String url = "jdbc:mysql://localhost:3306/mango_example";
21 | String username = "root"; // 这里请使用您自己的用户名
22 | String password = "root"; // 这里请使用您自己的密码
23 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
24 | Mango mango = Mango.newInstance(ds); // 使用数据源初始化mango
25 |
26 | FruitDao dao = mango.create(FruitDao.class);
27 | String name = "apple";
28 | int num = 7;
29 | dao.add(name, num);
30 | }
31 |
32 | @DB
33 | interface FruitDao {
34 |
35 | // 插入数据
36 | @SQL("insert into fruit(name, num) values(:1, :2)")
37 | public void add(String name, int num);
38 |
39 | // 根据name取num的总和
40 | @SQL("select sum(num) from fruit where name=:1")
41 | public int getTotalNum(String name);
42 |
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/transaction/AccountsMain2.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.transaction;
2 |
3 | import org.jfaster.mango.datasource.DriverManagerDataSource;
4 | import org.jfaster.mango.operator.Mango;
5 | import org.jfaster.mango.transaction.*;
6 |
7 | import javax.sql.DataSource;
8 |
9 | public class AccountsMain2 {
10 |
11 | public static void main(String[] args) {
12 | String driverClassName = "com.mysql.jdbc.Driver";
13 | String url = "jdbc:mysql://localhost:3306/mango_example";
14 | String username = "root"; // 这里请使用您自己的用户名
15 | String password = "root"; // 这里请使用您自己的密码
16 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
17 | Mango mango = Mango.newInstance(ds);
18 |
19 | final AccountsDao dao = mango.create(AccountsDao.class);
20 |
21 | final int zhangsan = 1;
22 | final int lisi = 2;
23 | final int money = 100;
24 |
25 | if (dao.getAccount(zhangsan) == null) {
26 | dao.addAccount(zhangsan, 10000);
27 | }
28 | if (dao.getAccount(lisi) == null) {
29 | dao.addAccount(lisi, 10000);
30 | }
31 |
32 | TransactionTemplate.execute(new TransactionAction() {
33 |
34 | @Override
35 | public void doInTransaction(TransactionStatus status) {
36 | dao.transferMoney(zhangsan, -money);
37 | dao.transferMoney(lisi, money);
38 | }
39 | });
40 |
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/transaction/AccountsMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.transaction;
2 |
3 | import org.jfaster.mango.datasource.DriverManagerDataSource;
4 | import org.jfaster.mango.operator.Mango;
5 | import org.jfaster.mango.transaction.Transaction;
6 | import org.jfaster.mango.transaction.TransactionFactory;
7 |
8 | import javax.sql.DataSource;
9 |
10 | public class AccountsMain {
11 |
12 | public static void main(String[] args) {
13 | String driverClassName = "com.mysql.jdbc.Driver";
14 | String url = "jdbc:mysql://localhost:3306/mango_example";
15 | String username = "root"; // 这里请使用您自己的用户名
16 | String password = "root"; // 这里请使用您自己的密码
17 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
18 | Mango mango = Mango.newInstance(ds);
19 |
20 | AccountsDao dao = mango.create(AccountsDao.class);
21 |
22 | int zhangsan = 1;
23 | int lisi = 2;
24 | int money = 100;
25 |
26 | if (dao.getAccount(zhangsan) == null) {
27 | dao.addAccount(zhangsan, 10000);
28 | }
29 | if (dao.getAccount(lisi) == null) {
30 | dao.addAccount(lisi, 10000);
31 | }
32 |
33 | Transaction tx = TransactionFactory.newTransaction();
34 | try {
35 | dao.transferMoney(zhangsan, -money);
36 | dao.transferMoney(lisi, money);
37 | } catch (Throwable e) {
38 | tx.rollback();
39 | return;
40 | }
41 | tx.commit();
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/binding/BindingUserDao.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.binding;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.annotation.Rename;
5 | import org.jfaster.mango.annotation.SQL;
6 |
7 | import java.util.List;
8 |
9 | /**
10 | * @author ash
11 | */
12 | @DB
13 | public interface BindingUserDao {
14 |
15 | @SQL("insert into binding_user(uid, name, age) values(:1, :2, :3)")
16 | public void addUserByIndex(int uid, String name, int age);
17 |
18 | @SQL("insert into binding_user(uid, name, age) values(:uid, :name, :age)")
19 | void addUserByRename(@Rename("uid") int uid, @Rename("name") String name, @Rename("age") int age);
20 |
21 | // @SQL("insert into binding_user(uid, name, age) values(:1, :name, :age)")
22 | // void addUserError(@Rename("uid") int uid, @Rename("name") String name, @Rename("age") int age);
23 |
24 | @SQL("insert into binding_user(uid, name, age) values(:1.uid, :1.name, :1.age)")
25 | public void addUserByObjIndex(BindingUser user);
26 |
27 | @SQL("insert into binding_user(uid, name, age) values(:u.uid, :u.name, :u.age)")
28 | public void addUserByObjRename(@Rename("u") BindingUser user);
29 |
30 | @SQL("insert into binding_user(uid, name, age) values(:uid, :name, :age)")
31 | public void addUserByProperty(BindingUser user);
32 |
33 | @SQL("insert into binding_user(uid, name, age) values(:myuid, :name, :age)")
34 | public void addUserByMix(@Rename("myuid") int uid, BindingUser user);
35 |
36 | @SQL("select uid, name, age from binding_user where uid = :1")
37 | public List getUsersByUid(int uid);
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/datasource/MasterSlaveArticleMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.datasource;
2 |
3 | import org.jfaster.mango.datasource.DataSourceFactory;
4 | import org.jfaster.mango.datasource.DriverManagerDataSource;
5 | import org.jfaster.mango.datasource.MasterSlaveDataSourceFactory;
6 | import org.jfaster.mango.operator.Mango;
7 |
8 | import javax.sql.DataSource;
9 | import java.util.Arrays;
10 |
11 | public class MasterSlaveArticleMain {
12 |
13 | public static void main(String[] args) {
14 | String driverClassName = "com.mysql.jdbc.Driver";
15 | String url = "jdbc:mysql://localhost:3306/mango_example";
16 | String username = "root"; // 这里请使用您自己的用户名
17 | String password = "root"; // 这里请使用您自己的密码
18 |
19 | // 连主库的数据源
20 | DataSource master = new DriverManagerDataSource(driverClassName, url, username, password);
21 |
22 | // 连从库的数据库,为了简单,参数与主库一致,实际情况下从库有不同的url,username,password
23 | DataSource slave1 = new DriverManagerDataSource(driverClassName, url, username, password);
24 | DataSource slave2 = new DriverManagerDataSource(driverClassName, url, username, password);
25 |
26 | DataSourceFactory dsf = new MasterSlaveDataSourceFactory(master, Arrays.asList(slave1, slave2));
27 | Mango mango = Mango.newInstance(dsf);
28 |
29 | ArticleDao dao = mango.create(ArticleDao.class);
30 | Article article = new Article();
31 | article.setUid(9527);
32 | article.setTitle("article_title");
33 | article.setContent("article_content");
34 |
35 | int id = dao.addArticle(article);
36 | System.out.println(dao.getArticle(id));
37 | }
38 |
39 | }
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/logging/Slf4JMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.logging;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.annotation.SQL;
5 | import org.jfaster.mango.datasource.DriverManagerDataSource;
6 | import org.jfaster.mango.operator.Mango;
7 | import org.jfaster.mango.util.logging.MangoLogger;
8 |
9 | import javax.sql.DataSource;
10 |
11 | /**
12 | * @author ash
13 | */
14 | public class Slf4JMain {
15 |
16 | /**
17 | * !!!
18 | * 为了避免工程中其他示例代码输出debug信息,影响显示输出结果
19 | * resources目录下logback.xml文件中logger的level被设置成了error
20 | * 运行此代码时,请将logback.xml文件中logger的level从error改为debug
21 | * !!!
22 | */
23 | public static void main(String[] args) {
24 | MangoLogger.useSlf4JLogger(); // 使用slf4j输出日志,logback.xml文件在resources目录下
25 |
26 | String driverClassName = "com.mysql.jdbc.Driver";
27 | String url = "jdbc:mysql://localhost:3306/mango_example";
28 | String username = "root"; // 这里请使用您自己的用户名
29 | String password = "root"; // 这里请使用您自己的密码
30 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
31 | Mango mango = Mango.newInstance(ds); // 使用数据源初始化mango
32 |
33 | FruitDao dao = mango.create(FruitDao.class);
34 | String name = "apple";
35 | int num = 7;
36 | dao.add(name, num);
37 | }
38 |
39 | @DB
40 | interface FruitDao {
41 |
42 | // 插入数据
43 | @SQL("insert into fruit(name, num) values(:1, :2)")
44 | public void add(String name, int num);
45 |
46 | // 根据name取num的总和
47 | @SQL("select sum(num) from fruit where name=:1")
48 | public int getTotalNum(String name);
49 |
50 | }
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/basic/User.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.basic;
2 |
3 | import com.google.common.base.MoreObjects;
4 |
5 | import java.util.Date;
6 |
7 | /**
8 | * @author ash
9 | */
10 | public class User {
11 |
12 | private int id;
13 | private String name;
14 | private int age;
15 | private boolean gender;
16 | private Long money;
17 | private Date updateTime;
18 |
19 | public int getId() {
20 | return id;
21 | }
22 |
23 | public void setId(int id) {
24 | this.id = id;
25 | }
26 |
27 | public String getName() {
28 | return name;
29 | }
30 |
31 | public void setName(String name) {
32 | this.name = name;
33 | }
34 |
35 | public int getAge() {
36 | return age;
37 | }
38 |
39 | public void setAge(int age) {
40 | this.age = age;
41 | }
42 |
43 | public boolean isGender() {
44 | return gender;
45 | }
46 |
47 | public void setGender(boolean gender) {
48 | this.gender = gender;
49 | }
50 |
51 | public Long getMoney() {
52 | return money;
53 | }
54 |
55 | public void setMoney(Long money) {
56 | this.money = money;
57 | }
58 |
59 | public Date getUpdateTime() {
60 | return updateTime;
61 | }
62 |
63 | public void setUpdateTime(Date updateTime) {
64 | this.updateTime = updateTime;
65 | }
66 |
67 | @Override
68 | public String toString() {
69 | return MoreObjects.toStringHelper(this)
70 | .add("id", id)
71 | .add("name", name)
72 | .add("age", age)
73 | .add("gender", gender)
74 | .add("money", money)
75 | .add("updateTime", updateTime)
76 | .toString();
77 | }
78 |
79 | }
80 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/basic/UserDao.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.basic;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.annotation.ReturnGeneratedId;
5 | import org.jfaster.mango.annotation.SQL;
6 |
7 | import java.util.Date;
8 | import java.util.List;
9 |
10 | /**
11 | * @author ash
12 | */
13 | @DB
14 | public interface UserDao {
15 |
16 | @SQL("insert into user(name, age, gender, money, update_time) values(:1, :2, :3, :4, :5)")
17 | public void insertUser(String name, int age, boolean gender, long money, Date updateTime);
18 |
19 | @ReturnGeneratedId
20 | @SQL("insert into user(name, age, gender, money, update_time) " +
21 | "values(:1.name, :1.age, :1.gender, :1.money, :1.updateTime)")
22 | public int insertUser(User user);
23 |
24 | @SQL("delete from user where id=:1")
25 | public int deleteUser(int id);
26 |
27 | @SQL("update user set name=:1.name, age=:1.age, gender=:1.gender, " +
28 | "money=:1.money, update_time=:1.updateTime where id=:1.id")
29 | public int updateUser(User user);
30 |
31 | @SQL("select name from user where id = :1")
32 | public String getName(int id);
33 |
34 | @SQL("select id, name, age, gender, money, update_time from user where id = :1")
35 | public User getUser(int id);
36 |
37 | @SQL("select id, name, age, gender, money, update_time from user where age=:1 order by id")
38 | public List getUsersByAge(int age);
39 |
40 | @SQL("select id, name, age, gender, money, update_time from user where id in (:1)")
41 | public List getUsersInList(List ids);
42 |
43 | @SQL("insert into user(name, age, gender, money, update_time) " +
44 | "values(:1.name, :1.age, :1.gender, :1.money, :1.updateTime)")
45 | public int[] batchInsertUserList(List userList);
46 |
47 |
48 | }
49 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/mapping/MappingMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.mapping;
2 |
3 | import org.jfaster.mango.datasource.DriverManagerDataSource;
4 | import org.jfaster.mango.operator.Mango;
5 |
6 | import javax.sql.DataSource;
7 | import java.util.Arrays;
8 | import java.util.Date;
9 | import java.util.List;
10 |
11 | /**
12 | * @author ash
13 | */
14 | public class MappingMain {
15 |
16 | public static void main(String[] args) {
17 | String driverClassName = "com.mysql.jdbc.Driver";
18 | String url = "jdbc:mysql://localhost:3306/mango_example";
19 | String username = "root"; // 这里请使用您自己的用户名
20 | String password = "root"; // 这里请使用您自己的密码
21 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
22 | Mango mango = Mango.newInstance(ds); // 使用数据源初始化mango
23 |
24 | MappingDao dao = mango.create(MappingDao.class);
25 | MappingUser u1 = new MappingUser();
26 | u1.setName("ash");
27 | u1.setUserAge(25);
28 | u1.setUpdateTime(new Date());
29 | System.out.println(u1);
30 | int id1 = dao.addMappingUser(u1);
31 | MappingUser u2 = new MappingUser();
32 | u2.setName("lucy");
33 | u2.setUserAge(18);
34 | u2.setUpdateTime(new Date());
35 | int id2 = dao.addMappingUser(u2);
36 | List ids = Arrays.asList(id1, id2);
37 |
38 | System.out.println(dao.getNameById(id1));
39 | System.out.println(dao.getIdsLimit(2));
40 | System.out.println(dao.getMappingUserById(id1));
41 | System.out.println(dao.getMappingUsersById(ids));
42 | System.out.println(dao.getMappingUser2ById(id1));
43 | System.out.println(dao.getMappingUsers2ById(ids));
44 | System.out.println(dao.getMappingUserByIdMapper(id1));
45 | System.out.println(dao.getMappingUsersByIdMapper(ids));
46 | }
47 |
48 | }
49 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/mapping/MappingDao.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.mapping;
2 |
3 | import org.jfaster.mango.annotation.*;
4 |
5 | import java.util.List;
6 |
7 | /**
8 | * @author ash
9 | */
10 | @DB
11 | public interface MappingDao {
12 |
13 | @ReturnGeneratedId
14 | @SQL("insert into mapping_user(name, user_age, update_time) values(:name, :userAge, :updateTime)")
15 | public int addMappingUser(MappingUser u);
16 |
17 | @SQL("select name from mapping_user where id = :1")
18 | public String getNameById(int id);
19 |
20 | @SQL("select id from mapping_user limit :1")
21 | public List getIdsLimit(int limit);
22 |
23 | @SQL("select id, name, user_age, update_time from mapping_user where id = :1")
24 | public MappingUser getMappingUserById(int id);
25 |
26 | @SQL("select id, name, user_age, update_time from mapping_user where id in (:1)")
27 | public List getMappingUsersById(List ids);
28 |
29 | @Results({
30 | @Result(column = "id", property = "userId"),
31 | @Result(column = "name", property = "userName")
32 | })
33 | @SQL("select id, name, user_age, update_time from mapping_user where id = :1")
34 | public MappingUser2 getMappingUser2ById(int id);
35 |
36 | @Results({
37 | @Result(column = "id", property = "userId"),
38 | @Result(column = "name", property = "userName")
39 | })
40 | @SQL("select id, name, user_age, update_time from mapping_user where id in (:1)")
41 | public List getMappingUsers2ById(List ids);
42 |
43 | @Mapper(UserMapper.class)
44 | @SQL("select id, name, user_age, update_time from mapping_user where id = :1")
45 | public MappingUser getMappingUserByIdMapper(int id);
46 |
47 | @Mapper(UserMapper.class)
48 | @SQL("select id, name, user_age, update_time from mapping_user where id in (:1)")
49 | public List getMappingUsersByIdMapper(List ids);
50 |
51 | }
52 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/transfer/README.md:
--------------------------------------------------------------------------------
1 | 函数式调用
2 | =========
3 |
4 | 函数式调用相关文档请查看 http://mango.jfaster.org/functional.html
5 |
6 | 列表与字符串互转
7 | --------------
8 |
9 | 使用 [TeacherMain](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/functional/TeacherMain.java) 运行 [TeacherDao](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/functional/TeacherDao.java)
10 |
11 | 需要在数据库 **jdbc:mysql://localhost:3306/mango_example** 中创建下面的表
12 |
13 | ```
14 | DROP TABLE IF EXISTS `teacher`;
15 | CREATE TABLE `teacher` (
16 | `id` int(11) NOT NULL AUTO_INCREMENT,
17 | `name` varchar(200) NOT NULL,
18 | `student_ids` varchar(1000) NOT NULL,
19 | PRIMARY KEY (`id`)
20 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
21 | ```
22 |
23 | 枚举与数字互转
24 | ------------
25 |
26 | 使用 [PersonMain](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/functional/PersonMain.java) 运行 [PersonDao](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/functional/PersonDao.java)
27 |
28 | 需要在数据库 **jdbc:mysql://localhost:3306/mango_example** 中创建下面的表
29 |
30 | ```
31 | DROP TABLE IF EXISTS `person`;
32 | CREATE TABLE `person` (
33 | `id` int(11) NOT NULL AUTO_INCREMENT,
34 | `name` varchar(200) NOT NULL,
35 | `gender` int(11) NOT NULL,
36 | PRIMARY KEY (`id`)
37 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
38 | ```
39 |
40 | 复杂类与字符串互转
41 | ---------------
42 |
43 | 使用 [CardMain](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/functional/CardMain.java) 运行 [CardDao](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/functional/CardDao.java)
44 |
45 | 需要在数据库 **jdbc:mysql://localhost:3306/mango_example** 中创建下面的表
46 |
47 | ```
48 | DROP TABLE IF EXISTS `card`;
49 | CREATE TABLE `card` (
50 | `id` int(11) NOT NULL AUTO_INCREMENT,
51 | `name` varchar(200) NOT NULL,
52 | `sub_card` varchar(1000) NOT NULL,
53 | PRIMARY KEY (`id`)
54 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
55 | ```
56 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/basic/UserMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.basic;
2 |
3 | import com.google.common.collect.Lists;
4 | import org.jfaster.mango.datasource.DriverManagerDataSource;
5 | import org.jfaster.mango.operator.Mango;
6 |
7 | import javax.sql.DataSource;
8 | import java.util.Arrays;
9 | import java.util.Date;
10 |
11 | /**
12 | * @author ash
13 | */
14 | public class UserMain {
15 |
16 | public static void main(String[] args) {
17 | String driverClassName = "com.mysql.jdbc.Driver";
18 | String url = "jdbc:mysql://localhost:3306/mango_example";
19 | String username = "root"; // 这里请使用您自己的用户名
20 | String password = "root"; // 这里请使用您自己的密码
21 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
22 | Mango mango = Mango.newInstance(ds); // 使用数据源初始化mango
23 |
24 | UserDao dao = mango.create(UserDao.class);
25 | String name = "ash";
26 | int age = 28;
27 | boolean gender = true;
28 | long money = 100;
29 | Date updateTime = new Date();
30 |
31 | dao.insertUser(name, age, gender, money, updateTime);
32 |
33 | User user = new User();
34 | user.setName(name);
35 | user.setAge(age);
36 | user.setGender(gender);
37 | user.setMoney(money);
38 | user.setUpdateTime(updateTime);
39 |
40 | int id = dao.insertUser(user);
41 | System.out.println(id);
42 |
43 | dao.deleteUser(id);
44 |
45 | int id2 = dao.insertUser(user);
46 | int id3 = dao.insertUser(user);
47 |
48 | user.setId(id2);
49 | user.setName("lucy");
50 | dao.updateUser(user);
51 | System.out.println(dao.getName(id2));
52 | System.out.println(dao.getUser(id2));
53 | System.out.println(dao.getUsersByAge(age));
54 | System.out.println(dao.getUsersInList(Lists.newArrayList(id2, id3)));
55 |
56 | int[] r = dao.batchInsertUserList(Lists.newArrayList(user, user, user));
57 | System.out.println(Arrays.toString(r));
58 | }
59 |
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/page/MySQLPageMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.page;
2 |
3 | import org.jfaster.mango.annotation.DB;
4 | import org.jfaster.mango.annotation.ReturnGeneratedId;
5 | import org.jfaster.mango.annotation.SQL;
6 | import org.jfaster.mango.datasource.DriverManagerDataSource;
7 | import org.jfaster.mango.operator.Mango;
8 | import org.jfaster.mango.page.*;
9 |
10 | import javax.sql.DataSource;
11 | import java.util.List;
12 |
13 | public class MySQLPageMain {
14 |
15 | public static void main(String[] args) {
16 | String driverClassName = "com.mysql.jdbc.Driver";
17 | String url = "jdbc:mysql://localhost:3306/mango_example";
18 | String username = "root"; // 这里请使用您自己的用户名
19 | String password = "root"; // 这里请使用您自己的密码
20 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
21 | Mango mango = Mango.newInstance(ds); // 使用数据源初始化mango
22 |
23 | MessageDao dao = mango.create(MessageDao.class);
24 | dao.deleteAll();
25 | int uid = 100;
26 | for (int i = 0; i < 10; i++) {
27 | Message msg = new Message();
28 | msg.setUid(uid);
29 | msg.setContent(i + 1);
30 | dao.insert(msg);
31 | }
32 |
33 | int pageNum = 2;
34 | int pageSize = 3;
35 |
36 | // 等价于 order by id desc
37 | Sort sort = Sort.by(Direction.DESC, "id");
38 | List msgs = dao.getMessages(uid, sort);
39 | System.out.println("msgs: " + msgs);
40 |
41 | // 等价于 limit pgeNum * pageSize, pageSize
42 | Page page = Page.of(pageNum, pageSize);
43 | msgs = dao.getMessages(uid, page);
44 | System.out.println("msgs: " + msgs);
45 |
46 | // 等价于 order by id desc limit pgeNum * pageSize, pageSize
47 | page = Page.of(pageNum, pageSize, Sort.by(Direction.DESC, "id"));
48 | msgs = dao.getMessages(uid, page);
49 | System.out.println("msgs: " + msgs);
50 | }
51 |
52 | @DB
53 | interface MessageDao {
54 |
55 | @ReturnGeneratedId
56 | @SQL("insert into message(uid, content) values(:uid, :content)")
57 | int insert(Message msg);
58 |
59 | @SQL("select id, uid, content from message where uid=:1")
60 | List getMessages(int uid, Sort sort);
61 |
62 | @SQL("select id, uid, content from message where uid=:1")
63 | List getMessages(int uid, Page page);
64 |
65 | @SQL("delete from message")
66 | void deleteAll();
67 |
68 | }
69 |
70 | }
71 |
--------------------------------------------------------------------------------
/src/main/resources/org/jfaster/mango/example/spring/applicationContext-masterslave.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | org.jfaster.mango.example.spring
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/datasource/MultipleDatabaseMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.datasource;
2 |
3 | import org.jfaster.mango.datasource.DataSourceFactory;
4 | import org.jfaster.mango.datasource.DriverManagerDataSource;
5 | import org.jfaster.mango.datasource.MasterSlaveDataSourceFactory;
6 | import org.jfaster.mango.datasource.SimpleDataSourceFactory;
7 | import org.jfaster.mango.operator.Mango;
8 |
9 | import javax.sql.DataSource;
10 | import java.util.Arrays;
11 | import java.util.List;
12 |
13 | /**
14 | * @author ash
15 | */
16 | public class MultipleDatabaseMain {
17 |
18 | public static void main(String[] args) {
19 | String driverClassName = "com.mysql.jdbc.Driver";
20 | String username = "root"; // 这里请使用您自己的用户名
21 | String password = "root"; // 这里请使用您自己的密码
22 |
23 | // 主从数据源工厂,为了简单,从库参数与主库一致
24 | String url1 = "jdbc:mysql://localhost:3306/mango_example_db1";
25 | String name1 = "dsf1";
26 | DataSource master = new DriverManagerDataSource(driverClassName, url1, username, password);
27 | DataSource slave1 = new DriverManagerDataSource(driverClassName, url1, username, password);
28 | DataSource slave2 = new DriverManagerDataSource(driverClassName, url1, username, password);
29 | List slaves = Arrays.asList(slave1, slave2);
30 | DataSourceFactory dsf1 = new MasterSlaveDataSourceFactory(name1, master, slaves);
31 |
32 | // 简单数据源工厂
33 | String name2 = "dsf2";
34 | String url2 = "jdbc:mysql://localhost:3306/mango_example_db2";
35 | DataSource datasource = new DriverManagerDataSource(driverClassName, url2, username, password);
36 | DataSourceFactory dsf2 = new SimpleDataSourceFactory(name2, datasource);
37 |
38 | Mango mango = Mango.newInstance(Arrays.asList(dsf1, dsf2));
39 |
40 | BlogDao blogDao = mango.create(BlogDao.class);
41 | Blog blog = new Blog();
42 | blog.setUid(9527);
43 | blog.setTitle("blog_title");
44 | blog.setContent("blog_content");
45 |
46 | int blogId = blogDao.addBlog(blog);
47 | System.out.println(blogDao.getBlog(blogId));
48 |
49 | CommentDao commentDao = mango.create(CommentDao.class);
50 | Comment comment = new Comment();
51 | comment.setUid(9527);
52 | comment.setTitle("comment_title");
53 | comment.setContent("comment_content");
54 |
55 | int commentId = commentDao.addComment(comment);
56 | System.out.println(commentDao.getComment(commentId));
57 | }
58 |
59 | }
60 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/sharding/TableShardingOrderDaoMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.sharding;
2 |
3 | import com.google.common.collect.Lists;
4 | import org.jfaster.mango.annotation.DB;
5 | import org.jfaster.mango.annotation.SQL;
6 | import org.jfaster.mango.annotation.Sharding;
7 | import org.jfaster.mango.annotation.TableShardingBy;
8 | import org.jfaster.mango.datasource.DriverManagerDataSource;
9 | import org.jfaster.mango.example.util.RandomUtils;
10 | import org.jfaster.mango.operator.Mango;
11 | import org.jfaster.mango.sharding.TableShardingStrategy;
12 |
13 | import javax.sql.DataSource;
14 | import java.util.List;
15 |
16 | /**
17 | * @author ash
18 | */
19 | public class TableShardingOrderDaoMain {
20 |
21 | public static void main(String[] args) {
22 | String driverClassName = "com.mysql.jdbc.Driver";
23 | String url = "jdbc:mysql://localhost:3306/mango_example";
24 | String username = "root"; // 这里请使用您自己的用户名
25 | String password = "root"; // 这里请使用您自己的密码
26 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
27 | Mango mango = Mango.newInstance(ds);
28 | TableShardingOrderDao orderDao = mango.create(TableShardingOrderDao.class);
29 |
30 | List uids = Lists.newArrayList(1, 2, 10010, 10086);
31 | for (Integer uid : uids) {
32 | String id = RandomUtils.randomStringId(10); // 随机生成10位字符串ID
33 | Order order = new Order();
34 | order.setId(id);
35 | order.setUid(uid);
36 | order.setPrice(100);
37 | order.setStatus(1);
38 | orderDao.addOrder(order);
39 | System.out.println(orderDao.getOrdersByUid(uid));
40 | }
41 | }
42 |
43 | @DB(table = "t_order")
44 | @Sharding(tableShardingStrategy = OrderTableShardingStrategy.class)
45 | public interface TableShardingOrderDao {
46 |
47 | @SQL("insert into #table(id, uid, price, status) values(:id, :uid, :price, :status)")
48 | public void addOrder(@TableShardingBy("uid") Order order);
49 |
50 | @SQL("select id, uid, price, status from #table where uid = :1")
51 | public List getOrdersByUid(@TableShardingBy int uid);
52 |
53 | }
54 |
55 | static class OrderTableShardingStrategy implements TableShardingStrategy {
56 |
57 | @Override
58 | public String getTargetTable(String table, Integer uid) {
59 | int num = uid <= 1000 ? 0 : 1;
60 | return table + "_" + num;
61 | }
62 |
63 | }
64 |
65 | }
66 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/datasource/README.md:
--------------------------------------------------------------------------------
1 | 数据源工厂
2 | =========
3 |
4 | 数据源工厂相关文档请查看 http://mango.jfaster.org/datasource.html
5 |
6 | 单一数据库
7 | ---------
8 |
9 | 使用 [ArticleMain](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/datasource/ArticleMain.java) 运行 [ArticleDao](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/datasource/ArticleDao.java)
10 |
11 | 需要在数据库 **jdbc:mysql://localhost:3306/mango_example** 中创建下面的表
12 |
13 | ```
14 | DROP TABLE IF EXISTS `article`;
15 | CREATE TABLE `article` (
16 | `id` int(11) NOT NULL AUTO_INCREMENT,
17 | `uid` int(11) NOT NULL,
18 | `title` varchar(200) NOT NULL,
19 | `content` varchar(200) NOT NULL,
20 | PRIMARY KEY (`id`)
21 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
22 | ```
23 |
24 | 主从数据库
25 | ---------
26 |
27 | 使用 [MasterSlaveArticleMain](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/datasource/MasterSlaveArticleMain.java) 运行 [ArticleDao](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/datasource/ArticleDao.java)
28 |
29 | 需要在数据库 **jdbc:mysql://localhost:3306/mango_example** 中创建下面的表
30 |
31 | ```
32 | DROP TABLE IF EXISTS `article`;
33 | CREATE TABLE `article` (
34 | `id` int(11) NOT NULL AUTO_INCREMENT,
35 | `uid` int(11) NOT NULL,
36 | `title` varchar(200) NOT NULL,
37 | `content` varchar(200) NOT NULL,
38 | PRIMARY KEY (`id`)
39 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
40 | ```
41 |
42 | 混合数据库集群
43 | ------------
44 |
45 | 使用 [MultipleDatabaseMain](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/datasource/MultipleDatabaseMain.java) 运行 [BlogDao](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/datasource/BlogDao.java) 与 [CommentDao](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/datasource/CommentDao.java)
46 |
47 | 需要在数据库 **jdbc:mysql://localhost:3306/mango_example_db1** 中创建下面的表
48 |
49 | ```
50 | DROP TABLE IF EXISTS `blog`;
51 | CREATE TABLE `blog` (
52 | `id` int(11) NOT NULL AUTO_INCREMENT,
53 | `uid` int(11) NOT NULL,
54 | `title` varchar(200) NOT NULL,
55 | `content` varchar(200) NOT NULL,
56 | PRIMARY KEY (`id`)
57 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
58 | ```
59 |
60 | 同时还需要在数据库 **jdbc:mysql://localhost:3306/mango_example_db2** 中创建下面的表
61 |
62 | ```
63 | DROP TABLE IF EXISTS `comment`;
64 | CREATE TABLE `comment` (
65 | `id` int(11) NOT NULL AUTO_INCREMENT,
66 | `uid` int(11) NOT NULL,
67 | `title` varchar(200) NOT NULL,
68 | `content` varchar(200) NOT NULL,
69 | PRIMARY KEY (`id`)
70 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
71 | ```
72 |
73 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/sharding/DatabaseShardingOrderDaoMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.sharding;
2 |
3 | import com.google.common.collect.Lists;
4 | import org.jfaster.mango.annotation.DB;
5 | import org.jfaster.mango.annotation.DatabaseShardingBy;
6 | import org.jfaster.mango.annotation.SQL;
7 | import org.jfaster.mango.annotation.Sharding;
8 | import org.jfaster.mango.datasource.DataSourceFactory;
9 | import org.jfaster.mango.datasource.DriverManagerDataSource;
10 | import org.jfaster.mango.datasource.SimpleDataSourceFactory;
11 | import org.jfaster.mango.example.util.RandomUtils;
12 | import org.jfaster.mango.operator.Mango;
13 | import org.jfaster.mango.sharding.DatabaseShardingStrategy;
14 |
15 | import javax.sql.DataSource;
16 | import java.util.ArrayList;
17 | import java.util.List;
18 |
19 | /**
20 | * @author ash
21 | */
22 | public class DatabaseShardingOrderDaoMain {
23 |
24 | public static void main(String[] args) {
25 | String driverClassName = "com.mysql.jdbc.Driver";
26 | String username = "root"; // 这里请使用您自己的用户名
27 | String password = "root"; // 这里请使用您自己的密码
28 |
29 | int dbNum = 3;
30 | List dsfs = new ArrayList();
31 | for (int i = 0; i < dbNum; i++) {
32 | String name = "dsf" + i;
33 | String url = "jdbc:mysql://localhost:3306/db" + i;
34 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
35 | DataSourceFactory dsf = new SimpleDataSourceFactory(name, ds);
36 | dsfs.add(dsf);
37 | }
38 | Mango mango = Mango.newInstance(dsfs);
39 | DatabaseShardingOrderDao orderDao = mango.create(DatabaseShardingOrderDao.class);
40 |
41 | List uids = Lists.newArrayList(1, 2, 3, 4, 5);
42 | for (Integer uid : uids) {
43 | String id = RandomUtils.randomStringId(10); // 随机生成10位字符串ID
44 | Order order = new Order();
45 | order.setId(id);
46 | order.setUid(uid);
47 | order.setPrice(100);
48 | order.setStatus(1);
49 |
50 | orderDao.addOrder(order);
51 | System.out.println(orderDao.getOrdersByUid(uid));
52 | }
53 | }
54 |
55 | @DB()
56 | @Sharding(databaseShardingStrategy = OrderDatabaseShardingStrategy.class)
57 | public interface DatabaseShardingOrderDao {
58 |
59 | @SQL("insert into t_order(id, uid, price, status) values(:id, :uid, :price, :status)")
60 | public void addOrder(@DatabaseShardingBy("uid") Order order);
61 |
62 | @SQL("select id, uid, price, status from t_order where uid = :1")
63 | public List getOrdersByUid(@DatabaseShardingBy int uid);
64 |
65 | }
66 |
67 | static class OrderDatabaseShardingStrategy implements DatabaseShardingStrategy {
68 |
69 | @Override
70 | public String getDataSourceFactoryName(Integer uid) {
71 | return "dsf" + uid % 3;
72 | }
73 |
74 | }
75 |
76 | }
77 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/sharding/SmartShardingOrderDaoMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.sharding;
2 |
3 | import com.google.common.collect.Lists;
4 | import org.jfaster.mango.annotation.*;
5 | import org.jfaster.mango.datasource.DataSourceFactory;
6 | import org.jfaster.mango.datasource.DriverManagerDataSource;
7 | import org.jfaster.mango.datasource.SimpleDataSourceFactory;
8 | import org.jfaster.mango.example.util.RandomUtils;
9 | import org.jfaster.mango.operator.Mango;
10 | import org.jfaster.mango.sharding.ShardingStrategy;
11 |
12 | import javax.sql.DataSource;
13 | import java.util.ArrayList;
14 | import java.util.List;
15 |
16 | /**
17 | * @author ash
18 | */
19 | public class SmartShardingOrderDaoMain {
20 |
21 | public static void main(String[] args) {
22 | String driverClassName = "com.mysql.jdbc.Driver";
23 | String username = "root"; // 这里请使用您自己的用户名
24 | String password = "root"; // 这里请使用您自己的密码
25 |
26 | int dbNum = 3;
27 | List dsfs = new ArrayList();
28 | for (int i = 0; i < dbNum; i++) {
29 | String name = "dsf" + i;
30 | String url = "jdbc:mysql://localhost:3306/db" + i;
31 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
32 | DataSourceFactory dsf = new SimpleDataSourceFactory(name, ds);
33 | dsfs.add(dsf);
34 | }
35 | Mango mango = Mango.newInstance(dsfs);
36 | SmartShardingOrderDao orderDao = mango.create(SmartShardingOrderDao.class);
37 |
38 | List uids = Lists.newArrayList(1, 2, 3, 30001, 30002, 30003);
39 | for (Integer uid : uids) {
40 | String id = RandomUtils.randomStringId(10); // 随机生成10位字符串ID
41 | Order order = new Order();
42 | order.setId(id);
43 | order.setUid(uid);
44 | order.setPrice(100);
45 | order.setStatus(1);
46 |
47 | orderDao.addOrder(order);
48 | System.out.println(orderDao.getOrdersByUid(uid));
49 | }
50 | }
51 |
52 | @DB(table = "t_order")
53 | @Sharding(shardingStrategy = OrderShardingStrategy.class)
54 | public interface SmartShardingOrderDao {
55 |
56 | @SQL("insert into #table(id, uid, price, status) values(:id, :uid, :price, :status)")
57 | public void addOrder(@ShardingBy("uid") Order order);
58 |
59 | @SQL("select id, uid, price, status from #table where uid = :1")
60 | public List getOrdersByUid(@ShardingBy int uid);
61 |
62 | }
63 |
64 | static class OrderShardingStrategy implements ShardingStrategy {
65 |
66 | @Override
67 | public String getDataSourceFactoryName(Integer uid) {
68 | return "dsf" + uid % 3;
69 | }
70 |
71 | @Override
72 | public String getTargetTable(String table, Integer uid) {
73 | int num = uid <= 1000 ? 0 : 1;
74 | return table + "_" + num;
75 | }
76 |
77 | }
78 |
79 | }
80 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | mango-example
8 | mango-example
9 | 1.0-SNAPSHOT
10 |
11 |
12 |
13 | org.jfaster
14 | mango
15 | 2.0.1
16 |
17 |
18 | mysql
19 | mysql-connector-java
20 | 5.1.29
21 |
22 |
23 | com.google.code.gson
24 | gson
25 | 2.3.1
26 |
27 |
28 | com.google.guava
29 | guava
30 | 19.0
31 |
32 |
33 | org.apache.commons
34 | commons-lang3
35 | 3.4
36 |
37 |
38 | com.alibaba
39 | fastjson
40 | 1.1.46
41 |
42 |
43 | org.springframework
44 | spring-context
45 | 4.0.5.RELEASE
46 |
47 |
48 | org.slf4j
49 | slf4j-api
50 | 1.7.5
51 |
52 |
53 | ch.qos.logback
54 | logback-classic
55 | 1.0.13
56 |
57 |
58 | ch.qos.logback
59 | logback-core
60 | 1.0.13
61 |
62 |
63 | log4j
64 | log4j
65 | 1.2.17
66 |
67 |
68 |
69 | org.apache.logging.log4j
70 | log4j-api
71 | 2.3
72 |
73 |
74 | org.apache.logging.log4j
75 | log4j-core
76 | 2.3
77 |
78 |
79 |
--------------------------------------------------------------------------------
/src/main/resources/org/jfaster/mango/example/spring/applicationContext-multiple.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | org.jfaster.mango.example.spring
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/sharding/ShardingOrderDaoMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.sharding;
2 |
3 | import com.google.common.collect.Lists;
4 | import org.jfaster.mango.annotation.*;
5 | import org.jfaster.mango.datasource.DataSourceFactory;
6 | import org.jfaster.mango.datasource.DriverManagerDataSource;
7 | import org.jfaster.mango.datasource.SimpleDataSourceFactory;
8 | import org.jfaster.mango.example.util.RandomUtils;
9 | import org.jfaster.mango.operator.Mango;
10 | import org.jfaster.mango.sharding.DatabaseShardingStrategy;
11 | import org.jfaster.mango.sharding.TableShardingStrategy;
12 |
13 | import javax.sql.DataSource;
14 | import java.util.ArrayList;
15 | import java.util.List;
16 |
17 | /**
18 | * @author ash
19 | */
20 | public class ShardingOrderDaoMain {
21 |
22 | public static void main(String[] args) {
23 | String driverClassName = "com.mysql.jdbc.Driver";
24 | String username = "root"; // 这里请使用您自己的用户名
25 | String password = "root"; // 这里请使用您自己的密码
26 |
27 | int dbNum = 3;
28 | List dsfs = new ArrayList();
29 | for (int i = 0; i < dbNum; i++) {
30 | String name = "dsf" + i;
31 | String url = "jdbc:mysql://localhost:3306/db" + i;
32 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
33 | DataSourceFactory dsf = new SimpleDataSourceFactory(name, ds);
34 | dsfs.add(dsf);
35 | }
36 | Mango mango = Mango.newInstance(dsfs);
37 | ShardingOrderDao orderDao = mango.create(ShardingOrderDao.class);
38 |
39 | List uids = Lists.newArrayList(1, 2, 3, 30001, 30002, 30003);
40 | for (Integer uid : uids) {
41 | String id = RandomUtils.randomStringId(10); // 随机生成10位字符串ID
42 | Order order = new Order();
43 | order.setId(id);
44 | order.setUid(uid);
45 | order.setPrice(100);
46 | order.setStatus(1);
47 |
48 | orderDao.addOrder(order);
49 | System.out.println(orderDao.getOrdersByUid(uid));
50 | }
51 | }
52 |
53 | @DB(table = "t_order")
54 | @Sharding(
55 | databaseShardingStrategy = OrderDatabaseShardingStrategy.class,
56 | tableShardingStrategy = OrderTableShardingStrategy.class
57 | )
58 | public interface ShardingOrderDao {
59 |
60 | @SQL("insert into #table(id, uid, price, status) values(:id, :uid, :price, :status)")
61 | public void addOrder(@DatabaseShardingBy("uid") @TableShardingBy("uid") Order order);
62 |
63 | @SQL("select id, uid, price, status from #table where uid = :1")
64 | public List getOrdersByUid(@DatabaseShardingBy @TableShardingBy int uid);
65 |
66 | }
67 |
68 | static class OrderDatabaseShardingStrategy implements DatabaseShardingStrategy {
69 |
70 | @Override
71 | public String getDataSourceFactoryName(Integer uid) {
72 | return "dsf" + uid % 3;
73 | }
74 |
75 | }
76 |
77 | static class OrderTableShardingStrategy implements TableShardingStrategy {
78 |
79 | @Override
80 | public String getTargetTable(String table, Integer uid) {
81 | int num = uid <= 1000 ? 0 : 1;
82 | return table + "_" + num;
83 | }
84 |
85 | }
86 |
87 | }
88 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/sharding/MultiDimenShardingOrderDaoMain.java:
--------------------------------------------------------------------------------
1 | package org.jfaster.mango.example.sharding;
2 |
3 | import com.google.common.collect.Lists;
4 | import org.jfaster.mango.annotation.DB;
5 | import org.jfaster.mango.annotation.SQL;
6 | import org.jfaster.mango.annotation.Sharding;
7 | import org.jfaster.mango.annotation.ShardingBy;
8 | import org.jfaster.mango.datasource.DataSourceFactory;
9 | import org.jfaster.mango.datasource.DriverManagerDataSource;
10 | import org.jfaster.mango.datasource.SimpleDataSourceFactory;
11 | import org.jfaster.mango.example.util.RandomUtils;
12 | import org.jfaster.mango.operator.Mango;
13 | import org.jfaster.mango.sharding.ShardingStrategy;
14 |
15 | import javax.sql.DataSource;
16 | import java.util.ArrayList;
17 | import java.util.List;
18 |
19 | /**
20 | * @author ash
21 | */
22 | public class MultiDimenShardingOrderDaoMain {
23 |
24 | public static void main(String[] args) {
25 | String driverClassName = "com.mysql.jdbc.Driver";
26 | String username = "root"; // 这里请使用您自己的用户名
27 | String password = "root"; // 这里请使用您自己的密码
28 |
29 | int dbNum = 3;
30 | List dsfs = new ArrayList();
31 | for (int i = 0; i < dbNum; i++) {
32 | String name = "dsf" + i;
33 | String url = "jdbc:mysql://localhost:3306/db" + i;
34 | DataSource ds = new DriverManagerDataSource(driverClassName, url, username, password);
35 | DataSourceFactory dsf = new SimpleDataSourceFactory(name, ds);
36 | dsfs.add(dsf);
37 | }
38 | Mango mango = Mango.newInstance(dsfs);
39 | MultiDimenShardingOrderDao orderDao = mango.create(MultiDimenShardingOrderDao.class);
40 |
41 | List uids = Lists.newArrayList(1, 2, 3, 30001, 30002, 30003);
42 | for (Integer uid : uids) {
43 | String randomId = RandomUtils.randomStringId(10); // 随机生成10位字符串ID
44 | String holderMark = "1"; // 订单ID首位永远为1,避免为0
45 | String databaseMark = uid % 3 + "";
46 | String tableMark = uid <= 1000 ? "0" : "1";
47 | String id = holderMark + databaseMark + tableMark + randomId; // ID前添加分库分表标记
48 | Order order = new Order();
49 | order.setId(id);
50 | order.setUid(uid);
51 | order.setPrice(100);
52 | order.setStatus(1);
53 |
54 | orderDao.addOrder(order);
55 | System.out.println(orderDao.getOrdersByUid(uid));
56 | System.out.println(orderDao.getOrderById(id));
57 | }
58 | }
59 |
60 | @DB(table = "t_order")
61 | public interface MultiDimenShardingOrderDao {
62 |
63 | @SQL("insert into #table(id, uid, price, status) values(:id, :uid, :price, :status)")
64 | @Sharding(shardingStrategy = OrderUidShardingStrategy.class)
65 | public void addOrder(@ShardingBy("uid") Order order);
66 |
67 | @SQL("select id, uid, price, status from #table where uid = :1")
68 | @Sharding(shardingStrategy = OrderUidShardingStrategy.class)
69 | public List getOrdersByUid(@ShardingBy int uid);
70 |
71 | @SQL("select id, uid, price, status from #table where id = :1")
72 | @Sharding(shardingStrategy = OrderIdShardingStrategy.class)
73 | public Order getOrderById(@ShardingBy String id);
74 |
75 | }
76 |
77 | static class OrderUidShardingStrategy implements ShardingStrategy {
78 |
79 | @Override
80 | public String getDataSourceFactoryName(Integer uid) {
81 | return "dsf" + uid % 3;
82 | }
83 |
84 | @Override
85 | public String getTargetTable(String table, Integer uid) {
86 | int num = uid <= 1000 ? 0 : 1;
87 | return table + "_" + num;
88 | }
89 |
90 | }
91 |
92 | static class OrderIdShardingStrategy implements ShardingStrategy {
93 |
94 | @Override
95 | public String getDataSourceFactoryName(String orderId) {
96 | return "dsf" + orderId.substring(1, 2);
97 | }
98 |
99 | @Override
100 | public String getTargetTable(String table, String orderId) {
101 | return table + "_" + orderId.substring(2, 3);
102 | }
103 |
104 | }
105 |
106 | }
107 |
--------------------------------------------------------------------------------
/src/main/java/org/jfaster/mango/example/sharding/README.md:
--------------------------------------------------------------------------------
1 | 表分片与数据库分片(分表与分库)
2 | =========================
3 |
4 | 分片相关文档请查看 http://mango.jfaster.org/sharding.html
5 |
6 | 表分片
7 | -----
8 |
9 | 入口类 [TableShardingOrderDaoMain](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/sharding/TableShardingOrderDaoMain.java)
10 |
11 | 需要在下面的数据库中
12 |
13 | - **jdbc:mysql://localhost:3306/mango_example**
14 |
15 | 创建下面的表
16 |
17 | ```
18 | DROP TABLE IF EXISTS `t_order_0`;
19 | CREATE TABLE `t_order_0` (
20 | `id` varchar(200) NOT NULL,
21 | `uid` int(11) NOT NULL,
22 | `price` int(11) NOT NULL,
23 | `status` int(11) NOT NULL,
24 | PRIMARY KEY (`id`)
25 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
26 | ```
27 |
28 | ```
29 | DROP TABLE IF EXISTS `t_order_1`;
30 | CREATE TABLE `t_order_1` (
31 | `id` varchar(200) NOT NULL,
32 | `uid` int(11) NOT NULL,
33 | `price` int(11) NOT NULL,
34 | `status` int(11) NOT NULL,
35 | PRIMARY KEY (`id`)
36 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
37 | ```
38 |
39 | 数据库分片
40 | --------
41 |
42 | 入口类 [DatabaseShardingOrderDaoMain](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/sharding/DatabaseShardingOrderDaoMain.java)
43 |
44 | 需要在下面的3个数据库中
45 |
46 | - **jdbc:mysql://localhost:3306/db0**
47 | - **jdbc:mysql://localhost:3306/db1**
48 | - **jdbc:mysql://localhost:3306/db2**
49 |
50 | 同时创建下面的表
51 |
52 | ```
53 | DROP TABLE IF EXISTS `t_order`;
54 | CREATE TABLE `t_order` (
55 | `id` varchar(200) NOT NULL,
56 | `uid` int(11) NOT NULL,
57 | `price` int(11) NOT NULL,
58 | `status` int(11) NOT NULL,
59 | PRIMARY KEY (`id`)
60 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
61 | ```
62 |
63 | 同时使用数据库分片与表分片
64 | ---------------------
65 |
66 | 入口类 [ShardingOrderDaoMain](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/sharding/ShardingOrderDaoMain.java)
67 |
68 | 需要在下面的3个数据库中
69 |
70 | - **jdbc:mysql://localhost:3306/db0**
71 | - **jdbc:mysql://localhost:3306/db1**
72 | - **jdbc:mysql://localhost:3306/db2**
73 |
74 | 同时创建下面的表
75 |
76 | ```
77 | DROP TABLE IF EXISTS `t_order_0`;
78 | CREATE TABLE `t_order_0` (
79 | `id` varchar(200) NOT NULL,
80 | `uid` int(11) NOT NULL,
81 | `price` int(11) NOT NULL,
82 | `status` int(11) NOT NULL,
83 | PRIMARY KEY (`id`)
84 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
85 | ```
86 |
87 | ```
88 | DROP TABLE IF EXISTS `t_order_1`;
89 | CREATE TABLE `t_order_1` (
90 | `id` varchar(200) NOT NULL,
91 | `uid` int(11) NOT NULL,
92 | `price` int(11) NOT NULL,
93 | `status` int(11) NOT NULL,
94 | PRIMARY KEY (`id`)
95 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
96 | ```
97 |
98 | 精简分片代码
99 | ----------
100 |
101 | 入口类 [SmartShardingOrderDaoMain](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/sharding/SmartShardingOrderDaoMain.java)
102 |
103 | 需要在下面的3个数据库中
104 |
105 | - **jdbc:mysql://localhost:3306/db0**
106 | - **jdbc:mysql://localhost:3306/db1**
107 | - **jdbc:mysql://localhost:3306/db2**
108 |
109 | 同时创建下面的表
110 |
111 | ```
112 | DROP TABLE IF EXISTS `t_order_0`;
113 | CREATE TABLE `t_order_0` (
114 | `id` varchar(200) NOT NULL,
115 | `uid` int(11) NOT NULL,
116 | `price` int(11) NOT NULL,
117 | `status` int(11) NOT NULL,
118 | PRIMARY KEY (`id`)
119 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
120 | ```
121 |
122 | ```
123 | DROP TABLE IF EXISTS `t_order_1`;
124 | CREATE TABLE `t_order_1` (
125 | `id` varchar(200) NOT NULL,
126 | `uid` int(11) NOT NULL,
127 | `price` int(11) NOT NULL,
128 | `status` int(11) NOT NULL,
129 | PRIMARY KEY (`id`)
130 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
131 | ```
132 |
133 | 多维度分片策略
134 | ------------
135 |
136 | 入口类 [MultiDimenShardingOrderDaoMain](https://github.com/jfaster/mango-example/blob/master/src/main/java/org/jfaster/mango/example/sharding/MultiDimenShardingOrderDaoMain.java)
137 |
138 | 需要在下面的3个数据库中
139 |
140 | - **jdbc:mysql://localhost:3306/db0**
141 | - **jdbc:mysql://localhost:3306/db1**
142 | - **jdbc:mysql://localhost:3306/db2**
143 |
144 | 同时创建下面的表
145 |
146 | ```
147 | DROP TABLE IF EXISTS `t_order_0`;
148 | CREATE TABLE `t_order_0` (
149 | `id` varchar(200) NOT NULL,
150 | `uid` int(11) NOT NULL,
151 | `price` int(11) NOT NULL,
152 | `status` int(11) NOT NULL,
153 | PRIMARY KEY (`id`)
154 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
155 | ```
156 |
157 | ```
158 | DROP TABLE IF EXISTS `t_order_1`;
159 | CREATE TABLE `t_order_1` (
160 | `id` varchar(200) NOT NULL,
161 | `uid` int(11) NOT NULL,
162 | `price` int(11) NOT NULL,
163 | `status` int(11) NOT NULL,
164 | PRIMARY KEY (`id`)
165 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
166 | ```
167 |
--------------------------------------------------------------------------------