Spring Boot 知识笔记(整合Mybatis)
一、pom.xml中添加相关依赖
<!-- 引入starter--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> <scope>runtime</scope> </dependency> <!-- MySQL的JDBC驱动包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- 引入第三方数据源 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.6</version> </dependency>
二、在application.properties中添加Mybatis的配置
#mybatis.type-aliases-package=net.xdclass.base_project.domain #可以自动识别 #spring.datasource.driver-class-name =com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/movie?useUnicode=true&characterEncoding=utf-8 spring.datasource.username =root spring.datasource.password =password #如果不使用默认的数据源 (com.zaxxer.hikari.HikariDataSource) spring.datasource.type =com.alibaba.druid.pool.DruidDataSource
三、启动文件中加入注解,以便可以自动扫描包里面所有的Mapper文件
四、本地mysql数据库中创建movie库,创建对应的表
//创建表的SQL如下
CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(128) DEFAULT NULL COMMENT '名称', `phone` varchar(16) DEFAULT NULL COMMENT '用户手机号', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `age` int(4) DEFAULT NULL COMMENT '年龄', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
五、创建一个domain类
package net.Eleven.demo.domain; import java.util.Date; public class UserNew { private int id; private String name; private String phone; private int age; private Date creatTime; public int getId() { return id; } public String getName() { return name; } public String getPhone() { return phone; } public int getAge() { return age; } public Date getCreatTime() { return creatTime; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } public void setPhone(String phone) { this.phone = phone; } public void setAge(int age) { this.age = age; } public void setCreatTime(Date creatTime) { this.creatTime = creatTime; } }
六、创建Mapper,访问数据库的接口
package net.Eleven.demo.Mapper; import net.Eleven.demo.domain.UserNew; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Options; /** * 功能描述:访问数据库的接口,相当于dao层 * @author Eleven */ public interface UserMapper { //推荐使用#{}取值,不要用${},因为存在注入的风险 @Insert("INSERT INTO user(name,phone,create_time,age) VALUES(#{name},#{phone},#{creatTime},#{age})") //VALUESDE 的值必须与domain中的字段一一对应。 @Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id") //keyProperty java对象的属性;keyColumn表示数据库的字段 int insert(UserNew userNew); }
七、创建Service 和Impl
package net.Eleven.demo.Service; import net.Eleven.demo.domain.UserNew; public interface UserService { public int add(UserNew userNew); }
package net.Eleven.demo.Service.impl; import net.Eleven.demo.Mapper.UserMapper; import net.Eleven.demo.Service.UserService; import net.Eleven.demo.domain.UserNew; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service //不要忘了注解 public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public int add(UserNew userNew) { userMapper.insert(userNew); int id = userNew.getId(); return id; } }
八、创建Controller
package net.Eleven.demo.controller; import net.Eleven.demo.Service.UserService; import net.Eleven.demo.domain.JsonData; import net.Eleven.demo.domain.UserNew; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Date; @RestController @RequestMapping("/api/sql/user") public class UserController { @Autowired private UserService userService; @GetMapping("add") public Object add(){ UserNew userNew = new UserNew(); userNew.setAge(11); userNew.setCreatTime(new Date()); userNew.setName("Eleven"); userNew.setPhone("18211111111"); int id = userService.add(userNew); return JsonData.buildSuccess(id); } }
九、创建第八步使用的JsonData类,以便更好的展示返回的数据
package net.Eleven.demo.domain; import java.io.Serializable; public class JsonData implements Serializable { /** * */ private static final long serialVersionUID = 1L; private Integer code; // 状态码 0 表示成功,1表示处理中,-1表示失败 private Object data; // 数据 private String msg;// 描述 public JsonData() { } public JsonData(Integer code, Object data, String msg) { this.code = code; this.data = data; this.msg = msg; } public JsonData(int code, Object data) { super(); this.code = code; this.data = data; } // 成功,传入数据 public static JsonData buildSuccess() { return new JsonData(0, null, null); } // 成功,传入数据 public static JsonData buildSuccess(Object data) { return new JsonData(0, data, null); } // 失败,传入描述信息 public static JsonData buildError(String msg) { return new JsonData(-1, null, msg); } // 失败,传入描述信息,状态码 public static JsonData buildError(String msg, Integer code) { return new JsonData(code, null, msg); } // 成功,传入数据,及描述信息 public static JsonData buildSuccess(Object data, String msg) { return new JsonData(0, data, msg); } // 成功,传入数据,及状态码 public static JsonData buildSuccess(Object data, int code) { return new JsonData(code, data, null); } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } @Override public String toString() { return "JsonData [code=" + code + ", data=" + data + ", msg=" + msg + "]"; } }
十、执行结果
十一、遇到的报错
错误提示:
Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
解决办法;
在连接字符串后面加上?serverTimezone=UTC
其中UTC是统一标准世界时间。
完整的连接字符串示例:jdbc:mysql://localhost:3306/test?serverTimezone=UTC
或者还有另一种选择:jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8,这个是解决中文乱码输入问题,当然也可以和上面的一起结合:jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探