MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs) [百度百科]
SpringBoot集成MyBatis
说白了MyBatis提供了一种高级映射,相对快捷的操作数据库的方式,记得用过ThinkPhp框架,操作数据部分用起来还是很舒服的,所以在JavaWeb上选择了MyBatis集成。
同理相较于Spring Boot,我们的MyBatis导入也需要添加依赖
第一步,添加依赖
添加部分如下,添加后的截图在下面
<!--MyBatis依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!--Mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
依赖
第二步,配置数据库信息
在application.properties中配置数据库
内容如下
#第一句是你的entity,也就是pojo的所在包
mybatis.type-aliases-package=com.example.demo.Entity
#如果报错要求使用新版本,你需要在mysql.后面加上cj.(错误会提示)
spring.datasource.driverClassName = com.mysql.jdbc.Driver
#注意,这边的url username password配置跟jdbc的是一样的,具体要改成你用的数据库,添加你需要的配置
spring.datasource.url = jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = root
app
此时如果你的com.mysql.jdbc.Driver标红,说明你的项目mysql lib没设置好,需要你按照第一篇文章那样,把Mysql的Lib加入
第三步,添加扫描注解
在Application中添加mappingscan注解,内容是你的Mapper所在包
image.png
第四步,建立Pojo
Pojo的话就是一个简单的java对象模板(Class),比如说我现在的场景我建立的测试数据库如下。
数据库名是rfid,我现在用admins这个表,表中有3个字段。
数据库
那我的pojo建立应该对应着这几个字段。(其实不必要的,但是现在对应着就行,不会出什么大麻烦)
package com.example.demo.Entity;
import java.io.Serializable;
public class UserEntity implements Serializable{
//字段类型的话,最好跟Mapper里面规定的字段类型对应,否则会出现问题
private Long id;
private String user_id;
private String password;
public UserEntity(Long id, String user_id, String password) {
this.id = id;
this.user_id = user_id;
this.password = password;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUser_id() {
return user_id;
}
public void setUser_id(String user_id) {
this.user_id = user_id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "id"+user_id+"pswd"+password;
}
}
第五步,开发Mapper
先看一下我们的最终版吧
package com.example.demo.Mapper;
import com.example.demo.Entity.UserEntity;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface UserMapper {
@Select("SELECT * FROM admins")
@Results({
@Result(property = "id", column = "id"),
@Result(property = "user_id", column = "user_id"),
@Result(property = "password", column = "password")
})
List<UserEntity> getAll();
@Select("SELECT * FROM admins WHERE id = #{id}")
@Results({
@Result(property = "user_id", column = "user_id"),
@Result(property = "password", column = "password")
})
UserEntity getOne(Long id);
@Insert("INSERT INTO admins(id,user_id,password) VALUES(#{id}, #{user_id}, #{password})")
void insert(UserEntity user);
@Update("UPDATE admins SET user_id=#{user_id},password=#{password} WHERE id =#{id}")
void update(UserEntity user);
//删除某一项
@Delete("DELETE FROM admins WHERE id =#{id}")
void delete(Long id);
}
Mapper是操作数据库的核心内容,这是一个java 接口,我们的增删改查通过注解来实现,还是要写sql语句,第一次看到这个的时候我内心是崩溃的,因为以前用过THinkphp对数据库的操作,简直超级棒,现在初来乍到搞JavaWeb,一直渴望有这样的神操作,可是到头来还是要写Sql……听同学说其他框架可以实现,暂且不研究,以后有机会再说。
暂时先这样,我们写好了一个Mapper
同时下面这是一些相关的解释
- @Select 是查询类的注解,所有的查询均使用这个
- @Results修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰。(这也是我刚才说的对应不对应的问题,如果实际要求不能对应那么可以通过注解来解决)
- @Insert 插入数据库使用,直接传入实体类会自动解析属性到对应的值
- @Update 负责修改,也可以直接传入对象
- @delete 负责删除
第六步,验收成果
也是先看看我们最终版本
package com.example.demo.Web;
import com.example.demo.Mapper.UserMapper;
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 java.util.List;
import com.example.demo.Entity.UserEntity;
@RestController
@EnableAutoConfiguration
public class HelloController {
@RequestMapping("/Hello")
public String hello(){
return "Hello Spring boot";
}
@Autowired
private UserMapper userMapper;
@RequestMapping("/getUsers")
public String getUsers() {
List<UserEntity> users=userMapper.getAll();
return users.get(0).toString();
}
@RequestMapping("/getOne")
public String getOne(){
return userMapper.getOne(1L).toString();
}
}
也是修改我们的HelloController 增加俩方法,然后浏览器访问看效果。
效果图
话说我刚才很智障的遇到一个错误,就是能连接数据库,查不到数据,一堆空指针……后来各种找不知道怎么解决,跑数据库一看,没添加数据……想把自己掐死。
当然就是简单的集成,参考大神们的教程,在大神们神一样的操作上简化
?或者是整理了一下逻辑。
在踩坑的路上越走越远。
网友评论