1. 程式人生 > 其它 >整合JDBC+druid+MyBatis

整合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>