简单说明使用感觉
Mybatis的使用不像javaEE那边的Servlet那样和数据库链接要写很多请求try,catch,还要关闭连接,反反复复的判断,就算是一写代码可以复用也得写好多。而Mybatis使用方便,在配置文件中连接完数据就可以使用起来,语法也相对轻松许多。
连接数据库的配置文件
# 应用名称
spring.application.name=demo
#数 据 源 配 置
spring.datasource.url=jdbc:mysql://localhost:3306/数据库名?characterEncoding=UTF-8&serverTimezone=GMT
spring.datasource.username=账号
spring.datasource.password=密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#统一编码
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.enabled=true
server.tomcat.uri-encoding=UTF-8
# 应用服务 WEB 访问端口
server.port=8080
#下面这些内容是为了让MyBatis映射
#指定Mybatis的实体目录
mybatis.type-aliases-package=com.example.demo.mybatis.entity
#指定Mybatis的Mapper文件
mybatis.mapper-locations=classpath:mappers/*xml
这种简单的配置连接网上也挺多的,基本上非常容易就上手,然后就开始CURD了
Mybatis的CURD
我这里就拿我做的demo为例子
先写个实体类放在entity包里面,在写个mapper包下的对应实体类的接口文件(比如你实体类叫User,那么接口就可叫UserMapper,比较方便记忆)
而在写在接口中的抽象方法需要在mappers文件夹下的xml文件下实现,这个mappers文件夹下的xml主要写sql语句与mapper包下的接口一一对应。
最后在controller包下写接口,然后在里面调用mapper包的接口就可以实现CURD
下面就来看看代码:
实体类(对应数据库表中的相应列名)
@Data
public class Student {
private Integer studentID;
private String className;
private String studentName;
private String studentSex;
private Date studentCreateTime;
private Date studentReworkTime;
private Integer studentDelete;
private Date addClassTime;
}
mapper接口:
@Mapper
@Component
public interface MybatisDemoStudentMapper {
//返回所有信息
List<MybatisDemoStudent> findAll();
//根据名字查询
MybatisDemoStudent findByName(String studentName);
//添加信息
void addStudent(MybatisDemoStudent student);
//删除信息(物理删除)
void deleteStudent(Integer studentID);
//更新信息
void updateStudent(MybatisDemoStudent student);
}
mappers文件夹下的xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.demo.mybatis.mapper.MybatisDemoStudentMapper">
<select id="findAll" resultType="com.example.demo.mybatis.entity.MybatisDemoStudent">
SELECT * FROM student_dp
</select>
<select id="findByName" parameterType="string" resultType="com.example.demo.mybatis.entity.MybatisDemoStudent">
select * from student_dp where student_dp.studentName = #{studentName}
</select>
<insert id="addStudent" parameterType="com.example.demo.mybatis.entity.MybatisDemoStudent">
insert into student_dp(className,studentName,studentSex,studentCreateTime,studentReworkTime,
addClassTime,studentDelete)
values(#{className},#{studentName},#{studentSex},#{studentCreateTime},#{studentReworkTime},
#{addClassTime},#{studentDelete})
<selectKey resultType="java.lang.Integer" keyProperty="studentID" order="AFTER">
SELECT LAST_INSERT_ID() AS studentID
</selectKey>
</insert>
<delete id="deleteStudent" parameterType="integer" >
delete from student_dp where studentID = #{studentID}
</delete>
<update id="updateStudent" parameterType="com.example.demo.mybatis.entity.MybatisDemoStudent" >
update student_dp set className = #{className},studentName = #{studentName}, studentSex = #{studentSex},
studentCreateTime = #{studentCreateTime}, studentReworkTime = #{studentReworkTime},
addClassTime = #{addClassTime}, studentDelete = #{studentDelete} where studentID = #{studentID}
</update>
</mapper>
xml文件主要写简单的数据库操作,而复杂的数据库操作又得多个简单操作复合在一起,这就得写在service中对mapper接口继承,然后写复杂数据库操作在新的方法中。这里就不详细说明了。
最后就是写反馈前端的接口了:
controller包下的接口文件
@RestController
@RequestMapping("/studentmybatis")
public class MybatisDemoStudentController {
@Autowired
private MybatisDemoStudentMapper mybatisDemoStudentMapper;
/**
* http://127.0.0.1:8080/studentmybatis/findAll
* @return 返回学生表所有信息
*/
@GetMapping("/findAll")
public List<MybatisDemoStudent> findAll(){
return mybatisDemoStudentMapper.findAll();
}
/**
* http://127.0.0.1:8080/studentmybatis/findByName?name=
* @param name 学生姓名
* @return 返回查询学生的信息
*/
@GetMapping("/findByName")
public MybatisDemoStudent findByName (@RequestParam("name") String name){
return mybatisDemoStudentMapper.findByName(name);
}
/**
* 基本功能:增加学生
* http://127.0.0.1:8080/studentmybatis/addStudent
* @return http://127.0.0.1:8080/studentmybatis/findAll
*/
@GetMapping("/addStudent")
public String addStudnet(){
SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" );
Date date= new Date();
simpleDateFormat.format(date.getTime());
MybatisDemoStudent student = new MybatisDemoStudent();
student.setClassName("普通一班");
student.setAddClassTime(date);
student.setStudentDelete(0);
student.setStudentName("刘近");
student.setStudentSex("女");
student.setStudentCreateTime(date);
student.setStudentReworkTime(date);
mybatisDemoStudentMapper.addStudent(student);
return "http://127.0.0.1:8080/studentmybatis/findAll";
}
/**
* 基本功能:删除学生
* http://127.0.0.1:8080/studentmybatis/deleteStudent?studentID=
* @param studentID 学生编号
* @return http://127.0.0.1:8080/studentmybatis/findAll
*/
@GetMapping("/deleteStudent")
public String deleteStudent(@RequestParam("studentID") Integer studentID) {
mybatisDemoStudentMapper.deleteStudent(studentID);
return "http://127.0.0.1:8080/studentmybatis/findAll";
}
/**
* 基本功能:修改学生信息
* http://127.0.0.1:8080/studentmybatis/updateStudent
* @return http://127.0.0.1:8080/studentmybatis/findAll
*/
@GetMapping("/updateStudent")
public String updateStudent(){
SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" );
Date date= new Date();
simpleDateFormat.format(date.getTime());
MybatisDemoStudent student = new MybatisDemoStudent();
student.setStudentID(9);
student.setClassName("普通一班");
student.setAddClassTime(date);
student.setStudentDelete(0);
student.setStudentName("刘近");
student.setStudentSex("男");
student.setStudentCreateTime(date);
student.setStudentReworkTime(date);
mybatisDemoStudentMapper.updateStudent(student);
return "http://127.0.0.1:8080/studentmybatis/findAll";
}
看上有点多,主要是没前端页面不好测试添加修改数据,就直接在代码中写死了,但当有前端页面的时候只要传Bean的实体对象就行了。
这样就完成CURD了,接口显示的都是一堆字符串,信息内容正确即可。