将Mybatis引入Spring Boot项目连接数据库操作
将Mybatis引入Spring Boot项目连接数据库操作
一,首先,在pom.xml引入Mybatis插件
加入Maven依赖代码即可快速引入Mybatis 2.0.0:
<!--Mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <!--MySQL--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
上面代码将mybatis 2.0.0和mysql连接插件引入项目,保存,等待插件加载完。
二,在配置文件中加入连接配置信息
打开application.properties编辑,加入连接配置信息:
#mybatis链接数据库相关配置 spring.datasource.url=jdbc:mysql://192.168.10.223:3306/db_demo?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true spring.datasource.username=root spring.datasource.password=Kings0ft_01 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
以上信息用于连接mysql数据库。
三,在项目启动程序中加入mapper注解
打开项目的Xxhdemo1Application,加入注解。
package xxh.springbootmvc.xxhdemo1; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication /*Spring Boot 会自动加载 spring.datasource.* 相关配置,数据源就会自动注入到 sqlSessionFactory 中, sqlSessionFactory 会自动注入到 Mapper 中*/ @MapperScan("xxh.springbootmvc.xxhdemo1.MybatisDemo.mapper") public class Xxhdemo1Application { public static void main(String[] args) { SpringApplication.run(Xxhdemo1Application.class, args); } }
注意,加入@MapperScan注解后,Spring Boot 会自动加载 spring.datasource.* 相关配置,数据源就会自动注入到 sqlSessionFactory 中,sqlSessionFactory 会自动注入到 Mapper 中。
四,按上面Mapper 路径创建自己建Package,然后在里面创建自己的Mapper 和Model。
创建Model示例 D:\javaWorkspace\IdeaProjects\xxhdemo1\src\main\java\xxh\springbootmvc\xxhdemo1\MybatisDemo\mapper\UserEntity.java:
package xxh.springbootmvc.xxhdemo1.MybatisDemo.mapper; import java.util.Date; public class UserEntity { public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return Name; } public void setName(String name) { Name = name; } public String getDesc() { return Desc; } public void setDesc(String desc) { Desc = desc; } public Date getCreateTime() { return CreateTime; } public void setCreateTime(Date createTime) { CreateTime = createTime; } public UserEntity(int id, String name, String desc, Date createTime) { this.id = id; Name = name; Desc = desc; CreateTime = createTime; } @Override public String toString() { return "UserEntity{" + "id=" + id + ", Name='" + Name + '\'' + ", Desc='" + Desc + '\'' + ", CreateTime=" + CreateTime + '}'; } private int id; private String Name; private String Desc; private Date CreateTime; }
创建Mapper示例 D:\javaWorkspace\IdeaProjects\xxhdemo1\src\main\java\xxh\springbootmvc\xxhdemo1\MybatisDemo\mapper\UserMapper.java
package xxh.springbootmvc.xxhdemo1.MybatisDemo.mapper; import org.apache.ibatis.annotations.*; import java.util.List; /*注意Mapper的类型是“接口”*/ public interface UserMapper { /*查询操作示例*/ @Select("SELECT * FROM t_user;") @Results({ @Result(property = "id", column = "Id"), @Result(property = "Name", column = "Name"), @Result(property = "Desc", column = "Desc"), @Result(property = "CreateTime", column = "CreateTime") }) List<UserEntity> getAll(); /*查询操作示例*/ @Select("SELECT * FROM t_user WHERE Id = #{id};") @Results({ @Result(property = "id", column = "Id"), @Result(property = "Name", column = "Name"), @Result(property = "Desc", column = "Desc"), @Result(property = "CreateTime", column = "CreateTime") }) UserEntity getEntity(int id); /*插入操作示例*/ @Insert("INSERT INTO t_user(`Name`,`Desc`,CreateTime) VALUES(#{Name}, #{Desc}, #{CreateTime});") @Options(useGeneratedKeys=true, keyProperty="id", keyColumn="Id") /*将自增ID绑定到实体,keyProperty是实体字段,keyColumn是数据库字段*/ int insert(UserEntity user); /*修改操作示例*/ @Update("UPDATE t_user SET `Name`=#{Name},`Desc`=#{Desc} WHERE Id =#{id};") int update(UserEntity user); /*删除操作示例*/ @Delete("DELETE FROM t_user WHERE Id =#{id};") int delete(int id); }
五,创建Controller,写接口或页面调用操作数据库方法
测试demo只需要放回数据即可,不写页面了。所以引入@RestController,@RequestMapping注解。然后必须在控制器域代码里声明Mapper类型,访问类型一般是私有的:
/*在控制器域代码声明Mapper类型*/ private UserMapper UserMapper;
然后再控制器里面写各种调用Mapper操作数据库方法,调用正删查改完整示例:
package xxh.springbootmvc.xxhdemo1.MybatisDemo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import xxh.springbootmvc.xxhdemo1.MybatisDemo.mapper.UserEntity; import xxh.springbootmvc.xxhdemo1.MybatisDemo.mapper.UserMapper; import java.util.List; import java.util.Date; @RestController @EnableAutoConfiguration @RequestMapping("/v1/mybatisdemo") public class mysqlTestController { /*在控制器域代码声明Mapper类型*/ @Autowired private UserMapper UserMapper; @RequestMapping("add") public int testInsert() throws Exception { int id, num = 0; UserEntity u = new UserEntity(0, "刘备", "大哥", new Date()); num = UserMapper.insert(u); id = u.getId(); System.out.println("新增数据完成 id=" + id + ",num=" + num); return num; } @RequestMapping("get") public UserEntity testQueryOne(int id) throws Exception { UserEntity UserEntity = UserMapper.getEntity(id); System.out.println(UserEntity.toString()); return UserEntity; } @RequestMapping("getlist") public List<UserEntity> testQuery() throws Exception { List<UserEntity> UserEntitys = UserMapper.getAll(); System.out.println(UserEntitys.toString()); return UserEntitys; } @RequestMapping("edit") public int testUpdate(int id, String name, String desc) throws Exception { int num = 0; UserEntity UserEntity = UserMapper.getEntity(id); if (null != UserEntity && UserEntity.getId() > 0) { System.out.println(UserEntity.toString()); UserEntity.setName(name); UserEntity.setDesc(desc); num = UserMapper.update(UserEntity); } return num; } @RequestMapping("del") public int testDelete(int id) throws Exception { int num = 0; if (id > 0) { num = UserMapper.delete(id); } return num; } }
到这里就可以运行项目代码,测试接口了。
代码结构如图:
六,创建MySQL数据库及表结构
创建MySQL数据库:
CREATE DATABASE IF NOT EXISTS db_demo DEFAULT CHARSET utf8mb4;
创建数据库表结构:
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for t_user -- ---------------------------- DROP TABLE IF EXISTS `t_user`; CREATE TABLE `t_user` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(255) DEFAULT NULL, `Desc` varchar(255) DEFAULT NULL, `CreateTime` datetime(3) NOT NULL, PRIMARY KEY (`Id`) ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4;
其中,查询数据列表的运行效果,如图:
【完】