整合JDBC+druid+MyBatis
1)jdbc
Sping Data 官網:https://spring.io/projects/spring-data
資料庫相關的啟動器 :可以參考官方文件:
https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/htmlsingle/#using-boot-starter
application.yml:
spring: datasource: username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/mybatistest?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
配置完這些東西后,我們就可以直接去使用了,因為SpringBoot已經預設幫我們進行了自動配置
測試:
@RestController public class HelloController { @Autowired JdbcTemplate jdbcTemplate; @RequestMapping("/select") public List<Map<String, Object>> select(){ String sql="select * from user"; List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql); return maps; } }
JDBCTemplate
-
即使不使用第三方第資料庫操作框架,如 MyBatis等,Spring 本身也對原生的JDBC 做了輕量級的封裝,即JdbcTemplate
-
資料庫操作的所有 CRUD 方法都在 JdbcTemplate 中。
-
Spring Boot 不僅提供了預設的資料來源,同時預設已經配置好了 JdbcTemplate 放在了容器中,程式設計師只需自己注入即可使用
-
JdbcTemplate 的自動配置是依賴 org.springframework.boot.autoconfigure.jdbc 包下的 JdbcTemplateConfiguration 類
JDBCTemplate主要提供以下幾類方法:
-
execute方法:可以用於執行任何SQL語句,一般用於執行DDL語句;
-
update方法及batchUpdate方法:update方法用於執行新增、修改、刪除等語句;batchUpdate方法用於執行批處理相關語句;
-
query方法及queryForXXX方法:用於執行查詢相關語句;
-
call方法:用於執行儲存過程、函式相關語句。
2)druid
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
DruidConfig:
@Configuration
public class DruidConfig {
//將自定義的 Druid資料來源新增到容器中,不再讓 Spring Boot 自動建立
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druidDataSource(){
return new DruidDataSource();
}
//後臺監控,相當於web.xml
//因為springboot內建了servlet,沒有web.xml,因此用ServletRegistrationBean來替代
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean srb = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
//後臺登入的賬號密碼
HashMap<String, String> initParameters = new HashMap<>();
//增加配置
initParameters.put("LoginUsername","admin");//這裡的key是固定的
initParameters.put("LoginPassword","123456");
//允許誰可以訪問
//initParameters.put("allow","");//預設允許所有都可以訪問
srb.setInitParameters(initParameters);//設定初始化引數
return srb;
}
//過濾器
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean frb = new FilterRegistrationBean();
frb.setFilter(new WebStatFilter());
//可以過濾的請求
HashMap<Object, Object> initParameters = new HashMap<>();
initParameters.put("exclusions","*.js,*.css,/druid/*");
frb.setInitParameters(initParameters);
return frb;
}
}
applcation.yml:
spring:
datasource:
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatistest?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
type: com.alibaba.druid.pool.DruidDataSource
#Spring Boot 預設是不注入這些屬性值的,需要自己繫結
#druid 資料來源專有配置
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,stat:監控統計、log4j:日誌記錄、wall:防禦sql注入
#如果允許時報錯 java.lang.ClassNotFoundException: org.apache.log4j.Priority
#則匯入 log4j 依賴即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
filters: stat,wall
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
參考連結:https://mp.weixin.qq.com/s/wVAGOP1JdXZi5DMEsX1Aug
3)mybatis
1.mybatis整合包:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
2.配置資料庫連線資訊(同上不變)
3.編寫程式碼
注意:這裡為了測試,可以先不寫service層,實際業務中需要寫service層
UserMapper.xml:
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kakafa.springbootjdbc.mapper.UserMapper">
<select id="getUserList" resultType="user">
select * from mybatistest.user;
</select>
<select id="getUserById" parameterType="int" resultType="user">
select * from mybatistest.user where id = #{id};
</select>
<insert id="addUser" parameterType="user" >
insert into mybatistest.user(id,name,pwd) values(#{id},#{name},#{pwd});
</insert>
<update id="updateUser" parameterType="user">
update mybatistest.user
set name=#{name},pwd=#{pwd}
where id=#{id};
</update>
<delete id="deleteUser" parameterType="int">
delete
from mybatistest.user
where id=#{id};
</delete>
</mapper>
UserMapper:
@Mapper //是mybatis中的註解,表示將UserMapper交給Spring
@Repository //是springboot中的註解,表示這是一個dao層的類
//這個@Repository加不加都可以,因為@Mapper已經交給Spring容器管理了
public interface UserMapper {
//獲取全部使用者
List<User> getUserList();
//根據id查詢使用者
User getUserById(int id);
//插入一個使用者
int addUser(User user);
//修改使用者
int updateUser(User user);
//刪除使用者
int deleteUser(int id);
}
UserController:
@RestController
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("/queryUserList")
public List<User> queryUserList(){
List<User> userList = userMapper.getUserList();
return userList;
}
}
yml中要配置mybatis:
4.pom.xml中解決靜態資源匯出問題
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>