This commit is contained in:
2019-08-15 01:25:05 +08:00
parent 3c56288991
commit 7242f6d76c
74 changed files with 4375 additions and 126 deletions
+59
View File
@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- maven可以继承父项目中的参数,所以可以删除子模块中相同定义 -->
<artifactId>zilean-test</artifactId>
<packaging>jar</packaging>
<name>zilean-test</name>
<description>框架功能测试模块</description>
<parent>
<groupId>cn.odboy</groupId>
<artifactId>zilean</artifactId>
<version>1.0.0</version>
<!-- lookup parent from repository -->
<relativePath>../pom.xml</relativePath>
</parent>
<dependencies>
<!-- maven可以继承父项目中的依赖,所以可以删除子模块中相同定义 -->
<!--lombok 依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
<!-- HuTool工具箱-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>cn.odboy</groupId>
<artifactId>zilean-base</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>cn.odboy</groupId>
<artifactId>zilean-cache</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,26 @@
package cn.odboy.zilean.test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
/**
* @author: Odboy
* @version: Jdk 1.8
* @desc: TODO 应用入口
* @time: 2019/8/11 7:25
* @blog: www.odboy.cn
* <p>
* SpringBootApplication-scanBasePackages-->定义扫描的根节点
* MapperScan-->定义扫描mapper接口所在包
* EntityScan-->定义JPA自动建表扫描所在包
*/
@SpringBootApplication(scanBasePackages = "cn.odboy.zilean")
@MapperScan("cn.odboy.zilean.dao")
@EntityScan("cn.odboy.zilean.entity")
public class ZileanTestApplication {
public static void main(String[] args) {
SpringApplication.run(ZileanTestApplication.class, args);
}
}
@@ -0,0 +1,21 @@
## -------------------------Redis\u914D\u7F6E(\u9AD8\u901F\u7F13\u5B58)
# \u670D\u52A1\u5668\u5730\u5740
spring.redis.host=47.103.14.6
# \u7AEF\u53E3\u53F7
spring.redis.port=6379
# \u8BBF\u95EE\u5BC6\u7801
spring.redis.password=Odboy#Redis!@$wRsSa
# \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570(\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236)
spring.redis.jedis.pool.max-active=50
# \u8FDE\u63A5\u6C60\u6700\u5927\u963B\u585E\u7B49\u5F85\u65F6\u95F4(\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236)
spring.redis.jedis.pool.max-wait=-1ms
# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5
spring.redis.jedis.pool.max-idle=10
# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5
spring.redis.jedis.pool.min-idle=0
# \u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4(\u6BEB\u79D2)
spring.redis.timeout=100ms
# \u6570\u636E\u5E93\u7D22\u5F15(\u9ED8\u8BA4\u4E3A0)
spring.redis.database=1
## -------------------------EhCache\u914D\u7F6E
spring.cache.ehcache.config=ehcache.xml
@@ -0,0 +1,37 @@
## -------------------------\u6570\u636E\u6E90\u914D\u7F6E
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://192.168.172.3:3306/zilean-test?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
## -------------------------\u6570\u636E\u6E90\u8FDE\u63A5\u6C60\u914D\u7F6E
# \u521D\u59CB\u5316\u65F6\u5EFA\u7ACB\u7269\u7406\u8FDE\u63A5\u7684\u4E2A\u6570
spring.datasource.druid.initial-size=5
# \u6700\u5C0F\u8FDE\u63A5\u6C60\u6570\u91CF
spring.datasource.druid.min-idle=5
# \u6700\u5927\u8FDE\u63A5\u6C60\u6570\u91CF\uFF0CmaxIdle\u5DF2\u7ECF\u4E0D\u518D\u4F7F\u7528
spring.datasource.druid.max-active=20
# \u83B7\u53D6\u8FDE\u63A5\u65F6\u6700\u5927\u7B49\u5F85\u65F6\u95F4\uFF0C\u5355\u4F4D\u6BEB\u79D2
spring.datasource.druid.max-wait=60000
# \u7533\u8BF7\u8FDE\u63A5\u7684\u65F6\u5019\u68C0\u6D4B\uFF0C\u5982\u679C\u7A7A\u95F2\u65F6\u95F4\u5927\u4E8EtimeBetweenEvictionRunsMillis\uFF0C\u6267\u884CvalidationQuery\u68C0\u6D4B\u8FDE\u63A5\u662F\u5426\u6709\u6548
spring.datasource.druid.test-while-idle=true
# \u65E2\u4F5C\u4E3A\u68C0\u6D4B\u7684\u95F4\u9694\u65F6\u95F4\u53C8\u4F5C\u4E3AtestWhileIdel\u6267\u884C\u7684\u4F9D\u636E
spring.datasource.druid.time-between-eviction-runs-millis=60000
# \u9500\u6BC1\u7EBF\u7A0B\u65F6\u68C0\u6D4B\u5F53\u524D\u8FDE\u63A5\u7684\u6700\u540E\u6D3B\u52A8\u65F6\u95F4\u548C\u5F53\u524D\u65F6\u95F4\u5DEE\u5927\u4E8E\u8BE5\u503C\u65F6\uFF0C\u5173\u95ED\u5F53\u524D\u8FDE\u63A5
spring.datasource.druid.min-evictable-idle-time-millis=30000
# \u7528\u6765\u68C0\u6D4B\u8FDE\u63A5\u662F\u5426\u6709\u6548\u7684sql\uFF0C\u5FC5\u987B\u662F\u4E00\u4E2A\u67E5\u8BE2\u8BED\u53E5
# mysql\u4E2D\u4E3A select 'x'
# oracle\u4E2D\u4E3A select 1 from dual
spring.datasource.druid.validation-query=select 'x'
# \u7533\u8BF7\u8FDE\u63A5\u65F6\u4F1A\u6267\u884CvalidationQuery\u68C0\u6D4B\u8FDE\u63A5\u662F\u5426\u6709\u6548\uFF0C\u5F00\u542F\u4F1A\u964D\u4F4E\u6027\u80FD\uFF0C\u9ED8\u8BA4\u4E3Atrue
spring.datasource.druid.test-on-borrow=false
# \u5F52\u8FD8\u8FDE\u63A5\u65F6\u4F1A\u6267\u884CvalidationQuery\u68C0\u6D4B\u8FDE\u63A5\u662F\u5426\u6709\u6548\uFF0C\u5F00\u542F\u4F1A\u964D\u4F4E\u6027\u80FD\uFF0C\u9ED8\u8BA4\u4E3Atrue
spring.datasource.druid.test-on-return=false
# \u662F\u5426\u7F13\u5B58preparedStatement\uFF0Cmysql5.5+\u5EFA\u8BAE\u5F00\u542F
# pool-prepared-statements: true
# \u5F53\u503C\u5927\u4E8E0\u65F6poolPreparedStatements\u4F1A\u81EA\u52A8\u4FEE\u6539\u4E3Atrue
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
# \u914D\u7F6E\u6269\u5C55\u63D2\u4EF6
spring.datasource.druid.filters=stat,wall
# \u5408\u5E76\u591A\u4E2ADruidDataSource\u7684\u76D1\u63A7\u6570\u636E
spring.datasource.druid.use-global-data-source-stat=true
@@ -0,0 +1,11 @@
## -------------------------Jpa\u914D\u7F6E(\u4E3B\u8981\u7528\u4E8E\u81EA\u52A8\u5EFA\u8868)
# \u5EFA\u8868\u7B56\u7565, \u5B9E\u4F53\u7C7B\u53D8\u66F4\u5373\u6539\u53D8\u8868\u7ED3\u6784
spring.jpa.hibernate.ddl-auto=update
# \u8868\u5B57\u6BB5\u547D\u540D\u89C4\u5219, \u9047\u5230\u5927\u5199\u5B57\u6BCD \u52A0\u201D_\u201D\u7684\u547D\u540D
spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
# \u663E\u793A\u5EFA\u8868\u8BED\u53E5
spring.jpa.show-sql=true
# \u9ED8\u8BA4\u4F7F\u7528MyISAM(\u8868\u793A\u4F7F\u7528MySQL)
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
# Open Session In View\u7B80\u79F0OSIV\uFF0C\u662F\u4E3A\u4E86\u89E3\u51B3\u5728mvc\u7684controller\u4E2D\u4F7F\u7528\u4E86hibernate\u7684lazy load\u7684\u5C5E\u6027\u65F6\u6CA1\u6709session\u629B\u51FA\u7684LazyInitializationException\u5F02\u5E38\uFF1B\u5BF9hibernate\u6765\u8BF4ToMany\u5173\u7CFB\u9ED8\u8BA4\u662F\u5EF6\u8FDF\u52A0\u8F7D\uFF0C\u800CToOne\u5173\u7CFB\u5219\u9ED8\u8BA4\u662F\u7ACB\u5373\u52A0\u8F7D
spring.jpa.open-in-view=false
@@ -0,0 +1,3 @@
## -------------------------MyBatis\u914D\u7F6E(ORM)
# mapper\u6620\u5C04\u6587\u4EF6\u6240\u5728\u7684\u8DEF\u5F84
mybatis.mapper-locations=classpath:mappers/**/*Mapper.xml
@@ -0,0 +1,8 @@
## \u5E94\u7528\u914D\u7F6E
# \u662F\u5426\u5F00\u542F\u8C03\u8BD5\u6A21\u5F0F\uFF0C\u8F93\u51FA\u6240\u6709\u4FE1\u606F
debug=false
## Server\u914D\u7F6E
server.port=8080
server.tomcat.uri-encoding=utf-8
server.servlet.context-path=/zliean-test
spring.profiles.active=database,jpa,mybatis,cache
@@ -0,0 +1,13 @@
package cn.odboy.zilean.test;
import org.junit.runner.RunWith;
import org.mybatis.spring.boot.test.autoconfigure.MybatisTest;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@MybatisTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class ZileanTestApplicationTests {
}
@@ -0,0 +1,131 @@
package cn.odboy.zilean.test.demo;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.odboy.zilean.dao.IUserDao;
import cn.odboy.zilean.entity.User;
import cn.odboy.zilean.mybatis.core.EntityPropNav;
import cn.odboy.zilean.mybatis.page.Page;
import cn.odboy.zilean.test.ZileanTestApplicationTests;
import com.alibaba.fastjson.JSON;
import lombok.extern.log4j.Log4j2;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import java.util.List;
/**
* @author: Odboy
* @version: Jdk 1.8
* @desc: TODO SqlHandle功能单元测试
* @time: 2019/8/9 7:22
* @blog: www.odboy.cn
*/
@Log4j2
public class SqlBuilderTest extends ZileanTestApplicationTests {
@Autowired
private IUserDao userDao;
@Test
public void testInsert() {
log.info("新增");
User user;
for (int i = 0; i < 100000; i++) {
user = new User();
user.setUsername("tianjun" + i);
user.setUserpwd("123456");
user.setBgmUrl("背景音乐Url");
user.setAutograph("如果你的人生没有那么多的喝彩,就请默默努力吧");
user.setBirth(DateTime.now());
user.setHometown("江西省赣州市上犹县");
user.setJoinWorkDate(DateTime.now());
user.setLastLoginTime(DateTime.now());
user.setMaritalStatus("全栈工程师");
user.setPhoneNum("13621988781");
user.setRealName("田俊");
user.setLogoUrl("头像Url");
user.setRemark("呵呵哒~");
user.setSex(Byte.valueOf("0"));
user.setCreateTime(DateTime.now());
log.info(JSON.toJSONString(user));
Assert.assertSame("受影响的行数", 1, userDao.insertSelective(user));
}
}
@Test
@Rollback(false)
public void testUpdate() {
User user = new User();
log.info("修改");
user.setId(2L);
user.setBgmUrl("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
Assert.assertSame("受影响的行数", 1, userDao.updateSelectiveById(user));
}
@Test
@Rollback(false)
public void testDelete() {
log.info("删除");
Assert.assertSame("受影响的行数", 1, userDao.deleteById(201L));
}
@Test
public void testQuery() {
List<User> users;
User user;
long total;
log.info("通过主键ID查询");
user = userDao.selectOneById(2L);
log.info("user=" + JSON.toJSONString(user));
log.info("通过对象属性名称和值查询");
users = userDao.selectByNav(EntityPropNav.build("username", "tianjun"));
log.info("users=" + JSON.toJSONString(users));
users = userDao.selectByNav(EntityPropNav.build("id", 2));
log.info("users=" + JSON.toJSONString(users));
log.info("通过对象属性名称和值模糊查询");
users = userDao.selectByLikeNav(EntityPropNav.build("username", "tian"));
log.info("users=" + JSON.toJSONString(users));
log.info("无条件分页查询");
users = userDao.selectByPage(null, new Page());
log.info("users=" + JSON.toJSONString(users));
log.info("条件分页查询");
user = new User();
user.setId(2L);
users = userDao.selectByPage(user, new Page());
log.info("users=" + JSON.toJSONString(users));
log.info("不分页查询所有");
users = userDao.selectAll(null);
log.info("users=" + JSON.toJSONString(users));
log.info("含条件不分页查询所有");
user = new User();
user.setUsername("tianjun1");
users = userDao.selectAll(user);
log.info("users=" + JSON.toJSONString(users));
log.info("简易 in 查询");
users = userDao.selectAllInValues("id", CollUtil.newArrayList(1, 2, 4, 5));
log.info("users=" + JSON.toJSONString(users));
users = userDao.selectAllInValues("username", CollUtil.newArrayList("'tianjun1'", "'tianjun3'"));
log.info("users=" + JSON.toJSONString(users));
log.info("无条件统计数量");
total = userDao.countAll(null);
log.info("total=" + total);
log.info("含条件统计数量");
user = new User();
user.setUsername("tianjun1");
total = userDao.countAll(user);
log.info("total=" + total);
}
}