項目路徑: https://github.com/zhaopeng01/springboot-study/tree/master/study9
Mybatis是對jdbc的封裝,他讓數據庫底層操作變得透明,Mybatis操作都是圍繞一個sqlsessionFactory實例開展,Mybatis通過配置文件關聯到各實體類的Mapper文件,Mapper文件中配置了每個類對數據庫所需進行的sql語句映射,在每次與數據庫交互時,通過sqlSessionFactory,拿到sqlSession,在執行sql命令
本文是基於SpringBoot 2.x 以上版本進行的整合
添加了一些其他的功能
PageHelper
分頁插件
搭建
添加基本依賴
其他依賴
在基本依賴後面添加一些其他依賴
<!--添加其他依賴-->
<!-- 分頁插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
<!-- alibaba的druid數據庫連接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.9</version>
</dependency>
目錄結構:
在啓動類中使用@MapperScan
@MapperScan
可以指定要掃描的Mapper類的包的路徑
package com.zyc;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.zyc.mapper")
public class Study9Application {
public static void main(String[] args) {
SpringApplication.run(Study9Application.class, args);
}
}
配置文件
我這裏用的是yml
,這裏也可以根據自己喜歡的用properties
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/zyc?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
username: root
password: 123456
#配置初始化大小/最小/最大
initial-size: 1
min-idle: 1
max-active: 20
#獲取連接等待超時時間
max-wait: 60000
#間隔多久進行一次檢測,檢測需要關閉的空閒連接
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
## 該配置節點爲獨立的節點,有可能容易將這個配置放在spring的節點下,導致配置無法被識別
mybatis:
mapper-locations: classpath:mapper/*.xml #注意:一定要對應mapper映射xml文件的所在路徑
type-aliases-package: com.zyc.model # 注意:對應實體類的路徑
#pagehelper
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
returnPageInfo: check
創建表
CREATE TABLE users(
userId INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
userName VARCHAR(255) NOT NULL ,
password VARCHAR(255) NOT NULL ,
phone VARCHAR(255) NOT NULL
) ENGINE=INNODB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;
實體類
package com.zyc.entity;
public class Users {
private Integer userId;
private String userName;
private String password;
private String phone;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
創建Mapper
package com.zyc.mapper;
import com.zyc.entity.Users;
import java.util.List;
public interface UserMapper {
int insert(Users users);
List<Users> selectUsers();
}
創建映射文件
<?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.zyc.mapper.UserMapper">
<sql id="BASE_TABLE">
users
</sql>
<sql id="BASE_COLUMN">
userId,userName,password,phone
</sql>
<insert id="insert" parameterType="com.zyc.entity.Users">
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.zyc.entity.Users">
SELECT
<include refid="BASE_COLUMN"/>
FROM
<include refid="BASE_TABLE"/>
</select>
</mapper>
在這裏
namespace
一定要對應自己的mapper接口對應的包路徑
service接口
package com.zyc.service;
import com.github.pagehelper.PageInfo;
import com.zyc.entity.Users;
public interface UserService {
int addUser(Users user);
PageInfo<Users> findAllUser(int pageNum, int pageSize);
}
service實現類
package com.zyc.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zyc.entity.Users;
import com.zyc.mapper.UserMapper;
import com.zyc.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public int addUser(Users user) {
return userMapper.insert(user);
}
/*
* 在service層傳入參數,然後將參數傳遞給一個插件的一個靜態方法即可;
* pageNum 開始頁數
* pageSize 每頁顯示的數據條數
* */
@Override
public PageInfo<Users> findAllUser(int pageNum, int pageSize) {
//將參數傳給這個方法就可以實現物理分頁了,非常簡單。
PageHelper.startPage(pageNum, pageSize);
List<Users> userDomains = userMapper.selectUsers();
PageInfo result = new PageInfo(userDomains);
return result;
}
}
controller
package com.zyc.controller;
import com.zyc.entity.Users;
import com.zyc.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
/**
* @Description: 測試用戶controller
* @author zhaopeng
* @email [email protected]
*/
@Controller
@RequestMapping(value = "/user")
public class UserController {
@Autowired
private UserService userService;
@ResponseBody
@PostMapping("/add")
public int addUser(@RequestBody Users 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
來進行的測試
添加一條數據
查詢數據
好的到這裏本篇文章就先到此了,創作不易,如果那裏有不合適的地方還請大家多多指教,寫這篇博的目的主要就是爲了方便自己以後的一個回憶和朋友學習時的一個參考,希望爲大家可以帶來幫助 ~ ~&
虛心的去學習,自信的去工作~