diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..52f30edef0c129bca134c38f3a88f14e69f0989b --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# Ask Data +借助大语言模型, 通过提问对话方式, 获取数据图表. diff --git a/pom.xml b/pom.xml index cfad9098af32e5bee5837686aae6cb107598320c..975658c4bb5355357acc6fd0d1ca1c8f78dc9376 100644 --- a/pom.xml +++ b/pom.xml @@ -76,7 +76,15 @@ commons-text 1.9 - + + mysql + mysql-connector-java + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.1.0 + org.springframework.boot spring-boot-starter-web diff --git a/src/main/java/org/enthusa/askdata/config/MapperConfiguration.java b/src/main/java/org/enthusa/askdata/config/MapperConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..389f6a31fe78360ddc78f7f853403c9ea1907043 --- /dev/null +++ b/src/main/java/org/enthusa/askdata/config/MapperConfiguration.java @@ -0,0 +1,40 @@ +package org.enthusa.askdata.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.enthusa.avatar.mybatis.helper.MapperHelper; +import org.enthusa.avatar.mybatis.helper.PageInterceptor; +import org.enthusa.avatar.mybatis.mapper.SqlMapper; +import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Configuration; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.List; + +/** + * @author henry + * @date 2023/6/24 + */ +@Configuration +@AutoConfigureAfter(MybatisAutoConfiguration.class) +public class MapperConfiguration { + @Resource + private List sqlSessionFactoryList; + + @Resource + private ApplicationContext applicationContext; + + @PostConstruct + public void addMapperInterceptor() { + MapperHelper mapperHelper = new MapperHelper(); + PageInterceptor interceptor = new PageInterceptor(); + applicationContext.getBeansOfType(SqlMapper.class); + mapperHelper.registerMapper(SqlMapper.class); + for (SqlSessionFactory sqlSessionFactory : sqlSessionFactoryList) { + sqlSessionFactory.getConfiguration().addInterceptor(interceptor); + mapperHelper.processConfiguration(sqlSessionFactory.getConfiguration()); + } + } +} diff --git a/src/main/java/org/enthusa/askdata/controller/BiPostController.java b/src/main/java/org/enthusa/askdata/controller/BiPostController.java new file mode 100644 index 0000000000000000000000000000000000000000..ac4f12dfe114e6a33567459955569e9f59b64506 --- /dev/null +++ b/src/main/java/org/enthusa/askdata/controller/BiPostController.java @@ -0,0 +1,69 @@ +package org.enthusa.askdata.controller; + +import org.enthusa.askdata.entity.BiPost; +import org.enthusa.askdata.mapper.BiPostMapper; +import org.enthusa.avatar.face.type.PageModel; +import org.enthusa.avatar.face.type.Result; +import org.enthusa.avatar.face.utils.ResultUtil; +import org.enthusa.avatar.face.utils.Validate; +import org.springframework.beans.BeanUtils; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.List; + +@RestController +@RequestMapping("/api") +public class BiPostController { + @Resource + private BiPostMapper biPostMapper; + + @GetMapping("/posts") + public Result index( + @RequestParam(value = "page", required = false, defaultValue = "1") Integer page, + @RequestParam(value = "pageSize", required = false, defaultValue = "20") Integer pageSize + ) { + PageModel pageModel = new PageModel<>(); + pageModel.setPageAndPageSize(page, pageSize); + List postList = biPostMapper.selectByPage(pageModel); + pageModel.setList(postList); + return ResultUtil.success(pageModel); + } + + @GetMapping("/posts/{id}") + public Result show(@PathVariable("id") Integer id) { + Validate.idValid("id", id); + BiPost post = biPostMapper.selectByPrimaryKey(id); + Validate.hasRecord("id", id, post); + return ResultUtil.success(post); + } + + @PostMapping("/posts") + public Result create(@RequestBody @Valid BiPost biPost, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + Validate.isRecord(true, bindingResult.getFieldError().getDefaultMessage()); + } + + BiPost post = new BiPost(); + BeanUtils.copyProperties(biPost, post); + biPostMapper.insertSelective(post); + return ResultUtil.success(post); + } + + @PutMapping("/posts/{id}") + public Result update(@PathVariable("id") Integer id, @RequestBody @Valid BiPost biPost, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + Validate.isRecord(true, bindingResult.getFieldError().getDefaultMessage()); + } + + Validate.idValid("id", id); + BiPost post = biPostMapper.selectByPrimaryKey(id); + Validate.hasRecord("id", id, post); + + BeanUtils.copyProperties(biPost, post); + biPostMapper.updateByPrimaryKey(post); + return ResultUtil.success(post); + } +} diff --git a/src/main/java/org/enthusa/askdata/entity/BiPost.java b/src/main/java/org/enthusa/askdata/entity/BiPost.java new file mode 100644 index 0000000000000000000000000000000000000000..4e2c5c75a88016682abf2e9920f44bd6040e956f --- /dev/null +++ b/src/main/java/org/enthusa/askdata/entity/BiPost.java @@ -0,0 +1,32 @@ +package org.enthusa.askdata.entity; + +import lombok.Data; + +import java.util.Date; + +@Data +public class BiPost { + /** + * id + */ + private Integer id; + + /** + * title + */ + private String title; + + /** + * create_time + */ + private Date createTime; + + /** + * update_time + */ + private Date updateTime; + + public void setTitle(String title) { + this.title = title == null ? null : title.trim(); + } +} diff --git a/src/main/java/org/enthusa/askdata/mapper/BiPostMapper.java b/src/main/java/org/enthusa/askdata/mapper/BiPostMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..08b28dfa68b1d4847bf511097c50b9f9c8f6ab76 --- /dev/null +++ b/src/main/java/org/enthusa/askdata/mapper/BiPostMapper.java @@ -0,0 +1,12 @@ +package org.enthusa.askdata.mapper; + +import org.enthusa.askdata.entity.BiPost; +import org.apache.ibatis.annotations.Mapper; +import org.enthusa.avatar.mybatis.mapper.SqlMapper; + +@Mapper +public interface BiPostMapper extends SqlMapper { + int insertSelective(BiPost record); + + int updateByPrimaryKeySelective(BiPost record); +} diff --git a/src/main/resources/import.sql b/src/main/resources/import.sql new file mode 100644 index 0000000000000000000000000000000000000000..c7e613136217c21ca720467bd7913209374232a2 --- /dev/null +++ b/src/main/resources/import.sql @@ -0,0 +1,6 @@ +CREATE TABLE bi_post ( + id INT AUTO_INCREMENT PRIMARY KEY, + title VARCHAR(255), + create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); diff --git a/src/main/resources/org/enthusa/askdata/mapper/BiPostMapper.xml b/src/main/resources/org/enthusa/askdata/mapper/BiPostMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..d208fbb0dd14c1b1e0752c993d01ff7443ca5e41 --- /dev/null +++ b/src/main/resources/org/enthusa/askdata/mapper/BiPostMapper.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + id, title, create_time, update_time + + + insert into bi_post + + + title, + + + + + #{title,jdbcType=VARCHAR}, + + + + + update bi_post + + + title = #{title,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=INTEGER} + + diff --git a/src/test/java/org/enthusa/askdata/AbstractTest.java b/src/test/java/org/enthusa/askdata/AbstractTest.java new file mode 100644 index 0000000000000000000000000000000000000000..6a4d8e63c2ea88c5d203ba0c5db375a4960c4600 --- /dev/null +++ b/src/test/java/org/enthusa/askdata/AbstractTest.java @@ -0,0 +1,14 @@ +package org.enthusa.askdata; + +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * @author henry + * @date 2023/6/24 + */ +@RunWith(SpringRunner.class) +@SpringBootTest +public abstract class AbstractTest { +} diff --git a/src/test/java/org/enthusa/askdata/mapper/BiPostMapperTest.java b/src/test/java/org/enthusa/askdata/mapper/BiPostMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..c5c4cf6aadf5ee35e38b87f8a14fded4bdc950c1 --- /dev/null +++ b/src/test/java/org/enthusa/askdata/mapper/BiPostMapperTest.java @@ -0,0 +1,25 @@ +package org.enthusa.askdata.mapper; + +import org.enthusa.askdata.AbstractTest; +import org.enthusa.askdata.entity.BiPost; +import org.enthusa.avatar.face.type.PageModel; +import org.junit.Test; + +import javax.annotation.Resource; + +/** + * @author henry + * @date 2023/6/24 + */ +public class BiPostMapperTest extends AbstractTest { + @Resource + private BiPostMapper biPostMapper; + + @Test + public void test() { + PageModel pageModel = new PageModel<>(); + pageModel.setOrders("id"); + biPostMapper.selectByPage(pageModel).forEach(System.out::println); + + } +}