SpringBoot学习之应用开发篇(二)1.2 - 操作数据库表

目录

一、使用MyBatis操作SQL

1、pom.xml引入依赖

2、application-dev.properties 数据源配置

3、创建测试使用的表

4、测试配置

5、测试

二、使用JdbcTemplate操作SQL

1、pom.xml引入依赖

2、数据源配置(同上)

3、测试配置

4、测试


一、使用MyBatis操作SQL

1、pom.xml引入依赖

mybatis最新版本jar包依赖:http://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/index.html

druid最新版本jar包依赖:https://mvnrepository.com/artifact/com.alibaba/druid

<!-- MyBatis依赖:持久层框架,简化了持久层的开发 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>

<!-- Druid数据源:连接池配置 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.22</version>
</dependency>

<!-- MySql依赖 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

2、application-dev.properties 数据源配置

① mysql服务配置:https://blog.csdn.net/liyb1078422974/article/details/109676322

② ip服务器地址,port对外端口,database数据库名,需要自己替换

# 数据源基本配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://ip:port/database?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=admin
spring.datasource.password=admin

# ######################## Druid数据源配置 ########################
# 初始连接数
spring.datasource.druid.initial-size=5
# 最小连接池数量
spring.datasource.druid.minIdle = 5
# 最大连接池数量
spring.datasource.druid.max-active=20
# 配置获取连接等待超时的时间,单位是毫秒
spring.datasource.druid.max-wait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
spring.datasource.druid.max-evictable-idle-time-millis=900000
# 配置检测连接是否有效
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
# 在检查闲置连接时同时检查连接可用性
spring.datasource.druid.test-while-idle=true
# 获取连接时,是否测试有效
spring.datasource.druid.test-on-borrow=false
# 归还连接时,是否测试有效
spring.datasource.druid.test-on-return=false
# 打开PSCache,并且指定每个连接上PSCache的大小【在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。】
spring.datasource.druid.pool-prepared-statements=true
# 最大statement缓存
spring.datasource.druid.max-open-prepared-statements=20
# 最大连接池的statement每个连接缓存大小
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
# 配置监控统计拦截的filters, 去掉后监控界面sql无法统计, 'wall'用于防火墙(stat监控统计,slf4j日志监控,wall防御sql注入)
spring.datasource.druid.filters=stat,wall
# Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
spring.datasource.druid.aop-patterns=org.springboot.springboot01.service.*

