SpringBoot整合mybatis-plus+druid組件,實現增刪改查


前言

本篇文章主要介紹的是SpringBoot整合mybatis-plus,實現增刪改查。

GitHub源碼鏈接位於文章底部。

建庫建表

創建springboot數據庫,創建t_user表,字段id主鍵自增,name,age。

工程結構

添加依賴

新建一個maven項目,在pom文件中添加以下依賴

 <!--父級依賴,它用來提供相關的 Maven 默認依賴。
    使用它之后,常用的springboot包依賴可以省去version 標簽
    配置UTF-8編碼,指定JDK8-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath ></relativePath>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- MySQL 連接驅動依賴 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.39</version>
        </dependency>
        <!--mybatis和mybatisplus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatisplus-spring-boot-starter</artifactId>
            <version>1.0.5</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!--自動生成getter/setter插件-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
        </dependency>
        <!-- 模板引擎 代碼生成器使用-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <!--允許maven創建xml文件,否則xml要放在resources里-->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
yml配置文件
server:
  port: 8080

spring:
  datasource:
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8

mybatis-plus:
  mapper-locations: classpath:com/lxg/springboot/dao/mybatisplus/mapper/xml/*Mapper.xml
  typeAliasesPackage: com.lxg.springboot.dao.mybatisplus
  global-config:
    #主鍵類型  0:"數據庫ID自增", 1:"用戶輸入ID",2:"全局唯一ID (數字類型唯一ID)", 3:"全局唯一ID UUID,"該類型為未設置主鍵類型,5, "字符串全局唯一ID"";
    id-type: 0
    db-column-underline: true
    refresh-mapper: true
  #configuration:
    #這個配置會將執行的sql打印出來,在開發或測試的時候可以用
	#log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
主程序入口,啟動類:
@SpringBootApplication
//配置mapper文件位置
@MapperScan("com.lxg.springboot.dao.mybatisplus.mapper")
public class MybatisPlusApplication {
    public static void main(String[] args) {
        SpringApplication.run(MybatisPlusApplication.class, args);
    }
}
代碼生成器
public class CodeGenerator{

    /**
     * @param args
     * @Title: main
     * @Description: 根據數據庫生成表格
     */
    public static void main(String[] args) {
        AutoGenerator mpg = new AutoGenerator();

        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        //代碼存放地址
        gc.setOutputDir( "D://code4" );
        gc.setFileOverride( true );
        // 不需要ActiveRecord 特性的請改為false
        gc.setActiveRecord( false );
        // XML 二級緩存
        gc.setEnableCache( false );
        // XML ResultMap
        gc.setBaseResultMap( true );
        // XML columList
        gc.setBaseColumnList( false );
        // 作者
        gc.setAuthor( "LXG" );

        // 自定義文件命名,注意 %s 會自動填充表實體屬性!
        gc.setControllerName( "%sController" );
        gc.setServiceName( "%sService" );
        gc.setServiceImplName( "%sServiceImpl" );
        gc.setMapperName( "%sMapper" );
        gc.setXmlName( "%sMapper" );
        mpg.setGlobalConfig( gc );

        // 數據源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType( DbType.MYSQL );
        dsc.setDriverName( "com.mysql.jdbc.Driver" );
        dsc.setUsername( "root" );
        dsc.setPassword( "root" );
        dsc.setUrl( "jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL = false&serverTimezone = UTC" );
        mpg.setDataSource( dsc );

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        // 此處可以修改為您的表前綴
        strategy.setTablePrefix( new String[]{"t_"} );
        // 表名生成策略
        strategy.setNaming( NamingStrategy.underline_to_camel );
        // 需要生成的表
        strategy.setInclude( new String[]{"t_user"} );

        strategy.setSuperServiceClass( null );
        strategy.setSuperServiceImplClass( null );
        strategy.setSuperMapperClass( null );

        mpg.setStrategy( strategy );

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent( "com.lxg.springboot.dao.mybatisplus" );
        pc.setController( "controller" );
        pc.setService( "service" );
        pc.setServiceImpl( "service/serviceImpl" );
        pc.setMapper("mapper");
        pc.setEntity( "entity" );
        pc.setXml( "xml" );
        mpg.setPackageInfo( pc );
        // 執行生成
        mpg.execute();
    }
}

