springboot-整合mybatis

本文将从整合JDBC讲起,然后整合mybatis,其中会穿插一些druid的知识。
首先需要引入以下依赖。

一、整合JDBC

 
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        
        <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
            <version>2.1.1version>
        dependency>
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>

配置yml文件:

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver

在这里插入图片描述
由于数据库驱动为8点几,所以需要引入时区!
在test类中进行测试:

@Autowired
    private DataSource dataSource;
 @Test
    void contextLoads() throws SQLException {
        // System.out.println(dataSource.getConnection());
        Connection connection = dataSource.getConnection();
        Statement statement = connection.createStatement();
        String sql = "select * from mybatis.user";
        ResultSet resultSet = statement.executeQuery(sql);
        while (resultSet.next()) {
            System.out.println(resultSet.getInt("id"));
            System.out.println(resultSet.getString("name"));
        }

springboot-整合mybatis_第1张图片
在此处,数据库如下(作为测试,数据库可以随意建立):
springboot-整合mybatis_第2张图片
上面使用的是原生的数据源进行数据的查询,下面通过使用jdbc的模板类进行测试
springboot-整合mybatis_第3张图片

@RestController
public class JDBCController {
    @Autowired
    private JdbcTemplate jdbcTemplate;

   @GetMapping("/selectUser")
public List<Map<String,Object>> Listselect(){
       //查询
       String sql="select * from mybatis.user";
       List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
       return maps;
}
//增
@GetMapping("/addUser")
    public String addUser(){
       String sql="insert into mybatis.user(name,id,age)values ('haha2',6,'12')";
        int update = jdbcTemplate.update(sql);
        return "增加成功";
    }
    //改
    @GetMapping("/updateUser")
    public String updateUser(){
        String sql="update mybatis.user set name=? where id=?";
        Object[] objects = new Object[2];
        objects[0]="xiaoming";
        objects[1]=1;
        int update = jdbcTemplate.update(sql,objects);
        return "修改成功";
    }

}

通过测试,以上方法可以很好的进行数据的增删改查!

二、整合druid数据源

首先需要引入druid的启动器

<dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druidartifactId>
            <version>1.1.21version>
        dependency>

配置文件可以写以下内容

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
#    driver-class-name: com.mysql.jdbc.Driver
    druid:
      # 下面为连接池的补充设置,应用到上面所有数据源中
      # 初始化大小,最小,最大
      initial-size: 5
      min-idle: 5
      max-active: 20
      # 配置获取连接等待超时的时间
      max-wait: 60000
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      time-between-eviction-runs-millis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 300000
      validation-query: SELECT 1 FROM DUAL
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      # 打开PSCache,并且指定每个连接上PSCache的大小
      pool-prepared-statements: true
      #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      max-pool-prepared-statement-per-connection-size: 20
      filters: stat,wall
      use-global-data-source-stat: true
      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
      connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      # 配置监控服务器
      stat-view-servlet:
        login-username: admin
        login-password: 123456
        reset-enable: false
        url-pattern: /druid/*
        # 添加IP白名单
        #allow:
        # 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高
        #deny:
      web-stat-filter:
        # 添加过滤规则
        url-pattern: /*
        # 忽略过滤格式
#        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*

建立如下的配置类==spring.xml

@Configuration
public class DruidConfig {
//绑定数据源
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
public DataSource druidDatasource(){
    return new DruidDataSource();
}
//后台监控
    @Bean
public ServletRegistrationBean a(){
    ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");//访问路径
   //后台监控
    HashMap<String, String> init = new HashMap<>();
    init.put("loginUsername","admin");//key是固定的
    init.put("loginPassword","123");//key是固定的
    //允许访问
    init.put("allow","");
    bean.setInitParameters(init);

    return bean;
}
}

访问结果如下:
springboot-整合mybatis_第4张图片
springboot-整合mybatis_第5张图片
补充知识:datasource和datamanager
datasource是与连接池获取连接,而datamanager是获取与数据库的连接!datamanager类的主要作用是管理注册到datamanager中的JDBC驱动程序,并根据需要使用JDBC驱动程序建立与数据服务器的网络连接。但是建立与数据库的连接是一项较耗资源的工作,频繁的进行数据库连接建立操作会产生较大的系统开销,为了解决上述问题,可以采用数据库连接池技术。datasource内部封装了 DriverManager的使用。c3p0 是一个连接池 同样常用还有DBCP 。底层实现都是一样的,就是使用了池化概念,如对象池,线程池。就是先把材料都准备好再开工,所有连接在服务启动之初就初始化好了,用完之后不销毁,等待下一次使用有点像缓存技术。

三、整合mybatis

第一步需要引入如下的依赖,可以在创建项目的时候自动创建

   <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
            <version>2.1.1version>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jdbcartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>

        dependency>

第二步构建与数据库对应的实体类:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Girl {
    private String name;
    private int id;
    private int age;
}

第三步编写mapper层的接口,对数据进行增删改查操作

//Dao层 mybatis中的mapper类
@Repository
@Mapper
public interface GirlMapper {
    //实现增删改查
    List<Girl> getAllgirl();//查询所有用户
    Girl getGirl(int id);//根据id查询
    int addGirl(Girl girl);//增加用户
    int delete(int id);


}

第四步:在resource目录下写与接口对应的xml文件




<mapper namespace="com.zhou.mapper.GirlMapper">
<select id="getAllgirl" resultType="girl">
    select * from mybatis.user
select>
    <insert id="addGirl" parameterType="girl">
        insert into mybatis.user(id,name)values(7,"dandan")
    insert>
    <delete id="delete" parameterType="int">
        delete from mybatis.user where id=#{id}
    delete>
mapper>

此处可以直接子接口类的方法上直接使用注解!!代替xml文件
第五步,需要在配置文件中配置mapper位置和别名

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
mybatis.type-aliases-package=com.zhou.pojo
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml

第六步,编写controller层,可以直接调用dao层(mapper)

@RestController
public class MyController {
   //将dao层注入
    @Autowired
   private GirlMapper girlMapper;
    @GetMapping ("/allgirl")
    public List<Girl> test(){
        List<Girl> allgirl = girlMapper.getAllgirl();
        for (Girl girl : allgirl) {
            System.out.println(girl);
        }
        return allgirl;
    }
    @GetMapping ("/delete/{id}")
    public String test2(@PathVariable(name="id") int id){
        girlMapper.delete(id);
        return "删除成功";
    }
}

测试发现,可以成功!删除采用的是restful风格,简洁明了

你可能感兴趣的:(springboot,mybatis,spring)