对于搭建一个小项目自己测试玩如果采用传统的SSM框架配置起来太过于繁琐,使用springboot简化配置再搭配通用mapper简直不要太方便,话不多说,直接上代码。
- 首先是pom文件,直接去spring官网找,或者通过idea工具打开。
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description> <properties>
<java.version>1.8</java.version>
</properties> <dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.4.RELEASE</version>
</dependency> <dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--oracle -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>jdbc</artifactId>
<version>11.2.0.3.0</version>
</dependency>
<!--mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.4</version>
</dependency>
<!-- page-helper-spring-boot-starter -->
<dependency>
<!-- <scope>provided</scope> -->
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.9</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency> </dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
- 配置文件application.yml,这里使用的是oracle数据库。
spring:
datasource:
url: jdbc:oracle:thin:@*******
username: ****
password: ****
#使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: oracle.jdbc.driver.OracleDriver
#可以使用监控过滤器,配置监控统计的filters,去掉后监控界面sql将无法统计,‘wall’用于防火墙
filters: stat,wall.log4j
#最大活跃数
maxActive: 20
#初始化数量
initialSize: 1
maxWait: 60000
#通过connectionProperties属性来打开mergeSql功能;慢查询记录
#connectionProperties:druid.stat.mergeSql=true
#druid.stat.slowSqlMillis=5000
minIdle: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
#打开pscache
poolPreparedStatements: true
maxOpenPreparedStatements: 20 mybatis:
type-aliases-package: com.example.demo.pojo
mapper-locations: classpath:mapper/*.xml
configuration:
map-underscore-to-camel-case: true
- 到这里就已经配置好了,接下来可以写三层架构了
controller层:
package com.example.demo.controller; import com.example.demo.pojo.LoanInfo;
import com.example.demo.service.LoanService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController
public class LoanController { @Autowired
private LoanService loanService; @RequestMapping("/test/get")
public Object getLoanInfo(){
List<LoanInfo> loanInfoList = loanService.getLoanInfo();
return loanInfoList;
}
@RequestMapping("/test/get2")
public Object getLoanInfo2(){
List<LoanInfo> loanInfoList = loanService.getLoanInfo2();
return loanInfoList;
}
@RequestMapping("/test/get3")
public Object getLoanInfo3(){
List<LoanInfo> loanInfoList = loanService.getLoanInfo3();
return loanInfoList;
}
}
service层:
package com.example.demo.service; import com.example.demo.mapper.LoanMapper;
import com.example.demo.pojo.LoanInfo;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example; import java.util.List; @SuppressWarnings("ALL")
@Service
@Slf4j
public class LoanService {
@Autowired
private LoanMapper loanMapper; public List<LoanInfo> getLoanInfo() {
PageHelper.startPage(1, 3);
List<LoanInfo> loanInfos = loanMapper.selectAll();
PageInfo<LoanInfo> pageInfo = new PageInfo<>(loanInfos);
long total = pageInfo.getTotal();
List<LoanInfo> list = pageInfo.getList();
log.info("total:"+total);
return list;
} public List<LoanInfo> getLoanInfo2() {
Example example = new Example(LoanInfo.class);
Example.Criteria criteria = example.createCriteria();
criteria.orEqualTo("loaninfoid", 1);
example.and(criteria);
List<LoanInfo> loanInfos = loanMapper.selectByExample(example);
return loanInfos;
} public List<LoanInfo> getLoanInfo3() {
List<LoanInfo> loanInfos = loanMapper.queryLoaninfos(13);
return loanInfos;
}
}
dao层:这里使用通用mapper只需要写一个接口继承Mapper<T> (T是自定义的javabean)
package com.example.demo.mapper; import com.example.demo.pojo.LoanInfo;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import tk.mybatis.mapper.common.Mapper; import java.util.List; public interface LoanMapper extends Mapper<LoanInfo> {
@Select("select * from table")
List<LoanInfo> queryLoaninfos(@Param("loaninfoid") Integer loaninfoid);
}
pojo类:
package com.example.demo.pojo; import lombok.Data; import javax.persistence.Table;
import javax.persistence.Transient; @Data
//对应数据库table名
@Table(name = "LOANINFO")
public class LoanInfo { private Integer loaninfoid; private Integer loaninfonum; private Float loaninfomoney; private Integer loaninfodate; private String loaninfoname; private Integer loaninfocardtype; private String loaninfocardnum; private String loaninfocreatetime;
//用transient关键字标记的成员变量不参与序列化过程。
@Transient
private String partnername; }
至此就已经搭建完成,可以完成简单的CRUD,不需要写xml文件,如果需要多表查询写sql语句也可以通过@Select注解来实现。
通用mapper中提供了很多方法很好用,以下内容转载自https://blog.csdn.net/Code_shadow/article/details/81837602
Select
方法:List<T> select(T record);
说明:根据实体中的属性值进行查询,查询条件使用等号 方法:T selectByPrimaryKey(Object key);
说明:根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号 方法:List<T> selectAll();
说明:查询全部结果,select(null)方法能达到同样的效果 方法:T selectOne(T record);
说明:根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号 方法:int selectCount(T record);
说明:根据实体中的属性查询总数,查询条件使用等号 Insert
方法:int insert(T record);
说明:保存一个实体,null的属性也会保存,不会使用数据库默认值 方法:int insertSelective(T record);
说明:保存一个实体,null的属性不会保存,会使用数据库默认值 Update
方法:int updateByPrimaryKey(T record);
说明:根据主键更新实体全部字段,null值会被更新 方法:int updateByPrimaryKeySelective(T record);
说明:根据主键更新属性不为null的值 Delete
方法:int delete(T record);
说明:根据实体属性作为条件进行删除,查询条件使用等号 方法:int deleteByPrimaryKey(Object key);
说明:根据主键字段进行删除,方法参数必须包含完整的主键属性 Example方法
方法:List<T> selectByExample(Object example);
说明:根据Example条件进行查询
重点:这个查询支持通过Example类指定查询列,通过selectProperties方法指定查询列 方法:int selectCountByExample(Object example);
说明:根据Example条件进行查询总数 方法:int updateByExample(@Param("record") T record, @Param("example") Object example);
说明:根据Example条件更新实体record包含的全部属性,null值会被更新 方法:int updateByExampleSelective(@Param("record") T record, @Param("example") Object example);
说明:根据Example条件更新实体record包含的不是null的属性值 方法:int deleteByExample(Object example);
说明:根据Example条件删除数据 条件查询
// 创建Example
Example example = new Example(TestTableVO.class);
// 创建Criteria
Example.Criteria criteria = example.createCriteria();
// 添加条件
criteria.andEqualTo("isDelete", 0);
criteria.andLike("name", "%abc123%");
List<TestTableVO> list = testTableDao.selectByExample(example);