大家好,又见面了,我是你们的朋友全栈君。
SpringBoot配置Mybatis:详细易懂
Mybatis作为后端持久层框架,在互联网大厂中应用广泛,所以掌握Mybatis,可谓是必备的。最近准备系统得复习一下Mybatis框架,所以博客会更几期关于Mybatis得文章,如果觉得看完有收获,希望收藏、点赞。如果觉得写得不好,欢迎评论区指正。
前期准备工作
-
安装mysql,可以参考 安装MySQL
mysql记得给远程用户分配权限,参考mysql 8 设置允许远程连接 You are not allowed to create a user with GRANT
-
配置SpringBoot开发环境,参考VS Code打造一个完美的Springboot开发环境
-
创建一个学生表(终端, 代码动态创建均可)
create table(Sno int(10) primary key, Sname varchar(10), Sage int(5));
Mybatis相应配置
修改pom.xml,获取Mybatis、MySQL相关依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
<scope>compile</scope>
</dependency>
在application.properties
文件中配置Mybatis连接环境
mybatis.type-aliases-package=com.test.demo
#mysql驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#远程数据库链接 serverTimezone不可少
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
#MySQL数据库用户名、密码
spring.datasource.username=root
spring.datasource.password=xxxxx
#xml格式的mapper文件位置
mybatis.mapper-locations=classpath:/mapper/*.xml
编写相应代码
添加bean类(对应与数据库属性列)
package com.test.demo;
public class Student {
public int sNo;
public String sName;
public int sAge;
public Student(int sNo, String sName, int sAge) {
this.sNo = sNo;
this.sName = sName;
this.sAge = sAge;
}
//Getter、Setter方法,我省略了,你在代码中别省略
}
添加mapper接口代码
package com.test.demo.mapper;
import com.test.demo.Student;
public interface StudentMapper {
void insert(Student student);
}
添加mapper接口对应的xml格式文件
一定注意路径对应,com.test.demo.mapper.StudentMapper。
这里只写了插入,下文会补充删除、更新、查询
<?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.test.demo.mapper.StudentMapper">
<insert id="insert" parameterType="com.test.demo.Student" >
INSERT INTO student (Sno,Sname,Sage) VALUES (#{
sNo},#{
sName},#{
sAge})
</insert>
</mapper>
最后的controller代码文件
package com.test.demo.controller;
import org.springframework.web.bind.annotation.RestController;
import com.test.demo.Student;
import com.test.demo.mapper.StudentMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
@RestController
public class HomeController {
@Autowired
private StudentMapper studentMapper;
@RequestMapping("/")
public String index() throws Exception {
studentMapper.insert(new Student(1, "天宇", 24));
return "OK";
}
}
文件结构和结果
增删查改
mapper接口
package com.test.demo.mapper;
import com.test.demo.Student;
public interface StudentMapper {
void insert(Student student);
void delete(String sNo);
Student selectByNumber(Integer sNo);
void updateName(Student student);
}
对应xml文件
参数的类型一定是完整的包名,参数名写ben类的属性名
<?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.test.demo.mapper.StudentMapper">
<!--插入操作-->
<insert id="insert" parameterType="com.test.demo.Student" >
INSERT INTO student (Sno,Sname,Sage) VALUES (#{sNo},#{sName},#{sAge})
</insert>
<!--删除操作-->
<delete id="delete" parameterType="java.lang.String">
DELETE FROM student where Sno = #{sNo};
</delete>
<!--查询操作-->
<select id="selectByNumber" parameterType="java.lang.Integer" resultType="com.test.demo.Student">
SELECT * FROM student where Sno = #{sNo}
</select>
<!--更新操作-->
<update id="updateName" parameterType="com.test.demo.Student">
UPDATE student SET Sname = #{sName} where Sno = #{sNo}
</update>
</mapper>
Mybatis 动态SQL
在实际应用开发过程中,我们往往需要写复杂的 SQL 语句,需要拼接,而拼接SQL语句又稍微不注意,由于引号,空格等缺失可能都会导致错误。Mybatis提供了动态SQL,也就是可以根据用户提供的参数,动态决定查询语句依赖的查询条件或SQL语句的内容。
if、foreach关键字用法
mapper接口
public interface StudentMapper {
List<Student> findByCondition(String sName, Integer sAge);
List<Student> selectByNumberList(List<Integer> list);
}
对应的xml格式mapper文件
<select id="findByCondition" resultType="com.test.demo.Student" parameterType="map">
select * from student
<!--名字不为空,则限定名字-->
<!--年龄参数不为空,则限定查询结果的年龄-->
<where>
<if test="sName!=null">
and Sname = #{sName}
</if>
<if test="sAge!=null">
and Sage < #{sAge}
</if>
</where>
</select>
<select id="selectByNumberList" resultType="com.test.demo.Student" parameterType="list">
select * from student
<where>
Sno in
<foreach item="item" collection="list" separator="," open="(" close=")" index="">
#{item}
</foreach>
</where>
</select>
参考文章
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152651.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...