MybatisPlus配置,包括分頁插件、打印SQL,打印SQL的代碼只為了測試開發階段使用,生產環境需要注釋掉,否則日志文件過大。

@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {

    /**
     * 分頁插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

    /**
     * 打印 sql
     */
    @Bean
    public PerformanceInterceptor performanceInterceptor() {
        PerformanceInterceptor performanceInterceptor =new PerformanceInterceptor();
        //格式化sql語句
        Properties properties =new Properties();
        properties.setProperty("format", "false");
        performanceInterceptor.setProperties(properties);
        return performanceInterceptor;

    }
}
實體類
@TableName("t_user")
@Data
public class User implements Serializable {
    /** id */
    private String id;
    /** 姓名 */
    private String name;
    /** 年齡 */
    private Integer age;
}
dao層

在mapper文件夾下創建UserMapper,繼承BaseMapper

@Repository
public interface UserMapper extends BaseMapper<User> {
    /**
     * 方法名與映射文件的id一致
     */
    List<User> findByXml();
}

mapper文件夾下創建xml文件夾,存放mapper映射文件,新建UserMapper.xml

<!--對應Mapper的位置-->
<mapper namespace="com.lxg.springboot.dao.mybatisplus.mapper.UserMapper">
    <!--這里的id與Mapper中對應的方法名一致-->
    <select id="findByXml" resultType="User">
        select * from t_user;
    </select>
</mapper>
service層

在service文件夾下創建UserService

public interface UserService {

	/**
	 * 新增
	 *
	 * @param user
	 */
	public void addUser(User user);

	/**
	 * 修改
	 * @param user
	 */
	public void updateUser(User user);

	/**
	 * 根據id刪除
	 * @param id
	 */
	public void deleteUser(String id) ;

	/**
	 * 查詢所有
	 */
	public List<User> findAll();

	/**
	 * 根據id查詢
	 * @param id
	 */
	public User findUserById(String id);

    /**
     * 條件查詢+age排序
     * @param
     */
	public List<User> findSearch(Map searchMap);

    /**
     * 條件+分頁+age排序
     */
	public PageResult<User> findSearch(Map searchMap, int page, int size);

	/**
	 * 通過Xml映射文件查詢
	 */
	public List<User> findByXml();
}

在service文件夾下創建impl文件夾,存放實現類,在impl文件夾下創建UserServiceImpl實現類,實現UserService接口

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    public void addUser(User user) {
        userMapper.insert(user);
    }

    @Override
    public void updateUser(User user) {
        userMapper.updateById(user);
    }

    @Override
    public void deleteUser(String id) {
        userMapper.deleteById(id);
    }

    @Override
    public List<User> findAll() {
        return userMapper.selectList(null);
    }

    @Override
    public User findUserById(String id) {
        return userMapper.selectById(id);
    }

    @Override
    public List<User> findSearch(Map searchMap) {
        EntityWrapper<User> wrapper = createSearchCondition(searchMap);
        //根據age倒序查詢
        wrapper.orderBy(true, "age", false);
        return userMapper.selectList(wrapper);
    }

    @Override
    public PageResult<User> findSearch(Map searchMap, int page, int size) {
        EntityWrapper<User> wrapper = createSearchCondition(searchMap);
        //根據age倒序查詢
        wrapper.orderBy(true, "age", false);
        Page<User> userPage = new Page<>(page,size);
        List<User> list = userMapper.selectPage(userPage, wrapper);
        return new PageResult<>(userPage.getTotal(),list);
    }

    @Override
    public List<User> findByXml() {
        return userMapper.findByXml();
    }

    /**
     * 構造查詢條件
     * @param searchMap
     * @return
     */
    public EntityWrapper<User> createSearchCondition(Map searchMap) {
        EntityWrapper<User> wrapper = new EntityWrapper<>(new User());
        if (searchMap.get("name") != null) {
            wrapper.eq("name", searchMap.get("name"));
        }
        if (searchMap.get("age") != null) {
            wrapper.eq("age", searchMap.get("age"));
        }
        return wrapper;
    }
}
controller層

在controller文件夾下創建UserController

@RestController
@RequestMapping(value = "/user")
public class UserController {
    @Autowired
    private UserService userService;

