02、Mybatis的实战介绍

1、创建一个springboot项目

创建demo如果不太懂,可以百度

需要的依赖(有些依赖包和springboot的版本会出现冲突,如果解决不了,建议跟着教程走)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<dependencies>			
<!-- Mybatis核心 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0</version>
</dependency>
</dependencies>

2、配置mybatis

配置mybatis有两种方式:

  • 一 、通过xml的方式配置Mybatis
  1. 在 /src/main/resource下创建Mybatis配置文件 mybatis-config.xml 和 映射文件目录mapper

  2. 在application.yml指定Mybatis配置文件、映射文件的位置可选:

  • mybatis.config-location:配置 mybatis-config.xml 路径mybatis-config.xml 中配置 MyBatis 基础属性

  • mybatis.mapper-locations:配置 Mapper 对应的 XML 文件路径

  • mybatis.type-aliases-package:配置项目中实体类包路径

    application.yml

1
2
3
4
5
6
7
8
mybatis:
#标注mybatis配置文件的位置
config-location: classpath:mybatis-config.xml
#标注待解析的mapper的xml文件位置
mapper-locations: classpath:mapper/*.xml
#标注实体类位置
type-aliases-package: com.gzu.photo.entity

mybatis-config.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--设置连接数据库的环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/MyBatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
  • 二、直接在yml或者properties配置数据库信息
1
2
3
4
5
6
7
8
9
10
spring:
datasource:
password: 123456
username: root
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
mybatis:
configuration:
#开启mybatis驼峰式命名规则自动转换
map-underscore-to-camel-case: true

3、编写业务实现类,测试Mybits

  • mapper:MyBatis中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,我们不需要提供实现类。
1
2
3
4
5
6
7
8
@Mapper
public interface UserMapper {

/**
* 添加用户信息
*/
int insertUser(UserEntity entity);
}
  • service

    1
    2
    3
    4
    5
    6
    7
    8
    @Service
    public interface UserService {

    /**
    * 添加用户信息
    */
    int insertUser(UserEntity entity);
    }
  • impl

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class UserServiceImpl implents UserService{				
    @Autowired
    private UserMapper userMapper;
    /**
    * 添加用户信息
    */
    public User getUserByIds(User user){
    return userMapper.addUser(user);
    }
    }
  • controller

1
2
3
4
5
6
7
8
9
10
11
12
@RestController
public class UserServiceController {
@Autowired
private UserService userService;
/**
* 添加用户信息
*/
@PostMapping("/user/add")
public User addUser(User user){
return userService.addUser(user);
}
}
  • 编写xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?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.mybatis.mapper.UserMapper">
    <!--int insertUser();-->
    <insert id="addUser">
    insert into t_user values(null,'张三','123',23,'女')
    </insert>
    </mapper>

4、postman测试

image-20230710150027139

将参数补充完整,点击发送就可以了

5、Mybatis的简单sql语句介绍

1、添加
1
2
3
4
<!--int insertUser();-->
<insert id="insertUser">
insert into t_user values(null,'admin','123456',23,'男')
</insert>
2、删除
1
2
3
4
<!--int deleteUser();-->
<delete id="deleteUser">
delete from t_user where id = 7
</delete>
3、修改
1
2
3
4
<!--int updateUser();-->
<update id="updateUser">
update t_user set username='ybc',password='123' where id = 6
</update>
4、查询一个实体类对象
1
2
3
4
<!--User getUserById();-->
<select id="getUserById" resultType="com.test.mybatis.bean.User">
select * from t_user where id = 2
</select>
5、查询集合
1
2
3
4
<!--List<User> getUserList();-->
<select id="getUserList" resultType="com.test.mybatis.bean.User">
select * from t_user
</select>

注意:

1、查询的标签select必须设置属性resultType或resultMap,用于设置实体类和数据库表的映射关系

resultType:自动映射,用于属性名和表中字段名一致的情况

resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况

2、当查询的数据为多条时,不能使用实体类作为返回值,只能使用集合,否则会抛出异常 TooManyResultsException;但是若查询的数据只有一条,可以使用实体类或集合作为返回值

6、MyBatis获取参数值的两种方式(重点)

MyBatis获取参数值的两种方式:${}#{}

${}的本质就是字符串拼接,#{}的本质就是占位符赋值

${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引 号;但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号

1、单个字面量类型的参数

若mapper接口中的方法参数为单个的字面量类型

此时可以使用${}和#{}以任意的名称获取参数的值,注意${}需要手动加单引号

2、多个字面量类型的参数

若mapper接口中的方法参数为多个时

此时MyBatis会自动将这些参数放在一个map集合中,以arg0,arg1…为键,以参数为值;以 param1,param2…为键,以参数为值;因此只需要通过${}和#{}访问map集合的键就可以获取相对应的 值,注意${}需要手动加单引号

3、map集合类型的参数

若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合,将这些数据放在map中

只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号

4、实体类类型的参数

若mapper接口中的方法参数为实体类对象时 此时可以使用${}和#{},通过访问实体类对象中的属性名获取属性值,注意${}需要手动加单引号

5、使用@Param标识参数

可以通过@Param注解标识mapper接口中的方法参数

此时,会将这些参数放在map集合中,以@Param注解的value属性值为键,以参数为值;以 param1,param2…为键,以参数为值;只需要通过${}和#{}访问map集合的键就可以获取相对应的值, 注意${}需要手动加单引号