基础知识
mango是一个极速分布式ORM框架。
ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。
mango的特性:
- 具有超高的性能,它的响应速度接近直接使用JDBC
- 采用接口与注解的形式定义DAO层,完美结合DB与cache操作
- 支持动态SQL,可以构造任意复杂的sql语句
- 支持多数据源,分库、分表、事务
- 提供拦截器功能,利用拦截器可以为mango框架扩展各种自定义的插件
- 具有“”函数调用功能,能将任意复杂的对象,映射到数据库表中
- 高效详细的实时统计系统,方便开发者随时了解自己的系统
- 独立jar包,不依赖其它jar包
- 提供便捷的spring插件,与spring无缝集成
mango的使用流程
1.添加依赖
<!--引入mango的依赖-->
<dependency>
<groupId>org.jfaster</groupId>
<artifactId>mango</artifactId>
<version>1.5.3</version>
</dependency>
2.构造数据源并初始化mango对象
//1.mango框架对java标准数据源 javax.sql.DataSource 进行了简单实现,所以这里构造数据源不需要引入第三方jar包。
import org.jfaster.mango.datasource.DriverManagerDataSource;
//定义数据源
String driverClassName = "com.mysql.cj.jdbc.Driver";//驱动程序类名,这里使用MySQL进行演示
String url = "jdbc:mysql://localhost:3306/studyMango";
String username = "root";
String passWord = "123456";
DataSource ds = new DriverManagerDataSource(driverClassName, url, username, passWord);
//使用数据源初始化mango
Mango mango = Mango.newInstance(ds);
3、框架的基本操作(crud)
更新操作支持四种类型的返回值:
- 1、void:不返回值
- 2、int:返回有多少行数据受到了影响
- 3、long:返回有多少行数据受到了影响
- 4、boolean:false表示没有数据受到影响,true表示有一到多行数据受到影响
批量更新的输入只能有一个参数,参数的类型必须是List或Set或Array。
批量更新的输出支持三种类型的返回值:
- 1、void:不返回值
- 2、int:返回累计有多少行数据受到了影响
- 3、int[]:返回每条更新语句影响到了多少行数据
4.参数绑定方式(接口中参数绑定到SQL的指定位置)
-
序号绑定:将接口参数的序号绑定到SQL指定的位置中。
@SQL("insert into #table(book_name, book_counts, detail) values (:1,:2,:3)")
void addBook(String name,Integer count, String detail);
-
重命名绑定:可以使用注解@Rename对参数进行重命名绑定
@SQL("insert into #table(book_name, book_counts, detail) values (:name,:count,:detail)")
void addBook(@Rename("name") String bookName, @Rename("count") Integer count, @Rename("detail") String detail);
-
列表参数绑定:在SQL中使用in操作的时候,我们会使用到列表参数绑定。
@SQL("select * from #table where book_id in (:1)")
List<Books> getByIds(List<Integer> ids);
需要注意的是, in (:1) 中的参数必须是List或Set或Array,同时返回参数也必须是List或Set或Array。
-
属性绑定:当接口参数传入的是自定义对象时,我们可以使用属性绑定
@SQL("insert into #table(book_name, book_counts, detail) values(:1.bookName, :1.bookCounts, :1.detail)")
void addBook(Books books);
需要注意的是,自定义实体类的属性必须具有get方法
-
属性自动配置
@SQL("insert into #table(book_name, book_counts, detail) values(:bookName, :bookCounts, :detail)")
void addBook(Books books);
代码演示(以查询所有为例)
1.构建表结构
DROP TABLE IF EXISTS `books`;
CREATE TABLE `books` (
`book_id` int(11) NOT NULL AUTO_INCREMENT,
`book_name` varchar(255) DEFAULT NULL,
`book_counts` int(11) DEFAULT NULL,
`detail` varchar(255) DEFAULT NULL,
PRIMARY KEY (`book_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
INSERT INTO `books` VALUES ('1', 'java基础', '500', '略');
INSERT INTO `books` VALUES ('2', 'springboot框架', '50', '无');
2.添加pom依赖
<dependencies>
<!--引入mango的依赖-->
<dependency>
<groupId>org.jfaster</groupId>
<artifactId>mango</artifactId>
<version>1.5.3</version>
</dependency>
<!--引入MySQL依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.20</version>
</dependency>
</dependencies>
3.构建实体类
/**
* @Auther: zzx
* @Date: 2022/9/19 10:11
* @Description:
*/
@Data
public class Books implements Serializable {
@ID
private Integer bookID;
private String bookName;
private Integer bookCounts;
private String detail;
}
4.构建dao接口
/**
* @Auther: zzx
* @Date: 2022/9/19 10:10
* @Description:
*/
@DB(table = "books")
public interface bookDao extends CrudDao<Books,Long> {
String COLUMNS = "bookID, bookName, bookCounts, detail";
@SQL("select " + COLUMNS + " from #table")
List<Books> finAllBooks();
}
5.在测试类中构造数据源并初始化mango对象
/**
- @Auther: zzx
- @Date: 2022/9/19 13:38
- @Description:
*/
public class setBook {
//定义数据源
String driverClassName = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/studyMango";
String username = "root";
String passWord = "123456";
DataSource ds = new DriverManagerDataSource(driverClassName, url, username, passWord);
//使用数据源初始化mango
Mango mango = Mango.newInstance(ds);
//查询所有方法
public List findAll(){
bookDao bookDao = mango.create(bookDao.class);
List<Books> books = bookDao.finAllBooks();
return books;
}
}
6.测试类
public class bookTest {
public static void main(String[] args) {
bookTest bookController = new bookTest();
List all = bookController.findAll();
System.out.println(all.toString());
}
}
框架提供的crud方法
增:批量增和单条增
删:
改:
查