摘要:如要運行多次,請把上次生成的映射文件代碼刪除再運行。層啟動類掃描接口,必須加上提一嘴,這個注解非常的關鍵,這個對應了項目中所對應的包路徑,必須加上,否則會導致異常。另外,關注之后在發送可領取免費學習資料。
微信公眾號:一個優秀的廢人前言
如有問題或建議,請后臺留言,我會盡力解決你的問題。
如題,今天介紹 SpringBoot 與 Mybatis 的整合以及 Mybatis 的使用,之前介紹過了 SpringBoot 整合MyBatis 注解版的使用,上一篇介紹過 MyBatis 的理論,今天這篇就不介紹 MyBatis 的理論了,有興趣的跳轉閱讀:SpringBoot 實戰 (十三) | 整合 MyBatis (注解版)
準備工作SpringBoot 2.1.3
IDEA
JDK 8
創建表CREATE TABLE `student` ( `id` int(32) NOT NULL AUTO_INCREMENT, `student_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "學號", `name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "姓名", `age` int(11) NULL DEFAULT NULL COMMENT "年齡", `city` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "所在城市", `dormitory` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT "宿舍", `major` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT "專業", PRIMARY KEY (`id`) USING BTREE )ENGINE=INNODB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;引入依賴
org.springframework.boot spring-boot-starter-jdbc org.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot-starter 2.0.0 com.alibaba druid 1.1.14 mysql mysql-connector-java 5.1.47 runtime com.github.pagehelper pagehelper-spring-boot-starter 1.2.5 org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin org.mybatis.generator mybatis-generator-maven-plugin 1.3.2 ${basedir}/src/main/resources/generator/generatorConfig.xml true true
代碼解釋很詳細了,但這里提一嘴,mybatis generator 插件用于自動生成代碼,pagehelper 插件用于物理分頁。
項目配置server: port: 8080 spring: datasource: name: test url: jdbc:mysql://127.0.0.1:3306/test username: root password: 123456 #druid相關配置 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver filters: stat maxActive: 20 initialSize: 1 maxWait: 60000 minIdle: 1 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: select "x" testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true maxOpenPreparedStatements: 20 ## 該配置節點為獨立的節點,有很多同學容易將這個配置放在spring的節點下,導致配置無法被識別 mybatis: mapper-locations: classpath:mapping/*.xml #注意:一定要對應mapper映射xml文件的所在路徑 type-aliases-package: com.nasus.mybatisxml.model # 注意:對應實體類的路徑 #pagehelper分頁插件 pagehelper: helperDialect: mysql reasonable: true supportMethodsArguments: true params: count=countSqlmybatis generator 配置文件
這里要注意,配置 pom.xml 中 generator 插件所對應的配置文件時,在 Pom.xml 加入這一句,說明 generator 插件所對應的配置文件所對應的配置文件路徑。這里已經在 Pom 中配置了,請見上面的 Pom 配置。
${basedir}/src/main/resources/generator/generatorConfig.xml
generatorConfig.xml :
代碼注釋很詳細,不多說。
生成代碼過程第一步:選擇編輯配置
第二步:選擇添加 Maven 配置
第三步:添加命令 mybatis-generator:generate -e 點擊確定
第四步:運行該配置,生成代碼
特別注意!!!同一張表一定不要運行多次,因為 mapper 的映射文件中會生成多次的代碼,導致報錯,切記。如要運行多次,請把上次生成的 mapper 映射文件代碼刪除再運行。
第五步:檢查生成結果
遇到的問題請參照別人寫好的遇到問題的解決方法,其中我就遇到數據庫時區不對以及只生成 Insert 方法這兩個問題。都是看以下這篇文章解決的:
Mybatis Generator自動生成代碼以及可能出現的問題
生成的代碼1、實體類:Student.java
package com.nasus.mybatisxml.model; public class Student { private Long id; private Integer age; private String city; private String dormitory; private String major; private String name; private Long studentId; // 省略 get 和 set 方法 }
2、mapper 接口:StudentMapper.java
package com.nasus.mybatisxml.mapper; import com.nasus.mybatisxml.model.Student; import java.util.List; import org.apache.ibatis.annotations.Mapper; @Mapper public interface StudentMapper { int deleteByPrimaryKey(Long id); int insert(Student record); int insertSelective(Student record); Student selectByPrimaryKey(Long id); // 我添加的方法,相應的要在映射文件中添加此方法 ListselectStudents(); int updateByPrimaryKeySelective(Student record); int updateByPrimaryKey(Student record); }
3、映射文件:StudentMapper.xml
serviec 層id, age, city, dormitory, major, name, student_id delete from student where id = #{id,jdbcType=BIGINT} insert into student (id, age, city, dormitory, major, name, student_id) values (#{id,jdbcType=BIGINT}, #{age,jdbcType=INTEGER}, #{city,jdbcType=VARCHAR}, #{dormitory,jdbcType=VARCHAR}, #{major,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{studentId,jdbcType=BIGINT}) insert into student id, age, city, dormitory, major, name, student_id, #{id,jdbcType=BIGINT}, #{age,jdbcType=INTEGER}, #{city,jdbcType=VARCHAR}, #{dormitory,jdbcType=VARCHAR}, #{major,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{studentId,jdbcType=BIGINT}, update student where id = #{id,jdbcType=BIGINT} age = #{age,jdbcType=INTEGER}, city = #{city,jdbcType=VARCHAR}, dormitory = #{dormitory,jdbcType=VARCHAR}, major = #{major,jdbcType=VARCHAR}, name = #{name,jdbcType=VARCHAR}, student_id = #{studentId,jdbcType=BIGINT}, update student set age = #{age,jdbcType=INTEGER}, city = #{city,jdbcType=VARCHAR}, dormitory = #{dormitory,jdbcType=VARCHAR}, major = #{major,jdbcType=VARCHAR}, name = #{name,jdbcType=VARCHAR}, student_id = #{studentId,jdbcType=BIGINT} where id = #{id,jdbcType=BIGINT}
1、接口:
public interface StudentService { int addStudent(Student student); Student findStudentById(Long id); PageInfofindAllStudent(int pageNum, int pageSize); }
2、實現類
@Service public class StudentServiceImpl implements StudentService{ //會報錯,不影響 @Resource private StudentMapper studentMapper; /** * 添加學生信息 * @param student * @return */ @Override public int addStudent(Student student) { return studentMapper.insert(student); } /** * 根據 id 查詢學生信息 * @param id * @return */ @Override public Student findStudentById(Long id) { return studentMapper.selectByPrimaryKey(id); } /** * 查詢所有學生信息并分頁 * @param pageNum * @param pageSize * @return */ @Override public PageInfocontroller 層findAllStudent(int pageNum, int pageSize) { //將參數傳給這個方法就可以實現物理分頁了,非常簡單。 PageHelper.startPage(pageNum, pageSize); List studentList = studentMapper.selectStudents(); PageInfo result = new PageInfo(studentList); return result; } }
@RestController @RequestMapping("/student") public class StudentController { @Autowired private StudentService studentService; @GetMapping("/{id}") public Student findStidentById(@PathVariable("id") Long id){ return studentService.findStudentById(id); } @PostMapping("/add") public int insertStudent(@RequestBody Student student){ return studentService.addStudent(student); } @GetMapping("/list") public PageInfo啟動類findStudentList(@RequestParam(name = "pageNum", required = false, defaultValue = "1") int pageNum, @RequestParam(name = "pageSize", required = false, defaultValue = "10") int pageSize){ return studentService.findAllStudent(pageNum,pageSize); } }
@SpringBootApplication @MapperScan("com.nasus.mybatisxml.mapper") // 掃描 mapper 接口,必須加上 public class MybatisxmlApplication { public static void main(String[] args) { SpringApplication.run(MybatisxmlApplication.class, args); } }
提一嘴,@MapperScan("com.nasus.mybatisxml.mappe") 這個注解非常的關鍵,這個對應了項目中 mapper(dao) 所對應的包路徑,必須加上,否則會導致異常。
Postman 測試1、插入方法:
2、根據 id 查詢方法:
3、分頁查詢方法:
源碼下載https://github.com/turoDog/De...
幫忙點個 star 可好?
后語如果本文對你哪怕有一丁點幫助,請幫忙點好看。你的好看是我堅持寫作的動力。
另外,關注之后在發送 1024 可領取免費學習資料。資料內容詳情請看這篇舊文:Python、C++、Java、Linux、Go、前端、算法資料分享
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73478.html
摘要:提供映射標簽,支持對象與數據庫的字段關系映射提供對象關系映射標簽,支持對象關系組建維護提供標簽,支持編寫動態。層實現類添加更新刪除根據查詢查詢所有的層構建測試結果其他接口已通過測試,無問題。 微信公眾號:一個優秀的廢人如有問題或建議,請后臺留言,我會盡力解決你的問題。 前言 如題,今天介紹 SpringBoot 與 Mybatis 的整合以及 Mybatis 的使用,本文通過注解的形式...
摘要:哪吒社區技能樹打卡打卡貼函數式接口簡介領域優質創作者哪吒公眾號作者架構師奮斗者掃描主頁左側二維碼,加入群聊,一起學習一起進步歡迎點贊收藏留言前情提要無意間聽到領導們的談話,現在公司的現狀是碼農太多,但能獨立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區Java技能樹打卡?【打卡貼 day2...
摘要:前提好幾周沒更新博客了,對不斷支持我博客的童鞋們說聲抱歉了。熟悉我的人都知道我寫博客的時間比較早,而且堅持的時間也比較久,一直到現在也是一直保持著更新狀態。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好幾周沒更新博客了,對不斷支持我博客的童鞋們說聲:抱歉了!。自己這段時...
閱讀 881·2023-04-26 03:03
閱讀 2206·2021-10-12 10:12
閱讀 1201·2021-09-24 09:48
閱讀 1645·2021-09-22 15:25
閱讀 3332·2021-09-22 15:15
閱讀 914·2019-08-29 16:21
閱讀 1063·2019-08-28 18:00
閱讀 3423·2019-08-26 13:44