1. 整合Mybatis框架
配套视频:【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili
【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili
springboot 微框架 = spring 工厂 + springmvc 控制器 微:快速开发框架 通过遵守默认约定 简化项目中样板化配置 数据库访问框架: hibernate jpa mybatis(框架) 回顾: spring框架如何整合mybatis? 1.引入依赖 spring 相关 mysql 相关 驱动 数据源 mybatis 相关 mybatis核心jar mybatis和spring框架整合 2.spring.xml a.开启注解扫描 b.创建数据源对象 注入 指定使用那种数据源类型 注入dirverClassName 注入url 注入username password c.创建sqlSessionFactory 注入 数据源 注入mapper配置文件位置 注入实体别名包 d.创建Dao对象 注入SqlSessionFactory 以及Dao接口所在包 e.创建事务管理器 DataSourceTranacationManager 注入 数据源对象 f.在业务层组件上加入事务注解 @Transacational <tx:annotation-driven transaction-manager="transactionManager"/> 3.测试 1).建表 2).开发实体类 3).开发DAO接口 4).开发Mapper配置文件 5).开发Service接口 6).开发ServiceImpl实现类 7).测试ServiceImpl =========================================================================== springboot框架中如何整合mybatis框架? 1.引入依赖 spring-boot-stater-web mysql相关 mysql驱动 druid数据源 mybatis相关的 (mybatis-spring-boot-stater) 依赖 (mybatis mybatis-spring) 2.书写配置 a.开启注解扫描 @SpringBootApplication @ComponentScan 省略 b.创建数据源 1.指定数据源类型 2.指定数据库驱动 3.指定url 4.指定username 5.指定password c.创建SqlSessionFactory 1.指定mapper配置文件位置 2.指定实体所在包位置 起别名 d.创建DAO 1.指定DAO接口所在包 e.创建事务管理器 开启注解式事务生效 省略 3.测试 1).建表 2).开发实体类 3).开发DAO接口 4).开发Mapper配置文件 5).开发Service接口 6).开发ServiceImpl实现类 7).测试ServiceImpl
1.1 引入依赖
<!--druid--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.4</version> </dependency> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!--mybatis-spring-boot-starter--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency>
1.2 application.yml编写相关配置
# 公共配置 server: port: 8888 # 修改内置tomcat端口号 servlet: context-path: /spring-boot-day03 # 数据源相关配置 spring: datasource: type: com.alibaba.druid.pool.DruidDataSource # 指定连接池类型 driver-class-name: com.mysql.jdbc.Driver # mysql 5.x版本驱动 # driver-class-name: com.mysql.cj.jdbc.Driver # mysql 8.x版本驱动 url: jdbc:mysql://localhost:3306/bootssm?characterEncoding=UTF-8 # 指定url username: root # 指定用户名和密码 password: 123456 # 指定密码 # mybatis相关配置 mybatis: mapper-locations: classpath:com/study/mapper/*.xml # 指定mapper配置文件位置 type-aliases-package: com.study.entity # 指定实体类的包名,默认别名:类名或类名首字母小写两种
1.3 启动类添加注解扫描
package com.study; import org.apache.ibatis.annotations.Mapper; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; //入口类加入如下配置: @SpringBootApplication /** * @Mapper 注解 * 修饰范围:只能放在DAO接口上 * 作用:用来在工厂中创建DAO对象 */ //@Mapper /** * @MapperScan 注解 * 修饰范围:用在类上 * 作用:用来扫描DAO接口所在包,同时将所有DAO接口在工厂中创建对象 */ @MapperScan("com.study.dao") public class SpringBootDay03Application { public static void main(String[] args) { SpringApplication.run(SpringBootDay03Application.class, args); } }
1.4 建表
CREATE DATABASE IF NOT EXISTS bootssm; USER bootssm; CREATE TABLE IF NOT EXISTS t_user( id INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', name VARCHAR(40) COMMENT '姓名', birthday TIMESTAMP COMMENT '生日', salary DOUBLE(10,2) COMMENT '工资', PRIMARY KEY(id) )ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
1.5 开发实体类
package com.study.entity; import java.util.Date; /** * @ClassName User * @Description TODO * @Author Jiangnan Cui * @Date 2022/5/3 10:02 * @Version 1.0 */ public class User { private Integer id; private String name; private Date birthday; private Double salary; public User() { } public User(Integer id, String name, Date birthday, Double salary) { this.id = id; this.name = name; this.birthday = birthday; this.salary = salary; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", birthday=" + birthday + ", salary=" + salary + '}'; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Double getSalary() { return salary; } public void setSalary(Double salary) { this.salary = salary; } }
1.6 开发DAO接口以及Mapper映射文件
package com.study.dao; import com.study.entity.User; import java.util.List; /** * @ClassName UserDAO * @Description TODO * @Author Jiangnan Cui * @Date 2022/5/3 10:04 * @Version 1.0 */ public interface UserDAO { /** * @MethodName findAll * @Description 查询所有用户信息 * @return: java.util.List<com.study.entity.User> * @Author Jiangnan Cui * @Date 2022/5/3 10:04 */ List<User> findAll(); /** * @MethodName save * @Description 保存用户信息 * @param: user * @Author Jiangnan Cui * @Date 2022/5/3 10:05 */ void save(User user); }
<?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.study.dao.UserDAO"> <!--findAll--> <select id="findAll" resultType="User"> select id,name,birthday,salary from t_user </select> <!--save--> <insert id="save" parameterType="User" useGeneratedKeys="true" keyProperty="id"> insert into t_user values(#{id},#{name},#{birthday},#{salary}) </insert> </mapper>
1.7 开发Service以及实现类
package com.study.service; import com.study.entity.User; import java.util.List; /** * @ClassName UserService * @Description TODO * @Author Jiangnan Cui * @Date 2022/5/3 10:06 * @Version 1.0 */ public interface UserService { /** * @MethodName findAll * @Description 查询所有用户信息 * @return: java.util.List<com.study.entity.User> * @Author Jiangnan Cui * @Date 2022/5/3 10:04 */ List<User> findAll(); /** * @MethodName save * @Description 保存用户信息 * @param: user * @Author Jiangnan Cui * @Date 2022/5/3 10:05 */ void save(User user); }
package com.study.service; import com.study.dao.UserDAO; import com.study.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.util.List; /** * @ClassName UserServiceImpl * @Description TODO * @Author Jiangnan Cui * @Date 2022/5/3 10:10 * @Version 1.0 */ @Service("userService") @Transactional public class UserServiceImpl implements UserService{ private UserDAO userDAO; @Autowired public UserServiceImpl(UserDAO userDAO) { this.userDAO = userDAO; } @Override @Transactional(propagation = Propagation.SUPPORTS) public List<User> findAll() { return userDAO.findAll(); } @Override public void save(User user) { userDAO.save(user); } }
1.8 开发Controller
package com.study.controller; import com.study.entity.User; import com.study.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * @ClassName UserController * @Description TODO * @Author Jiangnan Cui * @Date 2022/5/3 10:12 * @Version 1.0 */ @RestController @RequestMapping("user") public class UserController { private UserService userService; @Autowired public UserController(UserService userService) { this.userService = userService; } /** * @MethodName findAll * @Description 查询所有用户信息 * @return: java.util.List<com.study.entity.User> * @Author Jiangnan Cui * @Date 2022/5/3 10:14 */ @RequestMapping("findAll") public List<User> findAll(){ return userService.findAll(); } /** * @MethodName save * @Description 添加用户信息 * @param: user * @Author Jiangnan Cui * @Date 2022/5/3 10:15 */ @RequestMapping("save") public void save(User user){ userService.save(user); } }