    /**
     * 新增
     * @param user
     */
    @RequestMapping(method = RequestMethod.POST)
    public Result addUser(@RequestBody User user) {
        userService.addUser(user);
        return new Result(true, StatusCode.OK,"新增成功");
    }

    /**
     * 根據id修改
     * @param user
     */
    @RequestMapping(method = RequestMethod.PUT)
    public Result updateUser(@RequestBody User user) {
        if (user.getId() == null || user.getId().equals("")) {
            return new Result(false, StatusCode.ERROR,"無id,更新失敗");
        }
        userService.updateUser(user);
        return new Result(true, StatusCode.OK,"更新成功");
    }

    /**
     * 根據id刪除
     * @param id
     * @return
     */
    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
    public Result delete(@PathVariable String id) {
        userService.deleteUser(id);
        return new Result(true, StatusCode.OK,"刪除成功");
    }

    /**
     * 查詢所有
     */
    @RequestMapping(method = RequestMethod.GET)
    public List<User> findAllUser() {
        return userService.findAll();
    }

    /**
     * 根據id查詢
     * @param id
     */
    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public Result findByUserId(@PathVariable String id) {
        return new Result(true, StatusCode.OK,"查詢成功",userService.findUserById(id));
    }

    /**
     * 條件查詢
     */
    @RequestMapping(value="/search",method = RequestMethod.POST)
    public Result findSearch(@RequestBody Map searchMap){
        return new Result(true,StatusCode.OK,"查詢成功 ",userService.findSearch(searchMap));
    }

    /**
     * 條件+分頁
     * @param searchMap
     * @param page
     * @param size
     */
    @RequestMapping(value = "/search/{page}/{size}",method = RequestMethod.POST)
    public Result findSearch(@RequestBody Map searchMap, @PathVariable int page, @PathVariable int size){
        return new Result(true,StatusCode.OK,"查詢成功",userService.findSearch(searchMap,page,size));
    }

    /**
     * 通過Xml查詢成功
     * @return
     */
    @RequestMapping(value = "/findByXml",method = RequestMethod.GET)
    public Result findByXml(){
        return new Result(true,StatusCode.OK,"XML查詢成功",userService.findByXml());
    }
}

整合durid連接池

pom文件中增加依賴

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

這種形式只需要在yml配置文件中增加一些配置即可,不用再寫配置類了。

spring:
  datasource:
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8
    type: com.alibaba.druid.pool.DruidDataSource
    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
      #申請連接的時候檢測,建議配置為true,不影響性能,並且保證安全
      test-while-idle: true
      #獲取連接時執行檢測,建議關閉,影響性能
      test-on-borrow: false
      #歸還連接時執行檢測,建議關閉,影響性能
      test-on-return: false
      #是否開啟PSCache,PSCache對支持游標的數據庫性能提升巨大,oracle建議開啟,mysql下建議關閉
      pool-prepared-statements: true
      #開啟poolPreparedStatements后生效
      max-pool-prepared-statement-per-connection-size: 20
      #配置擴展插件,常用的插件有=>stat:監控統計  log4j:日志  wall:防御sql注入
      filters: stat,wall,slf4j
      #打開mergeSql功能;慢SQL記錄
      connection-properties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
      #配置DruidStatFilter
      web-stat-filter:
        enabled: true
        url-pattern: "/*"
        exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
      #配置DruidStatViewServlet
      stat-view-servlet:
        url-pattern: "/druid/*"
        #IP白名單(沒有配置或者為空,則允許所有訪問)
        allow: 127.0.0.1,192.168.163.1
        #IP黑名單 (存在共同時,deny優先於allow)
        deny: 192.168.1.73
        # 禁用HTML頁面上的“Reset All”功能
        reset-enable: false
        #登錄名
        login-username: root
        #登錄密碼
        login-password: root

啟動程序后,訪問localhost:8080/druid ,輸入配置的賬號密碼即可登錄可視化監控界面。

測試

參考https://www.lxgblog.com/article/1572258314 文章末測試部分

本文GitHub源碼:https://github.com/lixianguo5097/springboot/tree/master/springboot-mybatisPlus

CSDN:https://blog.csdn.net/qq_27682773
簡書:https://www.jianshu.com/u/e99381e6886e
博客園:https://www.cnblogs.com/lixianguo
個人博客:https://www.lxgblog.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM