引言
数据库在系统应用中比较常用,本章介绍springboot结合数据库区做应用。
环境搭建
pom文件引入依赖
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!--数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--数据库连接池-->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</dependency>
<!--阿里druid数据源-->
<!--<dependency>-->
<!--<groupId>com.alibaba</groupId>-->
<!--<artifactId>druid</artifactId>-->
<!--<version>1.0.29</version>-->
<!--</dependency>-->
application.properties增加数据源配置文件
#多数据源,自定义
spring.mysql.url=jdbc:mysql://10.45.157.180:3306/test?useSSL=true&useUnicode=true&characterEncoding=UTF-8&relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
spring.mysql.username=root
spring.mysql.password=123456
spring.mysql.driver-class-name=com.mysql.jdbc.Driver
spring.mysql.validationQuery=SELECT 1
spring.mysql.testWhileIdle=true
代码
1、数据源代码,如果配置多个数据源,在application.properties中增加不同的数据源前缀,然后MysqlDatasource中增加不同的bean去标识数据源。
package com.znv.datasource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
/**
* Mysql数据源配置
* Created by MHm on 2018/8/13.
*/
@Configuration
@MapperScan(basePackages = {"com.znv.dao.mapper"},sqlSessionFactoryRef = "MySqlSessionFactory")
public class MysqlDatasource {
/**
* 数据源
* @return
*/
@Bean(name = "primaryDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.mysql")
public javax.sql.DataSource dataSource() {
//考虑如何使用druid的数据源
return new org.apache.tomcat.jdbc.pool.DataSource();
//return DataSourceBuilder.create().build();
//return new DruidDataSource();
}
/**
* sessionFactory
* @return
* @throws Exception
*/
@Bean(name = "MySqlSessionFactory")
@Primary
public SqlSessionFactory sqlSessionFactoryBean() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sqlSessionFactoryBean.setMapperLocations(resolver
.getResources("classpath:/mapper/**/*.xml"));
return sqlSessionFactoryBean.getObject();
}
/**
* 事务管理
* @return
*/
@Bean(name = "mysqlPlatformTransactionManager")
@Primary
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
}
2、从mybatis的配置文件开始,DictMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.znv.dao.mapper.DictMapper">
<!--通过<resultMap>映射实体类属性名和表的字段名对应关系 -->
<resultMap id="DictBean" type="java.util.HashMap">
<result property="alarmType" column="alarm_type"/>
<result property="alarmLevel" column="alarm_level"/>
<result property="name" column="name"/>
</resultMap>
<select id="queryDictList" resultMap="DictBean">
select * FROM t_dict_alarmtype WHERE 1 = 1
<if test="type != 0">AND alarm_type = #{type}</if>
</select>
</mapper>
目录如下
3、创建Mapper的接口
package com.znv.dao.mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
*
* Created by MHm on 2018/8/13.
*/
@Repository
public interface DictMapper {
List<Map<String, String>> queryDictList(@Param(value = "type")String type);
}
4、 创建service的接口,实现业务类。
package com.znv.service;
import java.util.List;
import java.util.Map;
/**
*
* Created by MHm on 2018/8/13.
*/
public interface DictService {
List<Map<String,String>> queryDictList(String type);
}
package com.znv.service.impl;
import com.znv.dao.mapper.DictMapper;
import com.znv.service.DictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
*
* Created by MHm on 2018/8/13.
*/
@Service
public class DictServiceImpl implements DictService{
@Autowired
private DictMapper dictMapper;
@Override
public List<Map<String, String>> queryDictList(String type) {
return dictMapper.queryDictList(type);
}
}
5、restful的controller对外提供接口
package com.znv.controller;
import com.alibaba.fastjson.JSONObject;
import com.znv.service.DictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
*
* Created by MHm on 2018/8/13.
*/
@RestController
public class DictController {
@Autowired
private DictService dictService;
@RequestMapping(value = "/dict/queryDictList", method = RequestMethod.GET)
public String queryDictList(@RequestParam(value = "type", required = true) String type){
List<Map<String, String>> list = dictService.queryDictList(type);
return JSONObject.toJSONString(list);
}
@RequestMapping(value = "/dict/queryAlarmTypeList", method = RequestMethod.GET)
public String queryAlarmTypeList(){
List<Map<String, String>> list = dictService.queryDictList("1");
return JSONObject.toJSONString(list);
}
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test(){
return "hello test";
}
}
6、运行Application,浏览器输入http://localhost:8088/dict/queryAlarmTypeList