1. 程式人生 > >SpringBoot學習(一):整合myBaits

SpringBoot學習(一):整合myBaits

.net nbsp glin llc 數據庫表 逆向 del 情況下 rac

##本章節包含springboot項目創建,mybatis自動生成代碼及配置項,以及兩者整合。

##開發環境:IDEA2018.2.6 ,JDK1.8 ,mysql5.7 (window10)

第一步:新建數據庫及數據表

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘用戶id‘,
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT ‘用戶名‘,
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT ‘密碼‘,
PRIMARY KEY (`user_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

INSERT INTO `users` VALUES (1, ‘admin‘, ‘admin‘);
INSERT INTO `users` VALUES (2, ‘root‘, ‘root‘);

第二步:創建springboot工程,話不多說,有圖有真相:

技術分享圖片 技術分享圖片 技術分享圖片

第三步:根據數據庫表使用mybatis-generator反向生成代碼

(參考:https://blog.csdn.net/qq_40307945/article/details/81351302):

3.1 引入依賴(註意:引入位置是在plugins標簽下

<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>

3.2 修改自動生成代碼的配置文件,文件路徑:main/resource/generatorConfig.xml、db.properties

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
<!--導入屬性配置-->
<properties resource="db.properties"></properties>

<!-- 指定數據庫驅動的jdbc驅動jar包的位置 -->
<classPathEntry location="${db.driverLocation}" />

<!-- context 是逆向工程的主要配置信息 -->
<!-- id:起個名字 -->
<!-- targetRuntime:設置生成的文件適用於那個 mybatis 版本 -->
<context id="default" targetRuntime="MyBatis3">

<!--optional,旨在創建class時,對註釋進行控制-->
<commentGenerator>
<property name="suppressDate" value="true" />
<!-- 是否去除自動生成的註釋 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>

<!--jdbc的數據庫連接-->
<jdbcConnection driverClass="${db.driverClassName}"
connectionURL="${db.url}"
userId="${db.username}"
password="${db.password}">
</jdbcConnection>

<!--非必須,類型處理器,在數據庫類型和java類型之間的轉換控制-->
<javaTypeResolver>
<!-- 默認情況下數據庫中的 decimal,bigInt 在 Java 對應是 sql 下的 BigDecimal 類 -->
<!-- 不是 double 和 long 類型 -->
<!-- 使用常用的基本類型代替 sql 包下的引用類型 -->
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>

<!-- targetPackage:生成的實體類所在的包 -->
<!-- targetProject:生成的實體類所在的硬盤位置 -->
<javaModelGenerator targetPackage="com.ifenglin.learn.entity"
targetProject=".\src\main\java">
<!-- 是否允許子包 -->
<property name="enableSubPackages" value="false" />
<!-- 是否對modal添加構造函數 -->
<property name="constructorBased" value="true" />
<!-- 是否清理從數據庫中查詢出的字符串左右兩邊的空白字符 -->
<property name="trimStrings" value="true" />
<!-- 建立model對象是否不可改變 即生成的model對象不會有setter方法,只有構造方法 -->
<property name="immutable" value="false" />
</javaModelGenerator>

<!-- targetPackage 和 targetProject:生成的 mapper 文件的包和位置 -->
<sqlMapGenerator targetPackage="mapper" targetProject="./src/main/resources">
<!-- 針對數據庫的一個配置,是否把 schema 作為字包名 -->
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>

<!-- targetPackage 和 targetProject:生成的 interface 文件的包和位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.ifenglin.learn.dao" targetProject=".\src\main\java">
<!-- 針對 oracle 數據庫的一個配置,是否把 schema 作為字包名 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<table tableName="users" domainObjectName="User"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false">
</table>
</context>
</generatorConfiguration>
db.driverLocation=D:\\java\\apache-maven-3.5.4\\repo\\mysql\\mysql-connector-java\\8.0.13\\mysql-connector-java-8.0.13.jar
db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://127.0.0.1:3306/learn?characterEncoding=utf-8
db.username=root
db.password=123456

3.3 代碼生成

Run-> EditConfigurations: 左上角+,添加maven項目,按下圖填入內容,運行generatorCode,生成dao\UserMapper.java 、 entity\User.java以及 resources\mapper\UserMapper.xml,這裏就不貼代碼了。

技術分享圖片

註意:在UserMapper.java類名上添加@Mapper註解

package com.ifenglin.learn.dao;

import com.ifenglin.learn.entity.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;

@Mapper
public interface UserMapper {
int deleteByPrimaryKey(Integer userId);

int insert(User record);

int insertSelective(User record);

User selectByPrimaryKey(Integer userId);

int updateByPrimaryKeySelective(User record);

int updateByPrimaryKey(User record);

List<User> selectAll();
}

第四步:創建controller service

package com.ifenglin.learn.controller;

import com.ifenglin.learn.entity.User;
import com.ifenglin.learn.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;

@RestController
@RequestMapping("/user")
public class UserController {

@Autowired
private UserService userService;

@RequestMapping("/getALlUsers")
public List<User> getALlUsers(){
return userService.getAllUsers();
}
}
package com.ifenglin.learn.service;
import com.ifenglin.learn.entity.User;
import java.util.List;

public interface UserService {

User getUserById(Integer userId);
List<User> getAllUsers();
int updateUser(User user);
int addUser(User user);
int deleteUserById(Integer userId);
}
package com.ifenglin.learn.service.impl;

import com.ifenglin.learn.dao.UserMapper;
import com.ifenglin.learn.entity.User;
import com.ifenglin.learn.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 User getUserById(Integer userId) {
return userMapper.selectByPrimaryKey(userId);
}

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

@Override
public int updateUser(User user) {
return userMapper.updateByPrimaryKey(user);
}

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

@Override
public int deleteUserById(Integer userId) {
return userMapper.deleteByPrimaryKey(userId);
}
}

第五步:修改application.yml

server:
port: 8080

spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/learn?characterEncoding=utf-8&serverTimezone=UTC
##此處須註意,本項目未采用連接池,不需用data-user-name、data-password、driver-class-name
    userName: root
password: 123456
##com.mysql.cj.jdbc.Driver為新版mysql-connector-java驅動類
driverClassName: com.mysql.cj.jdbc.Driver


mybatis:
typeAliasesPackage: com.ifenglin.learn.entity
mapperLocations: classpath:mapper/*Mapper.xml

整體代碼結構:

技術分享圖片

至此,代碼完成,運行並在瀏覽器中輸入:http://127.0.0.1:8080/user/getAllUsers 。效果如圖:

技術分享圖片

SpringBoot學習(一):整合myBaits