├── .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 | [![Build Status](https://travis-ci.org/jfaster/mango-example.svg?branch=master)](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 | --------------------------------------------------------------------------------