数据库建议大家用jdbc连接,并使用mybatisplus做持久层。本文我将使用SQL server数据库做示范。

首先。引入必要的pow包

<!-- JDBC sqlserver -->
<dependency>
  <groupId>com.microsoft.sqlserver</groupId>
  <artifactId>mssql-jdbc</artifactId>
  <version>6.4.0.jre8</version>
</dependency>
<!-- mybatis plus -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.1.0</version>
</dependency>
<!-- mp 代码生成器 -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-generator</artifactId>
  <version>3.1.0</version>
</dependency>

在application.yml中添加以下配置信息

spring:
  datasource:
    # 根据数据库类型修改
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://***.***.***.***:1433;DatabaseName=***;
    username: sa
    password: ******

我们先简单的新建一个数据表:CityArea


用代码生成器生成对应的实体Entity

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("CityArea")
@ApiModel(value="CityArea对象", description="")
public class CityArea implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "Id", type = IdType.AUTO)
    private Integer Id;

    @TableField("Name")
    private String Name;

    @TableField("Pinyin")
    private String Pinyin;

    @TableField("CityId")
    private Integer CityId;

    @TableField("State")
    private Integer State;

    @TableField("Sort")
    private Integer Sort;

    @TableField("IsEdit")
    private Boolean IsEdit;

    @TableField("CreateTime")
    private LocalDateTime CreateTime;

    @TableField("RegionId")
    private Integer RegionId;

    @TableField("Weighting")
    private Float Weighting;

    @TableField("AreaCode")
    private String AreaCode;

    @TableField("IsHot")
    private Integer IsHot;
}

这就相当于表对象。

现在受用mybatisplus查出这张表的全部数据

/**
 * 获取全部城市地区
 *
 * @return cityAreas
 */
@Override
public List<CityArea> getCityArea() {
    List<CityArea> cityAreas = cityAreaMapper.selectList(
            new QueryWrapper<CityArea>().lambda()
                    .eq(CityArea::getState, CityAreaEnum.正常.getValue())
    );
    return cityAreas;
}

这里使用了lambda表达式查询。更多表达式可以参考 MyBatis-Plus 官网

此外还可以定制 SQL 语句,相对于比较复杂的查询,手撸 SQL 语句更加方便实用,同时优化调整也更加简单。

服务层实现类代码如下:

@Override
public List<CityArea> getCityArea() {
    List<CityArea> cityAreas = cityAreaMapper.selectCityAreas(CityAreaEnum.正常.getValue());
    return cityAreas;
}

Mapper 接口代码:

/**
 * <p>
 * CityArea Mapper 接口
 * </p>
 *
 * @author WuGuangNuo
 * @since 2019-05-26
 */
@Repository
public interface CityAreaMapper extends BaseMapper<CityArea> {
    List<CityArea> selectCityAreas(@Param("state") Integer state);
}

这里就接收了服务层传来的参数“state”

同名的Mapper.xml文件写SQL语句,如下

<select id="selectCityAreas" resultType="com.wgn.java.entity.CityArea">
  SELECT
    c.*
  FROM
    [CityArea] AS c
  WHERE 1 = 1
  <if test="state != null and state != ''">
    AND c.State = #{state}
  </if>
</select>

请注意,如果是查询则使用<select></select>标签标记,其内的id必须与mapper中的相同,返回类型也要相同,否则会报错。