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