SpringBoot 整合mybatis實現數據庫訪問

1.環境

springBoot版本 2.0.1

2.引入依賴

		
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.2</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.9</version>
</dependency>

3.配置屬性

配置連接數據庫、數據庫連接池、以及mybatis整合

server:
  port: 8080

spring:
    datasource:
        name: mysql_test
        type: com.alibaba.druid.pool.DruidDataSource
        #druid相關配置
        druid:
          #監控統計攔截的filters
          filters: stat
          driver-class-name: com.mysql.jdbc.Driver
          #基本屬性
          url: jdbc:mysql://127.0.0.1:3306/mytest?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
          username: root
          password: 123456
          #配置初始化大小/最小/最大
          initial-size: 5
          min-idle: 5
          max-active: 30
          #獲取連接等待超時時間
          max-wait: 70000
          #間隔多久進行一次檢測,檢測需要關閉的空閒連接
          time-between-eviction-runs-millis: 60000
          #一個連接在池中最小生存的時間
          min-evictable-idle-time-millis: 300000
          validation-query: SELECT 'x'
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          #打開PSCache,並指定每個連接上PSCache的大小。oracle設爲true,mysql設爲false。分庫分表較多推薦設置爲false
          pool-prepared-statements: false
          max-pool-prepared-statement-per-connection-size: 20

mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.winterchen.model

經過以上步驟,Spring Boot整合mybatis已經完成,下面開始測試

4.創建sql的語句

DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`  (
  `userId` int(11) NOT NULL AUTO_INCREMENT,
  `userName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`userId`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1000 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

5.實體類

public class UserDomain {
    private Integer userId;

    private String userName;

    private String password;

    private String phone;
    
    getter/setter ......
}

6.Mapper接口和映射文件

public interface UserDao {


    int insert(UserDomain record);



    List<UserDomain> selectUsers();
}
<sql id="BASE_TABLE">
    t_user
  </sql>

  <sql id="BASE_COLUMN">
    userId,userName,password,phone
  </sql>

  <insert id="insert" parameterType="com.winterchen.model.UserDomain">
    INSERT INTO
      <include refid="BASE_TABLE"/>
    <trim prefix="(" suffix=")" suffixOverrides=",">
      userName,password,
      <if test="phone != null">
        phone,
      </if>
    </trim>
    <trim prefix="VALUES(" suffix=")" suffixOverrides=",">
      #{userName, jdbcType=VARCHAR},#{password, jdbcType=VARCHAR},
      <if test="phone != null">
        #{phone, jdbcType=VARCHAR},
      </if>
    </trim>
  </insert>

  <select id="selectUsers" resultType="com.winterchen.model.UserDomain">
      SELECT
        <include refid="BASE_COLUMN"/>
      FROM
        <include refid="BASE_TABLE"/>
  </select>

7.Service實現

public interface UserService {

    int addUser(UserDomain user);

    PageInfo<UserDomain> findAllUser(int pageNum, int pageSize);
}
@Service(value = "userService")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    public int addUser(UserDomain user) {

        return userDao.insert(user);
    }
    
    @Override
    public List<UserDomain> findAllUser() {
        List<UserDomain> userDomains = userDao.selectUsers();
        return userDomains;
    }
}

Service實現類不要玩了加@Service註解,不然Spring容器掃描不到,會報錯。

8.Controller

@Controller
@RequestMapping(value = "/user")
public class UserController {

    @Autowired
    private UserService userService;

    @ResponseBody
    @PostMapping("/add")
    public int addUser(UserDomain user){
        return userService.addUser(user);
    }

    @ResponseBody
    @GetMapping("/all")
    public Object findAllUser(
            @RequestParam(name = "pageNum", required = false, defaultValue = "1")
                    int pageNum,
            @RequestParam(name = "pageSize", required = false, defaultValue = "10")
                    int pageSize){
        return userService.findAllUser(pageNum,pageSize);
    }
}

通過postman測試通過。

如果在瀏覽器測試的話,@Controller需要改爲@RestController,否則會報錯,因爲沒有整合模板。

@PostMapping也需要改爲@GetMapping,瀏覽器不支持直接post請求。

說明:

整合之後,如果啓動報如下錯誤:

Caused by: java.lang.ClassNotFoundException: org.apache.ibatis.session.SqlSessionFactory

說明mybatis包沒有引入

默認mybatis-spring-boot-starter包應該會導入,但是不知道爲什麼實驗時候沒有導入,所以導致會報上面的錯誤。

只需要自己手動導入mybatis包即可

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.0</version>
</dependency>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章