# ######################## WebStatFilter配置 ########################
# 是否启动过滤器
spring.datasource.druid.web-stat-filter.enabled=true
# 添加过滤规则
spring.datasource.druid.web-stat-filter.url-pattern=/*
# 忽略过滤的格式
spring.datasource.druid.web-stat-filter.exclusions='*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'

# ######################## StatViewServlet配置 ########################
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.reset-enable=false
# 配置后,则需要账号密码才能访问控制台
spring.datasource.druid.stat-view-servlet.login-username=druid
spring.datasource.druid.stat-view-servlet.login-password=druid123
# IP白名单
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
# IP黑名单(共同存在时,deny优先于allow)
spring.datasource.druid.stat-view-servlet.deny=192.168.50.1

# ######################## 配置StatFilter ########################
spring.datasource.druid.filter.stat.log-slow-sql=true

# ######################## 如果使用xml方式操作sql,还需要额外的一些配置
# 别名配置,可以简化xml中的实体类引用方式,直接用名称替代全路径
mybatis.type-aliases-package=org.springboot.springboot01.bean
# 驼峰命名规范,为true时,能识别到userName和username
mybatis.configuration.map-underscore-to-camel-case=true
# mapper映射文件(在resources下)
mybatis.mapper-locations=classpath*:org/springboot/springboot01/mapper/*.xml

3、创建测试使用的表

注:当mysql安装时,配置的是大小写敏感就要注意表的大小写。如下

lower_case_table_names = 0 表名存储为给定的大小和比较是区分大小写的

lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写

lower_case_table_names = 2 表名存储为给定的大小写但是比较的时候是小写的

-- 学生表
CREATE TABLE student (
    id   int(11) not null AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(32) NOT NULL,
    sex  CHAR(1) NOT NULL comment '0男, 1女'
);
INSERT INTO student VALUES (1, 'zhangsan', '0');
INSERT INTO student VALUES (2, 'feifei', '1');
INSERT INTO student VALUES (3, 'wangwu', '0 ');

4、测试配置

4-1、新增org.springboot.springboot01.bean、org.springboot.springboot01.mapper、org.springboot.springboot01.service和org.springboot.springboot01.service.impl的包名,并在它们包下在增加各自的内容。

// 在org.springboot.springboot01.bean下,增加实体类Student
public class Student {
    private Integer id;
    private String name;
    private String sex;
    
    // get、set省略......
}

// 在org.springboot.springboot01.mapper下,增加StudentMapper持久操作
@Component
@Mapper
public interface StudentMapper {
    @Insert("insert into student(name, sex) values(#{name, jdbcType=VARCHAR}, #{sex, jdbcType=VARCHAR})")
    int add(Student student);

    @Update({
            "update student",
            "set name = #{name, jdbcType=VARCHAR}, sex = #{sex, jdbcType=VARCHAR} ",
            "where id = #{key, jdbcType=INTEGER}"
    })
    int update(Student student);

    @Delete("delete from student where id = #{key, jdbcType=INTEGER}")
    int deleteByKey(Integer key);

    @Select("select * from student where id = #{key, jdbcType=INTEGER}")
    @Results(id = "student",value= {
            @Result(property = "id", column = "id", javaType = Integer.class),
            @Result(property = "name", column = "name", javaType = String.class),
            @Result(property = "sex", column = "sex", javaType = String.class)
    })
    Student findOneByKey(Integer key);
}

// 在org.springboot.springboot01.service下,增加接口StudentService 
public interface StudentService {
    int add(Student student);

    int update(Student student);

    Student findOneByKey(Integer key);

    int deleteByKey(Integer key);
}

// 在org.springboot.springboot01.service.impl下,增加实现类StudentServiceImpl
@Service
public class StudentServiceImpl implements StudentService {

    @Resource
    private StudentMapper studentMapper;

    @Override
    public int add(Student student) {
        return studentMapper.add(student);
    }

    @Override
    public int update(Student student) {
        return studentMapper.update(student);
    }

    @Override
    public Student findOneByKey(Integer key) {
        return studentMapper.findOneByKey(key);
    }

    @Override
    public int deleteByKey(Integer key) {
        return studentMapper.deleteByKey(key);
    }
}

4-2、在org.springboot.springboot01.controller包下的TestController类中,加入测试方法

@RestController
public class TestController {
    @Resource
    private StudentService studentService;

    // @RequestParam(required = true) 表名id必传
    @RequestMapping("/getStudentById")
    public Student getStudentById(@RequestParam(required = true) Integer id) {
        return studentService.findOneByKey(id);
    }
}

4-3、整个项目结构

5、测试

5-1、启动后,可访问这个地址:http://127.0.0.1:8080/springboot/getStudentById?id=1

5-2、查看sql监控情况:http://127.0.0.1:8080/springboot/druid/login.html

    密码、账号application-dev.propertiesi配置中

登录后,如下所示

5-3、在操作数据库表时,可以通过【SQL监控】查看执行的情况

二、使用JdbcTemplate操作SQL

说明:使用JDBC操作sql坑比较多,还是倾向于使用Mybatis。

1、pom.xml引入依赖

<!-- jdbc使用Hibernate框架 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

2、数据源配置(同上)

3、测试配置

3-1、新增org.springboot.springboot01.dao和org.springboot.springboot01.dao.impl包名,并在它们包下在增加各自的内容。

// 在org.springboot.springboot01.dao包名下,新增接口StudentDao
public interface StudentDao {
    /**
     * 查询所有学生信息
     * 
     * @return List<Student>
     */
    List<Student> listStudent();
}

// 在org.springboot.springboot01.dao.impl包名下,新增接口StudentDaoImpl
@Repository
public class StudentDaoImpl implements StudentDao {

    @Resource
    private JdbcTemplate jdbcTemplate;

    @Override
    public List<Student> listStudent() {
        String sql = "select * from student";
        return jdbcTemplate.query(sql, new Object[]{}, new BeanPropertyRowMapper(Student.class));
    }
}

// 其它原有的包下的接口、实现类,加入方法
public interface StudentService {
    // 省略...... 原有的方法
    List<Student> listStudent();
}

@Service
public class StudentServiceImpl implements StudentService {
    // 省略...... 原有的引用
    @Resource
    private StudentDao studentDao;

    // 省略...... 原有的方法
    @Override
    public List<Student> listStudent() {
        return studentDao.listStudent();
    }
}

3-2、在org.springboot.springboot01.controller包下的TestController类中,加入测试方法

@RestController
public class TestController {

    // 省略原有引用......
    @Resource
    private StudentService studentService;

    // 省略原有方法......
    @RequestMapping("/listStudent")
    public List<Student> listStudent() {
        return studentService.listStudent();
    }
}

3-3、整个项目结构

4、测试

地址:http://127.0.0.1:8080/springboot/listStudent

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员的微笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值