SpringBoot(六) SpirngBoot與Mysql關係型資料庫
阿新 • • 發佈:2018-11-21
pom.xml檔案的配置
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
寫配置檔案
spring.datasource.url = jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=utf-8 spring.datasource.username = root spring.datasource.password = root spring.datasource.driver-class-name = com.mysql.jdbc.Driver
spring:
datasource:
username: root
password: Welcome_1
url: jdbc:mysql://192.168.179.131:3306/jdbc
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
# schema:
# - classpath:department.sql
server:
port: 9000
自定義資料來源DRUID
spring-boot-starter-jdbc 預設使用tomcat-jdbc資料來源,如果你想使用其他的資料來源,比如這裡使用了阿里巴巴的資料池管理,你應該額外新增以下依賴:
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.19</version> </dependency>
編寫java測試連結程式碼
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } //destroy-method="close"的作用是當資料庫連線不使用的時候,就把該連線重新放到資料池中,方便下次使用呼叫. @Bean(destroyMethod = "close") public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(env.getProperty("spring.datasource.url")); dataSource.setUsername(env.getProperty("spring.datasource.username"));//使用者名稱 dataSource.setPassword(env.getProperty("spring.datasource.password"));//密碼 dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name")); dataSource.setInitialSize(2);//初始化時建立物理連線的個數 dataSource.setMaxActive(20);//最大連線池數量 dataSource.setMinIdle(0);//最小連線池數量 dataSource.setMaxWait(60000);//獲取連線時最大等待時間,單位毫秒。 dataSource.setValidationQuery("SELECT 1");//用來檢測連線是否有效的sql dataSource.setTestOnBorrow(false);//申請連線時執行validationQuery檢測連線是否有效 dataSource.setTestWhileIdle(true);//建議配置為true,不影響效能,並且保證安全性。 dataSource.setPoolPreparedStatements(false);//是否快取preparedStatement,也就是PSCache return dataSource; } }
spring:
datasource:
username: root
password: Welcome_1
url: jdbc:mysql://192.168.179.131:3306/jdbc
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
# 初始化大小,最小,最大
initialSize: 5
minIdle: 5
maxActive: 20
# 配置獲取連線等待超時的時間
maxWait: 60000
# 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一個連線在池中最小生存的時間,單位是毫秒
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
# 配置監控統計攔截的filters,去掉監控介面sql無法統計,‘wall’用於防火牆
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
userGlobalDataSourceStat: true
# 通過connectProperties屬性來開啟mergeSql功能;慢SQL記錄
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
# schema:
# - classpath:department.sql
server:
port: 9000
編寫測試程式碼
@Repository public class LearnDaoImpl implements LearnDao{ @Autowired private JdbcTemplate jdbcTemplate; @Override public int add(LearnResouce learnResouce) { return jdbcTemplate.update("insert into learn_resource(author, title,url) values(?, ?, ?)",learnResouce.getAuthor(),learnResouce.getTitle(),learnResouce.getUrl()); } @Override public Page queryLearnResouceList(Map<String,Object> params) { StringBuffer sql =new StringBuffer(); sql.append("select * from learn_resource where 1=1"); if(!StringUtil.isNull((String)params.get("author"))){ sql.append(" and author like '%").append((String)params.get("author")).append("%'"); } if(!StringUtil.isNull((String)params.get("title"))){ sql.append(" and title like '%").append((String)params.get("title")).append("%'"); } Page page = new Page(sql.toString(), Integer.parseInt(params.get("page").toString()), Integer.parseInt(params.get("rows").toString()), jdbcTemplate); return page; } }
@Configuration public class DruidConfig { @ConfigurationProperties(prefix = "spring.datasource") @Bean public DataSource druid(){ return new DruidDataSource(); } //配置Druid的監控 //1、配置一個管理後臺 @Bean public ServletRegistrationBean statViewServlet(){ ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*"); Map<String,String> initParams =new HashMap<>(); initParams.put("loginUsername", "admin"); initParams.put("loginPassword", "123456"); bean.setInitParameters(initParams); return bean; } //2、配置監控的filter @Bean public FilterRegistrationBean webstatFilter(){ FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(new WebStatFilter()); Map<String,String> initParams =new HashMap<>(); initParams.put("exclusions", "*.js,*.css,/druid/*"); bean.setInitParameters(initParams); bean.setUrlPatterns(Arrays.asList("/*")); return bean; } }
訪問:localhost:8080/druid/login.html
以上是使用JDBCTemptlate模板,可以參考API文件 JdbcTemplate
SpringBoot整合Mybatis
1.使用註解的方式
- 匯入依賴
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.9</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
- 匯入配置檔案中關於Druid的配置
- 建立資料表
- 建立資料庫對應的JavaBean,以及getter和setter方法
- 在配置檔案中修改駝峰命名開啟 ,不寫配置檔案就寫配置類
mybatis:
configuration:
map-underscore-to-camel-case: true
- 資料庫中以下劃線分割,而javabean中以駝峰命名。解決辦法
public class MyBatisConfig {
@Bean
public ConfigurationCustomizer configurationCustomizer(){
return new ConfigurationCustomizer() {
@Override
public void customize(Configuration configuration) {
configuration.setMapUnderscoreToCamelCase(true);
}
};
}
}
- 使用註解方式匯入mapper
@MapperScan(value = "com.test.testMapper")
- 編寫測試類(@component註解不新增也沒事,只是不加service那邊引入mapper的時候會有錯誤提示,也就是紅線,但不影響程式的執行)
@Component
@Mapper
public interface DepartmentMapper {
@Insert("insert into department(dept_name) value(#{deptName})")
public int insertDept(Department department);
@Delete("delete from department where id=#{id}")
public int deleteDeptById(Integer id);
@Update("update department set dept_Name=#{deptName} where id=#{id}")
public int updateDept(Department department);
@Select("select * from department where id=#{id}")
public Department getDeptById(Integer id);
}
配置檔案的方式整合Mybatis(xml方式)
- 新建mybatis的配置檔案。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> </configuration>
- 新建mapper介面及其方法。
public interface EmployeeMapper {
public Employee getEmpById(Integer id);
public void insetEmp(Employee employee);
}
- 新建Employee的mapper.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.wdjr.springboot.mapper.EmployeeMapper"> <select id="getEmpById" resultType="com.wdjr.springboot.bean.Employee"> select * from employee where id=#{id} </select> <insert id="insetEmp"> INSERT INTO employee(last_name,email,gender,d_id) VALUES (#{lastName},#{email},#{gender},#{dId}) </insert> </mapper>
- 修改application.yml配置檔案
mybatis:
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml
- 編寫controller類進行測試。更多的mybatis使用查詢官方文件。mybatis官方中文參考文件
PageHelper分頁外掛
- 匯入pom.xml
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>x.x.x</version> </dependency>
- 例子
//2. use static method startPage PageHelper.startPage(1, 10); List<Country> list = countryMapper.selectIf(1); //3. use static method offsetPage PageHelper.offsetPage(1, 10); List<Country> list = countryMapper.selectIf(1); //4. method parameters public interface CountryMapper { List<Country> selectByPageNumSize( @Param("user") User user, @Param("pageNum") int pageNum, @Param("pageSize") int pageSize); } //config supportMethodsArguments=true List<Country> list = countryMapper.selectByPageNumSize(user, 1, 10);
分頁外掛PageHelper專案地址: https://github.com/pagehelper/Mybatis-PageHelper
具體使用例項:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/en/HowToUse.md