摘要:如要運行多次,請把上次生成的映射文件代碼刪除再運行。層啟動類掃描接口,必須加上提一嘴,這個注解非常的關(guān)鍵,這個對應(yīng)了項目中所對應(yīng)的包路徑,必須加上,否則會導(dǎo)致異常。另外,關(guān)注之后在發(fā)送可領(lǐng)取免費學(xué)習(xí)資料。
微信公眾號:一個優(yōu)秀的廢人前言
如有問題或建議,請后臺留言,我會盡力解決你的問題。
如題,今天介紹 SpringBoot 與 Mybatis 的整合以及 Mybatis 的使用,之前介紹過了 SpringBoot 整合MyBatis 注解版的使用,上一篇介紹過 MyBatis 的理論,今天這篇就不介紹 MyBatis 的理論了,有興趣的跳轉(zhuǎn)閱讀:SpringBoot 實戰(zhàn) (十三) | 整合 MyBatis (注解版)
準備工作SpringBoot 2.1.3
IDEA
JDK 8
創(chuàng)建表CREATE TABLE `student` ( `id` int(32) NOT NULL AUTO_INCREMENT, `student_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "學(xué)號", `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 "專業(yè)", 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相關(guān)配置 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 ## 該配置節(jié)點為獨立的節(jié)點,有很多同學(xué)容易將這個配置放在spring的節(jié)點下,導(dǎo)致配置無法被識別 mybatis: mapper-locations: classpath:mapping/*.xml #注意:一定要對應(yīng)mapper映射xml文件的所在路徑 type-aliases-package: com.nasus.mybatisxml.model # 注意:對應(yīng)實體類的路徑 #pagehelper分頁插件 pagehelper: helperDialect: mysql reasonable: true supportMethodsArguments: true params: count=countSqlmybatis generator 配置文件
這里要注意,配置 pom.xml 中 generator 插件所對應(yīng)的配置文件時,在 Pom.xml 加入這一句,說明 generator 插件所對應(yīng)的配置文件所對應(yīng)的配置文件路徑。這里已經(jīng)在 Pom 中配置了,請見上面的 Pom 配置。
${basedir}/src/main/resources/generator/generatorConfig.xml
generatorConfig.xml :
代碼注釋很詳細,不多說。
生成代碼過程第一步:選擇編輯配置
第二步:選擇添加 Maven 配置
第三步:添加命令 mybatis-generator:generate -e 點擊確定
第四步:運行該配置,生成代碼
特別注意?。?!同一張表一定不要運行多次,因為 mapper 的映射文件中會生成多次的代碼,導(dǎo)致報錯,切記。如要運行多次,請把上次生成的 mapper 映射文件代碼刪除再運行。
第五步:檢查生成結(jié)果
遇到的問題請參照別人寫好的遇到問題的解決方法,其中我就遇到數(shù)據(jù)庫時區(qū)不對以及只生成 Insert 方法這兩個問題。都是看以下這篇文章解決的:
Mybatis Generator自動生成代碼以及可能出現(xiàn)的問題
生成的代碼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); // 我添加的方法,相應(yīng)的要在映射文件中添加此方法 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、實現(xiàn)類
@Service public class StudentServiceImpl implements StudentService{ //會報錯,不影響 @Resource private StudentMapper studentMapper; /** * 添加學(xué)生信息 * @param student * @return */ @Override public int addStudent(Student student) { return studentMapper.insert(student); } /** * 根據(jù) id 查詢學(xué)生信息 * @param id * @return */ @Override public Student findStudentById(Long id) { return studentMapper.selectByPrimaryKey(id); } /** * 查詢所有學(xué)生信息并分頁 * @param pageNum * @param pageSize * @return */ @Override public PageInfocontroller 層findAllStudent(int pageNum, int pageSize) { //將參數(shù)傳給這個方法就可以實現(xiàn)物理分頁了,非常簡單。 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") 這個注解非常的關(guān)鍵,這個對應(yīng)了項目中 mapper(dao) 所對應(yīng)的包路徑,必須加上,否則會導(dǎo)致異常。
Postman 測試1、插入方法:
2、根據(jù) id 查詢方法:
3、分頁查詢方法:
源碼下載https://github.com/turoDog/De...
幫忙點個 star 可好?
后語如果本文對你哪怕有一丁點幫助,請幫忙點好看。你的好看是我堅持寫作的動力。
另外,關(guān)注之后在發(fā)送 1024 可領(lǐng)取免費學(xué)習(xí)資料。資料內(nèi)容詳情請看這篇舊文:Python、C++、Java、Linux、Go、前端、算法資料分享
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/73478.html
摘要:提供映射標簽,支持對象與數(shù)據(jù)庫的字段關(guān)系映射提供對象關(guān)系映射標簽,支持對象關(guān)系組建維護提供標簽,支持編寫動態(tài)。層實現(xiàn)類添加更新刪除根據(jù)查詢查詢所有的層構(gòu)建測試結(jié)果其他接口已通過測試,無問題。 微信公眾號:一個優(yōu)秀的廢人如有問題或建議,請后臺留言,我會盡力解決你的問題。 前言 如題,今天介紹 SpringBoot 與 Mybatis 的整合以及 Mybatis 的使用,本文通過注解的形式...
摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號作者架構(gòu)師奮斗者掃描主頁左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進步歡迎點贊收藏留言前情提要無意間聽到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...
摘要:前提好幾周沒更新博客了,對不斷支持我博客的童鞋們說聲抱歉了。熟悉我的人都知道我寫博客的時間比較早,而且堅持的時間也比較久,一直到現(xiàn)在也是一直保持著更新狀態(tài)。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好幾周沒更新博客了,對不斷支持我博客的童鞋們說聲:抱歉了!。自己這段時...
閱讀 898·2023-04-26 03:03
閱讀 2221·2021-10-12 10:12
閱讀 1213·2021-09-24 09:48
閱讀 1664·2021-09-22 15:25
閱讀 3345·2021-09-22 15:15
閱讀 934·2019-08-29 16:21
閱讀 1076·2019-08-28 18:00
閱讀 3438·2019-08-26 13:44